def test_delete_stack_with_resource_missing_delete_attr(): cf = boto3.client("cloudformation", region_name="us-east-1") ec2 = boto3.client("ec2", region_name="us-east-1") name = str(uuid4())[0:6] cf.create_stack(StackName=name, TemplateBody=json.dumps(template_vpc)) cf.describe_stacks(StackName=name)["Stacks"].should.have.length_of(1) resources = cf.list_stack_resources( StackName=name)["StackResourceSummaries"] vpc_id = resources[0]["PhysicalResourceId"] cf.delete_stack( StackName=name ) # should succeed, despite the fact that the resource itself cannot be deleted with pytest.raises(ClientError) as exc: cf.describe_stacks(StackName=name) err = exc.value.response["Error"] err.should.have.key("Code").equals("ValidationError") err.should.have.key("Message").equals( f"Stack with id {name} does not exist") # We still have our VPC, as the VPC-object does not have a delete-method yet ec2.describe_vpcs(VpcIds=[vpc_id])["Vpcs"].should.have.length_of(1)
def test_vpc_gateway_attachment_creation_should_attach_itself_to_vpc(): template = { "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "internetgateway": { "Type": "AWS::EC2::InternetGateway" }, "testvpc": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16", "EnableDnsHostnames": "true", "EnableDnsSupport": "true", "InstanceTenancy": "default", }, }, "vpcgatewayattachment": { "Type": "AWS::EC2::VPCGatewayAttachment", "Properties": { "InternetGatewayId": { "Ref": "internetgateway" }, "VpcId": { "Ref": "testvpc" }, }, }, }, } template_json = json.dumps(template) cf = boto3.client("cloudformation", region_name="us-west-1") stack_name = str(uuid4())[0:6] cf.create_stack(StackName=stack_name, TemplateBody=template_json) resources = cf.list_stack_resources( StackName=stack_name)["StackResourceSummaries"] vpc_id = resources[1]["PhysicalResourceId"] ec2 = boto3.client("ec2", region_name="us-west-1") vpc = ec2.describe_vpcs(VpcIds=[vpc_id])["Vpcs"][0] vpc["CidrBlock"].should.equal("10.0.0.0/16") igws = ec2.describe_internet_gateways(Filters=[{ "Name": "attachment.vpc-id", "Values": [vpc["VpcId"]] }])["InternetGateways"] igws.should.have.length_of(1)
''' Creating key pair ''' ec2 = boto3.resource('ec2') try: outfile = open('keypair.pem', 'w') key_pair = ec2.create_key_pair(KeyName='keypair') KeyPairOut = str(key_pair.key_material) outfile.write(KeyPairOut) except ClientError as e: print("Key Pair Already Exist") ''' Creating Security Group ''' ec2 = boto3.client('ec2') response = ec2.describe_vpcs() vpc_id = response.get('Vpcs', [{}])[0].get('VpcId', '') try: response = ec2.create_security_group( GroupName='SECURITYGROUP', Description='security group for ec2 instance', VpcId=vpc_id) security_group_id = response['GroupId'] print('Security Group Created %s in vpc %s.' % (security_group_id, vpc_id)) data = ec2.authorize_security_group_ingress(GroupId=security_group_id, IpPermissions=[{ 'IpProtocol': 'tcp', 'FromPort':
def test_vpc_single_instance_in_subnet(): template_json = json.dumps(vpc_single_instance_in_subnet.template) cf = boto3.client("cloudformation", region_name="us-west-1") stack_name = str(uuid4())[0:6] cf.create_stack( StackName=stack_name, TemplateBody=template_json, Parameters=[{ "ParameterKey": "KeyName", "ParameterValue": "my_key" }], ) ec2 = boto3.client("ec2", region_name="us-west-1") stack = cf.describe_stacks(StackName=stack_name)["Stacks"][0] resources = cf.list_stack_resources( StackName=stack_name)["StackResourceSummaries"] vpc_id = [ resource for resource in resources if resource["ResourceType"] == "AWS::EC2::VPC" ][0]["PhysicalResourceId"] vpc = ec2.describe_vpcs(VpcIds=[vpc_id])["Vpcs"][0] vpc["CidrBlock"].should.equal("10.0.0.0/16") vpc["Tags"].should.contain({ "Key": "Application", "Value": stack["StackId"] }) security_group = ec2.describe_security_groups( Filters=[{ "Name": "vpc-id", "Values": [vpc["VpcId"]] }])["SecurityGroups"][0] security_group["VpcId"].should.equal(vpc["VpcId"]) subnet_id = [ resource for resource in resources if resource["ResourceType"] == "AWS::EC2::Subnet" ][0]["PhysicalResourceId"] subnet = ec2.describe_subnets(SubnetIds=[subnet_id])["Subnets"][0] subnet["VpcId"].should.equal(vpc["VpcId"]) instance_id = [ resource for resource in resources if resource["ResourceType"] == "AWS::EC2::Instance" ][0]["PhysicalResourceId"] res = ec2.describe_instances(InstanceIds=[instance_id])["Reservations"][0] instance = res["Instances"][0] instance["Tags"].should.contain({"Key": "Foo", "Value": "Bar"}) eip_id = [ resource for resource in resources if resource["ResourceType"] == "AWS::EC2::EIP" ][0]["PhysicalResourceId"] eip = ec2.describe_addresses(PublicIps=[eip_id])["Addresses"][0] eip["Domain"].should.equal("vpc") eip["InstanceId"].should.equal(instance["InstanceId"])