https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html
What is Amazon DynamoDB? - Amazon DynamoDB
Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.
docs.aws.amazon.com
DynamoDB 생성하는 법과 개념은 위 링크에 잘 정리되어 있으니 참고하면 된다.
resource example
import boto3
from botocore.exceptions import ClientError
import json
dynamodb = boto3.resource(
"dynamodb",
aws_access_key_id="",
aws_secret_access_key=""
)
def insert_dynamodb(tablename):
table = dynamodb.Table(tablename)
# 여러 데이터 삽입 예제
items = [
{"pk": "1", "age": "30", "name": "박나무"},
{"pk": "2", "age": "25", "name": "김나무"},
{"pk": "3", "age": "29", "name": "이나무"},
]
for item in items:
try:
res = table.put_item(Item=item)
print(f"{item} inserted into dynamodb successfully")
except Exception as e:
print(f"Insert Error : {e}")
if __name__ == "__main__":
insert_dynamodb("hb_dynamo")

매우 간단한 코드로 데이터를 넣어주는 프로그램을 구현할 수 있다.
Table - Boto3 1.35.0 documentation
Previous tables
boto3.amazonaws.com
해당 링크에 가보면 여러가지 기능을가진 모듈이 있으니 필요한걸 찾아 사용하면 된다.
참고로 boto3는 크게 resource, client로 나뉘는데 resource는 좀 더 사용하고 간편하며 client는 low 레벨이기 때문에 실제 api와 거의 일대일 매핑이라고 한다. 본인은 개인적으로 client를 선호하지만 resource에 비해 고려할게 더 많다.
이번엔 client를 사용해서 dynamodb에 데이터를 넣어보자
client example
먼저 정리하면, 아래 코드는 s3에 있는 csv 파일을 읽어 dynamodb에 넣어주는 코드이다.
import boto3
import csv
from io import StringIO
dynamodb = boto3.client("dynamodb")
s3 = boto3.client("s3")
res = s3.get_object(Bucket="ke-ivr-data", Key="deparv.csv") # 버킷명과 파일명 지정
def insert_dynamodb(tablename):
data = res["Body"].read().decode("utf-8")
reader = csv.DictReader(StringIO(data))
for idx, row in enumerate(reader):
try:
dynamodb.put_item(
TableName="deparv", # dynamodb 테이블명 지정
Item={k: {"S": v} for k, v in row.items()},
)
except Exception as e:
print(e)
if __name__ == "__main__":
insert_dynamodb("hb_dynamo")
위 코드에서 res를 출력해보면 아래와 같다.

실제 파일의 내용은 'Body'에 있으며, decoding 해주어야 파일 내용을 확인할 수 있다. csv 모듈을 이용해서 딕셔너리 형태로 가공한 후 읽어보면 실제 파일의 내용을 딕셔너리 형태로 출력해준다.
이후 각 row에 있는 key, value를 Item에 넣어 dynamodb에 넣어주면 된다.
추가로 여기서 살펴볼건 client에서의 Item 형태가 resource와는 다르다는 점이다.
- resource = {"key": "value"}
- client = {"key": {"S" : "value"} // value에 'S'라는 키가 있고 해당 키에 대한 value가 실제 넣을 value임
DynamoDB는 마찬가지로 각 칼럼마다 문자열인지, 숫자인지, bool인지, null 인지 등을 지정해줄 수 있는데, resource에선 이러한 칼럼의 데이터타입을 명시해주지 않아도 되지만, client에선 명시해주어야 한다.
따라서 client를 사용하면 데이터가 많거나, 특정한 경우에만 insert하는 경우 프로그램을 짤 때 약간 헷갈린다.
'AWS' 카테고리의 다른 글
| [AWS] 람다에서 sns 로그 다루기 (json, dict) (0) | 2025.02.02 |
|---|---|
| [AWS] Boto3로 s3에 있는 파일 읽기 (0) | 2024.08.13 |
| [AWS] boto3로 sts 임시 자격 증명 얻기 (0) | 2024.08.12 |
| [AWS] aws sts & assume role - (2) (0) | 2024.08.12 |
| [AWS] aws sts & assume role - (1) (0) | 2024.07.26 |