def _create_instance(self, instance_type, base_image, tags_list, instance_name=None, region_az="", test_duration=None): region = region_az[:-1] aws_region = AwsRegion(region_name=region) region_az = region_az if region_az else random.choice( aws_region.availability_zones) subnet = aws_region.sct_subnet(region_az=region_az) assert subnet, f"No SCT subnet found in the source region. " \ f"Use hydra prepare-region --region-name '{self.region_name}' to create cloud env!" LOGGER.info("Creating instance...") ec2_resource = boto3.resource("ec2", region_name=region) result = ec2_resource.create_instances( ImageId=base_image, InstanceType=instance_type, MinCount=1, MaxCount=1, KeyName=aws_region.KEY_PAIR_NAME, NetworkInterfaces=[{ "DeviceIndex": 0, "AssociatePublicIpAddress": True, "SubnetId": subnet.subnet_id, "Groups": [aws_region.sct_security_group.group_id], "DeleteOnTermination": True, }], TagSpecifications=[{ "ResourceType": "instance", "Tags": tags_list }], BlockDeviceMappings=[{ "DeviceName": ec2_ami_get_root_device_name(image_id=base_image, region=region), "Ebs": { "VolumeSize": self.instance_root_disk_size(test_duration), "VolumeType": "gp2" } }]) instance = result[0] LOGGER.info("Instance created. Waiting until it becomes running... ") instance.wait_until_running() LOGGER.info("Instance '%s' is running. Waiting for public IP...", instance.instance_id) ec2_instance_wait_public_ip(instance=instance) LOGGER.info("Got public IP: %s", instance.public_ip_address) return instance
def get_ec2_network_configuration(regions, availability_zones): ec2_security_group_ids = [] ec2_subnet_ids = [] for region in regions: aws_region = AwsRegion(region_name=region) for availability_zone in availability_zones: sct_subnet = aws_region.sct_subnet(region_az=region + availability_zone) assert sct_subnet, f"No SCT subnet configured for {region}! Run 'hydra prepare-aws-region'" ec2_subnet_ids.append(sct_subnet.subnet_id) sct_sg = aws_region.sct_security_group assert sct_sg, f"No SCT security group configured for {region}! Run 'hydra prepare-aws-region'" ec2_security_group_ids.append([sct_sg.group_id]) return ec2_security_group_ids, ec2_subnet_ids
def prepare_aws_region(region): add_file_logger() aws_region = AwsRegion(region_name=region) aws_region.configure()