본문 바로가기
Programming/Python

[Python] Pycham을 이용해 AWS EC2 인스턴스 만들기

by 찻잔속청개구리 2023. 1. 12.

안녕하세요~

이번 포스트에서는 파이참을 이용해 AWS 리소스를 만드는 실습을 해보겠습니다.

 

사전작업으로

boto3 플러그인 설치, AWS CLI 2 다운로드가 필요합니다.

 

boto3 플러그인 설치:

#Terminal

python -m pip install boto3

AWS CLI 2 다운로드:

아래 링크에서 AWS CLI를 다운받고 credeintials, config 파일을 생성했습니다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

C:\Users\user> mkdir ~/.aws

touch ~/.aws/credentials
[default]
aws_access_key_id = [access key id 입력]
aws_secret_access_key = [secret access key 입력]

touch ~/.aws/config
[default]
region = ap-northeast-2

테스트

AWS 리소스 생성이 가능한지 간단히 테스트를 해보겠습니다.

S3 버킷리스트를 출력하는 간단한 코드입니다.

 

import boto3

s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

 

AWS 인스턴스 만들기

VPC, 서브넷, 라우팅, 보안그룹, 키페어 생성 방법은 다음에 포스팅하기로 하고

이번은 인스턴스 생성이 주제이니 기생성한 리소스를 활용하기만 하겠습니다.

# 변수
AWS_REGION = "ap-northeast-2"
KEY_PAIR_NAME = "키페어이름"
AMI_ID = 'ami-***' # Amazon Linux 2
#SUBNET_ID = 'subnet-***' #pub-a
SUBNET_ID = 'subnet-***' #pri-a
INSTANCE_TYPE = "t3.medium"
SECURITY_GROUP_ID = 'sg-***'

USER_DATA = #!/bin/bash
sudo yum update -y


EC2_RESOURCE = boto3.resource('ec2', region_name=AWS_REGION)
EC2_CLIENT = boto3.client('ec2', region_name=AWS_REGION)

instances = EC2_RESOURCE.create_instances(
    MinCount = 1,
    MaxCount = 1,
    ImageId = AMI_ID,
    #Architecture = 'x86_64',
    InstanceType = INSTANCE_TYPE,
    KeyName = KEY_PAIR_NAME,
    SecurityGroupIds = [SECURITY_GROUP_ID],
    SubnetId=SUBNET_ID,
    UserData=USER_DATA,
    TagSpecifications=[
        {
            'ResourceType': 'instance',
            'Tags': [
                {
                    'Key': 'Name',
                    'Value': '***-EC2-WAS'
                },
            ]
        },
    ]
)

for instance in instances:
    print(f'EC2 instance "{instance.id}" has been launched')

    instance.wait_until_running()


    EC2_CLIENT.associate_iam_instance_profile(
        IamInstanceProfile={'Name': INSTANCE_PROFILE},
        InstanceId=instance.id,
    )


    print(f'EC2 Instance Profile "{INSTANCE_PROFILE}" has been attached')
    print(f'EC2 instance "{instance.id}" has been started')

'Programming > Python' 카테고리의 다른 글

예제로 알아보는 boto3  (0) 2023.06.02
ChatGPT와 Slack 연동  (1) 2023.05.17
[Python_Airflow] 설치 1.10버전  (0) 2022.12.27
[Python] pandas csv 생성  (0) 2022.12.15
[Python] 함수와 를 활용한 코드 분석  (0) 2022.12.14

댓글