boto3 사용해보기

buchu·2023년 11월 11일

참고자료

AWS SDK로 AWS 인프라 관리하기(boto3 설치 및 구성)

Boto3 1.28.79 documentation

[매뉴얼] Boto3가 AWS의 자격증명(Credentials)을 확인하는 순서 .from Python

boto3 이란

boto3은 Python을 위한 AWS SDK이다.

boto3을 사용하기 위해서는 boto3을 설치하고, AWS IAM 액세스 키를 발급받아야 한다.

boto3 실습

pip install boto3

액세스 키 만들기

콘솔에서 우측 상단 계정명 클릭 > 보안 자격 증명 > 액세스 키 > [액세스 키 만들기] 로 액세스 키를 생성한다.

Untitled

로컬 자격 증명 구성하기

~/.aws 디렉터리를 생성하고 credentials 파일과 config 파일을 생성 후 다음과 같이 작성한다. 스크립트에서 따옴표는 사용하지 않는다.

# ~/.aws/credentials

[default]
aws_access_key_id = <YOUR_ACCESS_KEY>
aws_secret_access_key = <YOUR_SECRET_KEY>
# ~/.aws/config

[default]
region = <YOUR_REGION>

S3 버킷 목록 출력하기

resource() 메소드 사용

import boto3

s3 = boto3.resource('s3')

print("Your s3's are:")
for bucket in s3.buckets.all(): 
    print(bucket.name)

Untitled

Untitled

client() 메소드 사용

import boto3

s3 = boto3.client('s3')
response = s3.list_buckets()

print(response)
print()

print("Your s3 buckets are:")
for bucket in response['Buckets']: 
    print(bucket["Name"])

Untitled

자격 증명을 매개 변수로 직접 전달하기

import boto3

AWS_ACCESS_KEY_ID ="[access_key]"
AWS_SECRET_ACCESS_KEY = "[secret_key]"
AWS_DEFAULT_REGION = "ap-northeast-2"

client = boto3.client('s3',
                      aws_access_key_id=AWS_ACCESS_KEY_ID,
                      aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                      region_name=AWS_DEFAULT_REGION
                      ) # 권한을 얻음

response = client.list_buckets()
print(response)

EC2 인스턴스 목록 출력하기

describe_instances()

import boto3

client = boto3.client('ec2')
response = client.**describe_instances**()

for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        print(instance['InstanceId'], instance['State']['Name'])

EC2 인스턴스 시작

start_instances()

import boto3

instances = ['i-xxx', 'i-xxx'] # ec2 인스턴스 id
ec2 = boto3.client('ec2')

ec2.**start_instances**(InstanceIds=instances)
print('Start your instances ' + str(instances))

EC2 인스턴스 중지

stop_instances()

import boto3

instances = ['i-xxx', 'i-xxx'] # ec2 인스턴스 id
ec2 = boto3.client('ec2')

ec2.**stop_instances**(InstanceIds=instances)
print('Stopped your instances ' + str(instances))

추가 정보

resource() 메소드 대신 client() 메소드를 사용해야 하는 이유

💡 *Client는 메서드가 서비스 API와 1:1에 가깝게 매핑되는 낮은 수준의 인터페이스(low-level interface) 입니다. (공식문서)*

즉 API와 client 메서드는 거의 1:1 매핑되어 있기에 콘솔과 번갈아 사용하는 데에 있어 사용성이 편리하다.

예를 들어 AWS CLI 에서 ec2 인스턴스를 검색하기 위해서는

aws ec2 **describe-instances** --instance-id <instance-id>

명령어를 사용한다. boto3의 client 메소드로는

import boto3

client = ec2.client('ec2')

response = client.**describe_instances**(
    InstanceIds=['<instance-id>']
)

로 구현한다. api와 메소드 명이 거의 유사하다.

resource() 메소드를 사용할 수 있는 AWS API 목록

  • s3
  • cloudformation
  • cloudwatch
  • dynamodb
  • ec2
  • glacier
  • iam
  • opsworks
  • sns
  • sqs

boto3이 AWS 자격증명을 확인하는 순서

  1. boto3.client, resource, session 함수에 자격 증명을 매개 변수로 직접 전달
  2. 환경 변수
  3. 공유 자격증명 파일 (~/.aws/credentials)
  4. AWS 구성 파일 (~/.aws/config)

boto3 환경 변수 설정하기

export AWS_ACCESS_KEY_ID=*YOUR_ACCESS_KEY*
export AWS_SECRET_ACCESS_KEY=*YOUR_SECRET_KEY*
export AWS_DEFAULT_REGION=*AWS_REGION_INFO*
env # 환경 구성 확인하기

boto3 공유 자격증명 파일 작성하기

공유 자격증명 파일(credentials)은 자격증명과 관련한 변수인 aws_access_key_id, aws_secret_access_key, aws_session_token만 지정할 수 있다. 각 프로필에 해당하는 섹션 이름이 있는 INI 형식으로 작성한다. (aws_session_token은 옵션)

파일의 기본 위치는 ~/.aws/credentials 이고, AWS_SHARED_CREDENTIALS_FILE 환경 변수를 설정하여 credentials 파일의 위치를 변경할 수 있다.

[default]
aws_access_key_id = YOUR_ACCESS_KEY1
aws_secret_access_key = YOUR_SECRET_KEY1
aws_session_token = YOUR_SESSION_TOKEN1

[dev]
aws_access_key_id = YOUR_ACCESS_KEY2
aws_secret_access_key = YOUR_SECRET_KEY2

[prod]
aws_access_key_id = YOUR_ACCESS_KEY3
aws_secret_access_key = YOUR_SECRET_KEY3

0개의 댓글