Python boto3를 이용한 AWS 리소스 컨트롤-클라이언트 연결 및 EC2 생성

2019-12-03

.

import boto3
ec2_cli = boto3.client('ec2')
print(ec2_cli.describe_regions())

{‘Regions’: [{‘Endpoint’: ‘ec2.eu-north-1.amazonaws.com’, ‘RegionName’: ‘eu-north-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.ap-south-1.amazonaws.com’, ‘RegionName’: ‘ap-south-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.eu-west-3.amazonaws.com’, ‘RegionName’: ‘eu-west-3’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.eu-west-2.amazonaws.com’, ‘RegionName’: ‘eu-west-2’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.eu-west-1.amazonaws.com’, ‘RegionName’: ‘eu-west-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.ap-northeast-2.amazonaws.com’, ‘RegionName’: ‘ap-northeast-2’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.ap-northeast-1.amazonaws.com’, ‘RegionName’: ‘ap-northeast-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.sa-east-1.amazonaws.com’, ‘RegionName’: ‘sa-east-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.ca-central-1.amazonaws.com’, ‘RegionName’: ‘ca-central-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.ap-southeast-1.amazonaws.com’, ‘RegionName’: ‘ap-southeast-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.ap-southeast-2.amazonaws.com’, ‘RegionName’: ‘ap-southeast-2’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.eu-central-1.amazonaws.com’, ‘RegionName’: ‘eu-central-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.us-east-1.amazonaws.com’, ‘RegionName’: ‘us-east-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.us-east-2.amazonaws.com’, ‘RegionName’: ‘us-east-2’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.us-west-1.amazonaws.com’, ‘RegionName’: ‘us-west-1’, ‘OptInStatus’: ‘opt-in-not-required’}, {‘Endpoint’: ‘ec2.us-west-2.amazonaws.com’, ‘RegionName’: ‘us-west-2’, ‘OptInStatus’: ‘opt-in-not-required’}], ‘ResponseMetadata’: {‘RequestId’: ‘d45a29d7-4d00-4611-8ddd-7282f4c16b51’, ‘HTTPStatusCode’: 200, ‘HTTPHeaders’: {‘content-type’: ‘text/xml;charset=UTF-8’, ‘content-length’: ‘3655’, ‘vary’: ‘accept-encoding’, ‘date’: ‘Mon, 02 Dec 2019 07:16:13 GMT’, ‘server’: ‘AmazonEC2’}, ‘RetryAttempts’: 0}}

import pprint
pprint.pprint(ec2_cli.describe_regions())
for region in ec2_cli.describe_regions()['Regions']:
    print(region['RegionName'])

eu-north-1 ap-south-1 eu-west-3 eu-west-2 eu-west-1 ap-northeast-2 ap-northeast-1 sa-east-1 ca-central-1 ap-southeast-1 ap-southeast-2 eu-central-1 us-east-1 us-east-2 us-west-1 us-west-2

ec2client = boto3.client('ec2')
response = ec2client.describe_instances()
for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        pprint.pprint(instance)
ec2client = boto3.client('ec2')
response = ec2client.describe_instances()
for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        try:
            print(instance['InstanceId'], instance['CpuOptions'], instance['Tags']) #instance['Tags']
        except:
            print()

i-0b816295697f971fd {‘CoreCount’: 1, ‘ThreadsPerCore’: 1} [{‘Key’: ‘Name’, ‘Value’: ‘docker_test’}]

ec2client = boto3.client('ec2')
response = ec2client.describe_instances()
for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        try:
            print(instance['KeyName'], instance['LaunchTime'], instance['PrivateIpAddress']) #instance['Tags']
        except:
            print()
import boto3

session = boto3.session.Session(profile_name="default")
ec2 = session.resource(service_name="ec2",region_name="ap-northeast-2")

vpc = ec2.create_vpc(CidrBlock="10.105.0.0/16")
print(vpc)

vpc.create_tags(Tags=[{"Key":"Name","Value":"minman2115_vpc"}])
vpc.wait_until_available()
ec2_cli = session.client(service_name="ec2",region_name="ap-northeast-2")
ec2_cli.modify_vpc_attribute(VpcId = vpc.id, EnableDnsSupport = {"Value":True})
ec2_cli.modify_vpc_attribute(VpcId = vpc.id, EnableDnsHostnames = {"Value":True})
internetgateway = ec2.create_internet_gateway()
vpc.attach_internet_gateway(InternetGatewayId=internetgateway.id)

internetgateway.create_tags(Tags=[{"Key":"Name","Value":"minman2115_igw"}])
routetable = vpc.create_route_table()
route = routetable.create_route(DestinationCidrBlock='0.0.0.0/0',GatewayId=internetgateway.id)

routetable.create_tags(Tags=[{"Key":"Name","Value":"minman2115_rt"}])
subnet = ec2.create_subnet(CidrBlock='10.105.0.0/24',VpcId=vpc.id)
route_id = routetable.associate_with_subnet(SubnetId=subnet.id)
print(route_id)

subnet.create_tags(Tags=[{"Key":"Name","Value":"minman2115_PRzone"}])
securitygroup = ec2.create_security_group(GroupName="minman2115_sg",Description='only allow SSH traffic',VpcId=vpc.id)

securitygroup.authorize_ingress(CidrIp='0.0.0.0/0',IpProtocol='tcp',FromPort=22,ToPort=22)
securitygroup.authorize_ingress(CidrIp='0.0.0.0/0',IpProtocol='tcp',FromPort=80,ToPort=80)
securitygroup.authorize_ingress(CidrIp='0.0.0.0/0',IpProtocol='tcp',FromPort=65000,ToPort=65100)

securitygroup.create_tags(Tags=[{"Key":"Name","Value":"minman2115_sg"}])
outfile = open('xxxxxxxxxxx.pem','w')
print(outfile)

key_pair = ec2.create_key_pair(KeyName="xxxxxxxxxx")
print(key_pair)

KeyPairOut = str(key_pair.key_material)
outfile.write(KeyPairOut)
print(KeyPairOut)
instances = ec2.create_instances(
ImageId = 'ami-0d59ddf55cdda6e21',
InstanceType='t2.micro',
MaxCount = 1,
MinCount = 1,
NetworkInterfaces=[{
'SubnetId' : subnet.id,
'DeviceIndex' : 0,
'AssociatePublicIpAddress':True,
'Groups':[securitygroup.group_id],    
}],
KeyName = 'xxxxxxxxxx')

print(instances)