반응형

python으로 dynamodb 접근하기

사용자 access key와 secret key는 발급받았다고 가정하고, aws에서 제공하는 python sdk 패키지 boto3를 설치한다.

$ pip install boto3

boto3 documentation을 참고해서 session과 client를 생성할 수 있다. S3와 다르게, 바로 client 생성은 안되는 것 같고, session을 먼저 생성한 후에 해당 session에서 client 호출을 해야한다.

session = boto3.Session(
    aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY
)

dynamodb = session.client("dynamodb", region_name="ap-northeast-2")

table 생성

dynamodb client의 create_table 함수를 이용해서 테이블 생성을 할 수 있다. console과 동일하게 파티션키(Hash)와 정렬키(Range)와 각 키의 속성(string/int)를 지정해줘야 한다.

table_creation_resp = dynamodb.create_table(
    TableName=tableName,
    KeySchema=[
        {"AttributeName": "type", "KeyType": "HASH"},  # Partition Key
        {"AttributeName": "date", "KeyType": "RANGE"},  # Sort Key
    ],
    AttributeDefinitions=[
        {"AttributeName": "type", "AttributeType": "S"},  # string data type
        {"AttributeName": "date", "AttributeType": "S"},  # string data type
    ],
    BillingMode="PROVISIONED", # 읽기/쓰기 용량 지정을 할 계획이라 ondemand가 아니라 provision으로 지정함
    ProvisionedThroughput={
        "ReadCapacityUnits": 2,
        "WriteCapacityUnits": 2,
    },
    Tags=[
        {"Key": "property", "Value": property},
        {"Key": "scale", "Value": scale},
    ],
)

provisioned 용량 범위 조정

이거 찾느라 한참 삽질했는데, dynamodb 콘솔에서 설정할 수 있는것과 마찬가지로 read/right capacity unit (RCU/WCU)의 최소/최대 범위를 지정할 수 있다.

auto_scaling_client = session.client(
    "application-autoscaling", region_name="ap-northeast-2"
)
# Read capacity
r = auto_scaling_client.register_scalable_target(
    ServiceNamespace="dynamodb",
    ResourceId=f"table/tableName",
    ScalableDimension="dynamodb:table:ReadCapacityUnits",
    MinCapacity=1,
    MaxCapacity=5,
)
print(r)
# Write capacity
r = auto_scaling_client.register_scalable_target(
    ServiceNamespace="dynamodb",
    ResourceId=f"table/tableName",
    ScalableDimension="dynamodb:table:WriteCapacityUnits",
    MinCapacity=1,
    MaxCapacity=5,
)
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기