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
- Access Key 발급받기
- aws 메뉴 -> 보안 자격 증명에 보면 Access Key를 발급하는 버튼이 있다.
- 당연히 유출되면 큰일 나니까 잘 보관하도록. - AWS Configure
- boto3를 설치한 컴퓨터에서 aws configure 를 실행하면, 위에서 받은 코드들이 나온다.
- 소스에 인증 정보를 남기지 않기 위함이다. - 리전 이름 찾기
- 한국은 ap-northeast-2 이다. - 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.')
깔끔...