본문 바로가기

잡다/cloud

[aws] python boto3 타입 사용

https://github.com/CSID-DGU/2023-02-CECD2-4/tree/ai-server-startkit/ai-server-startkit

 나는 최근 진행 중인 졸업 프로젝트에서 데이터 수집 기능 및 API 서버를 구현하고 있다. 데이터 수집 기능의 경우 lambda를 이용하여 어느 정도 구축했고, 수집한 데이터를 파이썬 기반 AI 서버에 연동하기 위한 작업을 진행해야 했다.

 일반적으로 파이썬에서 aws 서비스를 연동할 때 boto3 라이브러리를 이용한다. 사용법에 대해서는 공식 문서에서 어느 정도 친절하게 설명해주고 있다. 참고로 aws 서비스 외부에서는 액세스 키와 비밀 키, 지역 등의 정보가 추가적으로 필요하며, 이는 boto3.client에서 넘기면 된다. 개인적으로 여기서 좀 헤맸던 것 같다.

sqs = boto3.client(
    'sqs',
    aws_access_key_id=keys['AWS_ACCESS_KEY'],
    aws_secret_access_key=keys['AWS_SECRET_KEY'],
    region_name=keys['AWS_REGION']
)

s3 = boto3.client(
    's3',
    aws_access_key_id=keys['AWS_ACCESS_KEY'],
    aws_secret_access_key=keys['AWS_SECRET_KEY'],
    region_name=keys['AWS_REGION']
)

 어떻게 여기까지 코드를 따라 쳤는데, 문제가 있었다. boto3에서 기본적으로 타이핑을 지원하지 않는 부분이었다. sqs, s3는 any 타입으로 나타났고, 당연히 각종 메서드들도 전부 any로 표현되어 레퍼런스 없이 개발할 수 없었다.

send_message / receive_message 등 타입 추론 X

 자바스크립트의 sequelize을 사용할 때 각종 함수들이 추론 없이 사용되는 게 너무 싫어서 타입스크립트를 배우기 시작한 내 입장에서 타입이 지원되지 않는 시스템은 죄악이나 마찬가지다. 당연하지만, 이 세상 누군가는 나와 같은 생각을 하고 적절한 타입 선언을 제공할 것이라고 생각했고, 실제로 존재했다!

boto3-stub

https://pypi.org/project/boto3-stubs/

boto3에서 제공하는 모든 기능에 대한 타입을 지원하는 라이브러리이다. 전체 타입을 다 다운로드할 수도 있고, 필요한 서비스에 대한 타입만 따로 다운로드할 수도 있다.

# install type annotations only for boto3
python -m pip install boto3-stubs

# install boto3 type annotations
# for ec2, s3, rds, lambda, sqs, dynamo and cloudformation
python -m pip install 'boto3-stubs[essential]'

# or install annotations for services you use
python -m pip install 'boto3-stubs[acm,apigateway]'

# or install annotations in sync with boto3 version
python -m pip install 'boto3-stubs[boto3]'


# Lite version does not provide session.client/resource overloads
# it is more RAM-friendly, but requires explicit type annotations
python -m pip install 'boto3-stubs-lite[essential]'

 공식 문서에 나온 설명을 그대로 가져다가 붙인 것이다. pip install 'boto3-stubs[서비스]' 형식으로 각 서비스에 대한 타입만을 다운로드할 수 있다. 예를 들어 ec2, rds, sqs에 대한 내용만 필요하다면 pip install 'boto3-stubs[ec2,rds,sqs]' 을 커맨드라인에 입력하면 된다.

이후 mypy_boto3_서비스명 모듈을 import 해서 타입을 지정하면 각종 메서드 자동완성을 이용할 수 있다.

자동 완성이 지원된다!

 이런 모듈을 만들어주는 많은 개발자분들께 항상 감사한 마음으로 살아가고 있다...

'잡다 > cloud' 카테고리의 다른 글

클라우드 서비스 유형  (0) 2023.10.07
클라우드 개요1  (1) 2023.10.05