Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Boto3 라이브러리로 다양한 AWS 서비스에 연결하는 방법

이 글에서는 파이썬(Python)의 Boto3 라이브러리를 사용하여 다양한 AWS 서비스에 연결하는 방법을 알아보겠습니다.

연결 대상 서비스 예시

  • AWS S3(Simple Storage Service)
  • AWS Glue Job
  • AWS SQS(Simple Queue Service) 등 그 외 여러 서비스

문제 해결 접근 방식

1단계 – Boto3 라이브러리를 사용해 AWS 세션(Session)을 생성합니다.

2단계client에 AWS 서비스 이름을 전달하면 저수준(low-level) 서비스 액세스를 얻을 수 있습니다.

또는, resource에 AWS 서비스 이름을 전달하면 고수준(high-level) 객체 지향 방식의 인터페이스로 서비스에 액세스할 수 있습니다.

예제 코드

다음 코드는 여러 AWS 서비스에 연결하는 예시입니다.

import boto3

# AWS Client(저수준 인터페이스) 가져오기
def getconnection_AWSClient(service_name):
    session = boto3.session.Session()
    # 필요시 사용자가 직접 access_key, secret_key, token을 지정할 수도 있습니다
    s3_client = session.client(service_name)
    return s3_client

print(getconnection_AWSClient('s3'))    # S3 연결
print(getconnection_AWSClient('glue'))  # Glue 연결
print(getconnection_AWSClient('sqs'))   # SQS 연결 및 기타 서비스

# AWS Resource(고수준 객체 지향 인터페이스) 가져오기
def getconnection_AWSResource(service_name):
    session = boto3.session.Session()
    # 필요시 사용자가 직접 access_key, secret_key, token을 지정할 수도 있습니다
    s3_resource = session.resource(service_name)
    return s3_resource

print(getconnection_AWSResource('s3'))   # S3 연결
print(getconnection_AWSResource('sqs'))  # SQS 연결 및 기타 서비스

실행 결과

<botocore.client.S3 object at 0x00000216C4CB89B0>
<botocore.client.Glue object at 0x00000216C5129358>
<botocore.client.SQS object at 0x00000216C4E03E10>
s3.ServiceResource()
sqs.ServiceResource()

resource 사용 시 주의사항

resource는 모든 AWS 서비스의 연결을 지원하지 않습니다. 예를 들어, 사용자가 resource를 통해 Glue 서비스에 연결을 시도하면 AWS에서 아래와 같은 예외가 발생합니다.

boto3.exceptions.ResourceNotExistsError: The 'glue' resource does not exist.

이 경우 'glue' 서비스에는 resource 대신 boto3.client('glue')를 사용하는 것이 좋습니다.

resource가 지원하는 서비스 목록

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

정리하면, 저수준 제어가 필요하거나 resource가 지원하지 않는 서비스라면 client를, 객체 지향적이고 직관적인 코드 작성이 필요한 경우에는 resource를 활용하는 것이 좋습니다. 두 방식 모두 세션 기반으로 자격 증명을 관리할 수 있어 상황에 맞게 선택하여 사용하면 됩니다.