def test_ami_describe_executable_users_negative(): conn = boto3.client('ec2', region_name='us-east-1') ec2 = boto3.resource('ec2', 'us-east-1') ec2.create_instances(ImageId='', MinCount=1, MaxCount=1) response = conn.describe_instances(Filters=[{ 'Name': 'instance-state-name', 'Values': ['running'] }]) instance_id = response['Reservations'][0]['Instances'][0]['InstanceId'] image_id = conn.create_image(InstanceId=instance_id, Name='TestImage')['ImageId'] USER1 = '123456789011' USER2 = '113355789012' ADD_USER_ARGS = { 'ImageId': image_id, 'Attribute': 'launchPermission', 'OperationType': 'add', 'UserIds': [USER1] } # Add users and get no images conn.modify_image_attribute(**ADD_USER_ARGS) attributes = conn.describe_image_attribute(ImageId=image_id, Attribute='LaunchPermissions', DryRun=False) attributes['LaunchPermissions'].should.have.length_of(1) attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1) images = conn.describe_images(ExecutableUsers=[USER2])['Images'] images.should.have.length_of(0)
def test_ami_describe_executable_users_and_filter(): conn = boto3.client('ec2', region_name='us-east-1') ec2 = boto3.resource('ec2', 'us-east-1') ec2.create_instances(ImageId='', MinCount=1, MaxCount=1) response = conn.describe_instances(Filters=[{'Name': 'instance-state-name','Values': ['running']}]) instance_id = response['Reservations'][0]['Instances'][0]['InstanceId'] image_id = conn.create_image(InstanceId=instance_id, Name='ImageToDelete',)['ImageId'] USER1 = '123456789011' ADD_USER_ARGS = {'ImageId': image_id, 'Attribute': 'launchPermission', 'OperationType': 'add', 'UserIds': [USER1]} # Add users and get no images conn.modify_image_attribute(**ADD_USER_ARGS) attributes = conn.describe_image_attribute(ImageId=image_id, Attribute='LaunchPermissions', DryRun=False) attributes['LaunchPermissions'].should.have.length_of(1) attributes['LaunchPermissions'][0]['UserId'].should.equal(USER1) images = conn.describe_images(ExecutableUsers=[USER1], Filters=[{'Name': 'state', 'Values': ['available']}])['Images'] images.should.have.length_of(1) images[0]['ImageId'].should.equal(image_id)
def test_ami_describe_executable_users_and_filter(): conn = boto3.client("ec2", region_name="us-east-1") ec2 = boto3.resource("ec2", "us-east-1") ec2.create_instances(ImageId="", MinCount=1, MaxCount=1) response = conn.describe_instances( Filters=[{"Name": "instance-state-name", "Values": ["running"]}] ) instance_id = response["Reservations"][0]["Instances"][0]["InstanceId"] image_id = conn.create_image(InstanceId=instance_id, Name="ImageToDelete")[ "ImageId" ] USER1 = "123456789011" ADD_USER_ARGS = { "ImageId": image_id, "Attribute": "launchPermission", "OperationType": "add", "UserIds": [USER1], } # Add users and get no images conn.modify_image_attribute(**ADD_USER_ARGS) attributes = conn.describe_image_attribute( ImageId=image_id, Attribute="LaunchPermissions", DryRun=False ) attributes["LaunchPermissions"].should.have.length_of(1) attributes["LaunchPermissions"][0]["UserId"].should.equal(USER1) images = conn.describe_images( ExecutableUsers=[USER1], Filters=[{"Name": "state", "Values": ["available"]}] )["Images"] images.should.have.length_of(1) images[0]["ImageId"].should.equal(image_id)
def create_Instance(name, min, max): instances = ec2.create_instances(ImageId='ami-c57261a5', MinCount=int(min), MaxCount=int(max), KeyName=name, InstanceType="t2.micro", SecurityGroupIds=['sg-b0e167c9']) print("instance with key pair [{}] created\n".format(name)) return instances
def create_new_instances(num): ec2 = boto3.resource('ec2') # create a new EC2 instance instances = ec2.create_instances(ImageId='ami-04122be15033aa7ec', MinCount=1, MaxCount=int(num), InstanceType='t2.micro', SecurityGroupIds=['sg-074b481ef501670d4'], KeyName='ec2-keypair') print("Created " + str(num) + " new instances")
def test_ami_filter_by_self(): client = boto3.client('ec2', region_name='us-east-1') my_images = client.describe_images(Owners=['self']) assert len(my_images) == 0 # Create a new image instance = ec2.create_instances(ImageId='ami-1234abcd', MinCount=1, MaxCount=1)[0] image = instance.create_image(Name='test-image') my_images = client.describe_images(Owners=['self']) assert len(my_images) == 1
def test_ami_filter_by_empty_tag(): ec2 = boto3.resource("ec2", region_name="us-west-1") client = boto3.client("ec2", region_name="us-west-1") fake_images = [] instance = ec2.create_instances(ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1)[0] for i in range(10): image = client.create_image( InstanceId=instance.instance_id, Name="MyAMI{}".format(i), Description="Test", ) ec2.create_tags( Resources=[image["ImageId"]], Tags=[ { "Key": "Base_AMI_Name", "Value": "Deep Learning Base AMI (Amazon Linux 2) Version 31.0", }, { "Key": "OS_Version", "Value": "AWS Linux 2" }, ], ) fake_images.append(image) # Add release tags to some of the images in the middle for image in fake_images[3:6]: ec2.create_tags(Resources=[image["ImageId"]], Tags=[{ "Key": "RELEASE", "Value": "" }]) images_filter = [ { "Name": "tag:Base_AMI_Name", "Values": ["Deep Learning Base AMI (Amazon Linux 2) Version 31.0"], }, { "Name": "tag:OS_Version", "Values": ["AWS Linux 2"] }, { "Name": "tag:RELEASE", "Values": [""] }, ] assert len(client.describe_images(Filters=images_filter)["Images"]) == 3
def test_ami_filter_wildcard(): ec2 = boto3.resource('ec2', region_name='us-west-1') instance = ec2.create_instances(ImageId='ami-1234abcd', MinCount=1, MaxCount=1)[0] image = instance.create_image(Name='test-image') filter_result = list( ec2.images.filter(Owners=['111122223333'], Filters=[{ 'Name': 'name', 'Values': ['test*'] }])) assert filter_result == [image]
def test_create_image_with_tag_specification(): ec2 = boto3.resource("ec2", region_name="us-west-1") client = boto3.client("ec2", region_name="us-west-1") tag_specifications = [ { "ResourceType": "image", "Tags": [ { "Key": "Base_AMI_Name", "Value": "Deep Learning Base AMI (Amazon Linux 2) Version 31.0", }, { "Key": "OS_Version", "Value": "AWS Linux 2", }, ], }, ] instance = ec2.create_instances(ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1)[0] image_id = client.create_image( InstanceId=instance.instance_id, Name="test-image", Description="test ami", TagSpecifications=tag_specifications, )["ImageId"] image = client.describe_images(ImageIds=[image_id])["Images"][0] image["Tags"].should.equal(tag_specifications[0]["Tags"]) with pytest.raises(ClientError) as ex: client.create_image( InstanceId=instance.instance_id, Name="test-image", Description="test ami", TagSpecifications=[{ "ResourceType": "invalid-resource-type", "Tags": [{ "Key": "key", "Value": "value" }], }], ) ex.value.response["Error"]["Code"].should.equal("InvalidParameterValue") ex.value.response["Error"]["Message"].should.equal( "'invalid-resource-type' is not a valid taggable resource type for this operation." )
def exposed_replicate_node(self): ec2 = boto3.resource('ec2', region_name='us-west-2', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY) new_instance = ec2.create_instances(ImageId=AMI_ID, InstanceType='t1.micro', MinCount=1, MaxCount=1, SecurityGroups=[SECUR_GROUP], IamInstanceProfile={'Name' : 'newDataNode'}) instance_id = new_instance[0] print('Created new instance: ', instance_id.public_ip_address) #TODO: create an image and then call this file in the instance pass
def create_Instance(name, min, max): instances = ec2.create_instances( ImageId='ami-d8a4bbb8', MinCount=int(min), MaxCount=int(max), KeyName=name, InstanceType="t2.micro", SecurityGroupIds = ['sg-b0e167c9'] ) print("instance with key pair [{}] created\n".format(name)) instance = instances[0] instance.wait_until_running() instance.load() dns = instance.public_dns_name labelMe = "http://" + dns + "/LabelMeAnnotationTool/tool.html" print(labelMe) return labelMe, dns
if ImageId_input > 4: print("Please Enter Correct Input:\n") ImageId_input = int( input( "SELECT YOUR MACHINE\n1. Ubuntu18 \n2. Ubuntu16 \n3. Amazon-Linux2 \n4. Redhat-Linux7.6 \n" )) InstanceTypes = ['t2.micro', 't2.small', 't2.medium', 't2.large'] InstanceTypeInput = int( input("1. t2.micro \n2. t2.small \n3. t2.medium \n4. t2.large \n")) InstanceType = InstanceTypes[InstanceTypeInput - 1] instances = ec2.create_instances( ImageId=ImageId, MinCount=1, MaxCount=1, InstanceType=InstanceType, KeyName=pem_name, SecurityGroupIds=[ 'sg-0a0258e39126bcc48', ], ) instance_id = (instances[0].id) print("WAIT SERVER IS GETTING STARTED") time.sleep(100) get_instance = ec2.instances.filter(InstanceIds=[instance_id]) for i in get_instance: IP = i.public_ip_address pem_file_location = input( "Please ENTER the .pem file location (don't include name of file)\n")
def test_ami_filter_wildcard(): ec2 = boto3.resource('ec2', region_name='us-west-1') instance = ec2.create_instances(ImageId='ami-1234abcd', MinCount=1, MaxCount=1)[0] image = instance.create_image(Name='test-image') filter_result = list(ec2.images.filter(Owners=['111122223333'], Filters=[{'Name':'name', 'Values':['test*']}])) assert filter_result == [image]
def add_servers_to_region_boto3(ami_id, count, region): ec2 = boto3.resource("ec2", region_name=region) return ec2.create_instances(ImageId=ami_id, MinCount=count, MaxCount=count)
def create_instances(region=None, instance_names=[], pg_name='', image_id='', instance_type='', key_name='', security_group_ids=[], subnet_id=None, ipv6_address_count=0, ebs_optimized=None, min_count=1, max_count=1): '''Create EC2 instance. Parameters: region : string, the AWS region. instance_names : list, the list of instnace name for creating instances. pg_name : string, the name of placement group for creating instances in. ...... Reture values: True : if request succeed. False : if request failed. ''' # check inputs if min_count > max_count: print 'Invalid Inputs: parameter "min_count" ({0}) can not be greater than "max_count" ({1}).'.format( min_count, max_count) return False if len(instance_names) != max_count: print 'Invalid Inputs: parameter "instance_names" provided {0} name(s), however "max_count" ({1}) name(s) are required.'.format( len(instance_names), max_count) return False if not key_name: key_name = EC2CFG['KEY_NAME'] # connect to resource ec2 = boto3.resource('ec2') # check if instance already exists instance_iterator = ec2.instances.filter(Filters=[{ 'Name': 'tag:Name', 'Values': instance_names }]) instance_list = list(instance_iterator) if instance_list: for instance in instance_list: print '%s, known as %s, already exists.' % (instance, [ x['Value'] for x in instance.tags if x['Key'] == 'Name' ]) print 'Exit without creating any instance.' return False # launch instance print '1. Creating instance: %s' % (instance_names) kwargs = {} kwargs['ImageId'] = image_id kwargs['InstanceType'] = instance_type kwargs['KeyName'] = key_name kwargs['SecurityGroupIds'] = security_group_ids kwargs['SubnetId'] = subnet_id kwargs['Ipv6AddressCount'] = ipv6_address_count kwargs['MinCount'] = min_count kwargs['MaxCount'] = max_count kwargs['Placement'] = {'GroupName': pg_name} if ebs_optimized in (True, False): kwargs['EbsOptimized'] = ebs_optimized print 'kwargs = %s' % (kwargs) try: instance_list = ec2.create_instances(DryRun=True, **kwargs) except ClientError as e: if 'DryRunOperation' not in str(e): print e return False try: instance_list = ec2.create_instances(**kwargs) print(instance_list) except ClientError as e: raise # set instance name print '2. Creating tag as instance name' for (instance, instance_name) in zip(instance_list, instance_names): print '%s {\'Name\': %s}' % (instance, instance_name) ec2.create_tags(Resources=[instance.id], Tags=[{ 'Key': 'Name', 'Value': instance_name }]) # waiting for running print '3. Waiting instance state become running' for instance in instance_list: print "{0}: Instance State: {1}".format(instance, instance.state['Name']) while instance.state['Name'] == u'pending': time.sleep(10) instance.load() print "{0}: Instance State: {1}".format(instance, instance.state['Name']) print 'create_instances() finished' return True