이 글에서는 파이썬(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를 활용하는 것이 좋습니다. 두 방식 모두 세션 기반으로 자격 증명을 관리할 수 있어 상황에 맞게 선택하여 사용하면 됩니다.