AWS DynamoDB Helper in Python3 1편

IT/Python3 2020. 10. 22. 10:52
반응형
import os
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
from botocore.exceptions import ClientError

"""
AWS DynamoDB 헬퍼 모듈
@desc
    파이썬 런타임의 람다가, DynamoDB에 쿼리를 할 수 있게 해주는 헬퍼 모듈
@since 2020-10-22
@author angmond
"""

# DynamoDB 아이템 조회
def get_item(dynamodb_table_name, **key_info):
    ddb = boto3.resource('dynamodb')
    table = ddb.Table(dynamodb_table_name) #DynamoDB 테이블명

    try:
        response = table.get_item(
            Key={
                'PK': key_info["DDB_파티션키!"],
                'SK': key_info["DDB_소트키!"]
            }
        )
    except ClientError as e:
        print(e.response['Error']['Message'])
        return e
    else:
        item = response['Item']
        print("GetItem succeeded:")
        print(json.dumps(item, indent=4, cls=DecimalEncoder))
        return item

# DynamoDB 아이템 생성
def put_item(dynamodb_table_name, ddb_item):

    ddb = boto3.resource('dynamodb')
    table = ddb.Table(dynamodb_table_name) #DynamoDB 테이블명

    response = table.put_item(
        Item = {
            'PK': ddb_item.파티션키,
            'SK': ddb_item.소트키,
            'data1' : ddb_item.데이터1,
            'data2' : ddb_item.데이터2,
        }
    )

    return response

# DynamoDB 아이템 조회
def get_item(dynamodb_table_name, **key_info) :
    pass

# DynamoDB 아이템 삭제
def delete_item(dynamodb_table_name, **key_info):
    pass

# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            if o % 1 > 0:
                return float(o)
            else:
                return int(o)
        return super(DecimalEncoder, self).default(o)

AWS DynamoDB의 트랜잭션 제어를 위해 간단히 만들었던 파이썬3 DDB헬퍼 입니다.

아직 삭제 등 더 구현해야 할 헬퍼 함수가 많지만, 

boto3를 이용해, DynamoDB 인터페이스 커넥터를 생성하고, 파티션키/소트키/기타 데이터 등을 조합해 트랜잭션을 진행하는 모듈입니다.

 

이렇게 보니, 진짜 라이브러리 만드는 사람들 참 대단한거같네요.. 얼마나 수많은 케이스가 있는데, 이런 것을 고려해서 함수나 모듈을 만드는건지... (앙몬드는 글쓰다가도 감탄한댜)

 

아직은 1편 초짜라서 ,하나하나 추가될 예정입니다 :)

반응형

설정

트랙백

댓글