AWS Python SDK 연동 - EC2인스턴스 만들기

AWS에서는 공식 SDK인 Boto3를 지원한다.

[ec2-user@ip-172-31-20-231 ~]$ pip3 install boto3
Defaulting to user installation because normal site-packages is not writeable
Collecting boto3
  Downloading boto3-1.26.87-py3-none-any.whl (134 kB)
     |████████████████████████████████| 134 kB 26.4 MB/s
Collecting s3transfer<0.7.0,>=0.6.0
  Downloading s3transfer-0.6.0-py3-none-any.whl (79 kB)
     |████████████████████████████████| 79 kB 14.9 MB/s
Collecting botocore<1.30.0,>=1.29.87
  Downloading botocore-1.29.87-py3-none-any.whl (10.5 MB)
     |████████████████████████████████| 10.5 MB 55.3 MB/s
Collecting jmespath<2.0.0,>=0.7.1
  Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in ./.local/lib/python3.7/site-packages (from botocore<1.30.0,>=1.29.87->boto3) (2.8.2)
Requirement already satisfied: urllib3<1.27,>=1.25.4 in ./.local/lib/python3.7/site-packages (from botocore<1.30.0,>=1.29.87->boto3) (1.26.14)
Requirement already satisfied: six>=1.5 in ./.local/lib/python3.7/site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.30.0,>=1.29.87->boto3) (1.16.0)
Installing collected packages: jmespath, botocore, s3transfer, boto3
Successfully installed boto3-1.26.87 botocore-1.29.87 jmespath-1.0.1 s3transfer-0.6.0

  1. Access Key 발급받기
    - aws 메뉴 -> 보안 자격 증명에 보면 Access Key를 발급하는 버튼이 있다.
    - 당연히 유출되면 큰일 나니까 잘 보관하도록.
  2. AWS Configure
    - boto3를 설치한 컴퓨터에서 aws configure 를 실행하면, 위에서 받은 코드들이 나온다.  
    - 소스에 인증 정보를 남기지 않기 위함이다.
  3. 리전 이름 찾기
    - 한국은 ap-northeast-2 이다.
  4. AMI 이미지 ID 찾기
    - AMI는 Amazon Machine Image 의 약어인데, OS 이미지라고 보면 된다.
이거 쓰지 말고 아래 설명에서 찾아서 복사해서 붙여 넣기를 

아래 사이트에서 AMI 이미지의 ID를 찾을 수 있다.

💡
https://cloud-images.ubuntu.com/locator/ec2/

amd64의 이미지는 ami-034000b759564de42
ARM 이미지는 ami-0084ff4520f7fd92a 이다

준비는 끝났다.  파이썬 코드를 작성하자

import boto3

ec2 = boto3.client('ec2')

# EC2 인스턴스 생성
response = ec2.run_instances(
    ImageId='ami-034000b759564de42', 
    InstanceType='t2.micro',
    KeyName='SDK_TEST', # EC2 Key Pair 이름
    MinCount=1,
    MaxCount=1
)

# EC2 인스턴스 ID 출력
print('EC2 Instance ID:', response['Instances'][0]['InstanceId'])

삭제는 아래처럼 하면 된다.

instance_id = 'i-072d3495531ff1a76'

# EC2 인스턴스 삭제
ec2.terminate_instances(InstanceIds=[instance_id])

print(f'Instance {instance_id} has been terminated.')

깔끔...