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
예제 #2
0
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
예제 #3
0
def prepare_aws_region(region):
    add_file_logger()
    aws_region = AwsRegion(region_name=region)
    aws_region.configure()