AWS CLI로 리전간 DynamoDB 테이블 복제하기

3 min read

AWS CLI로 리전간 DynamoDB 테이블 복제하기
DynamoDB 테이블을 한 리전에서 다른 리전으로 복제하는 방법을 단계별로 알아보겠습니다.
준비 사항
AWS CLI 설치 및 구성
# AWS CLI 설치 (아직 설치하지 않은 경우) # Windows: https://awscli.amazonaws.com/AWSCLIV2.msi 다운로드 후 실행 # Mac: brew install awscli 또는 https://awscli.amazonaws.com/AWSCLIV2.pkg 다운로드 후 실행 # Linux: curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && unzip awscliv2.zip && sudo ./aws/install # AWS CLI 구성 aws configure # AWS Access Key ID, Secret Access Key, 기본 리전, 출력 형식 입력
필요한 권한 확인
- DynamoDB 테이블 읽기/쓰기 권한이 있는지 확인하세요.
방법 1: 수동 복제 (가장 간단한 방법)
1단계: 소스 테이블의 스키마 추출하기
# 소스 테이블의 스키마 정보 가져오기
aws dynamodb describe-table --table-name 소스테이블명 --region 소스리전 > table_schema.json
# 예시
aws dynamodb describe-table --table-name MyTable --region us-east-1 > table_schema.json
2단계: 스키마 파일 수정하기
table_schema.json
파일을 텍스트 편집기로 열고 다음과 같이 수정합니다:
Table
객체 내부의 내용만 남기고 나머지 제거- 다음 속성만 유지:
AttributeDefinitions
,KeySchema
,LocalSecondaryIndexes
(있는 경우),GlobalSecondaryIndexes
(있는 경우),BillingMode
,ProvisionedThroughput
,TableName
수정된 파일 예시:
{
"AttributeDefinitions": [...],
"KeySchema": [...],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableName": "MyTable"
}
3단계: 대상 리전에 테이블 생성하기
# 수정된 스키마로 대상 리전에 테이블 생성
aws dynamodb create-table --cli-input-json file://table_schema.json --region 대상리전
# 예시
aws dynamodb create-table --cli-input-json file://table_schema.json --region ap-northeast-2
4단계: 소스 테이블에서 데이터 내보내기
# 소스 테이블의 모든 데이터 스캔하여 파일로 저장
aws dynamodb scan --table-name 소스테이블명 --region 소스리전 > table_data.json
# 예시
aws dynamodb scan --table-name MyTable --region us-east-1 > table_data.json
5단계: 데이터 형식 변환하기
아래 Python 스크립트를 convert_data.py
파일로 저장합니다:
import json
import sys
# 파일명 인자로 받기
source_file = sys.argv[1]
target_table = sys.argv[2]
# 스캔 데이터 로드
with open(source_file, 'r') as f:
scan_data = json.load(f)
# batch-write-item 형식으로 변환
batch_items = {
target_table: []
}
for item in scan_data.get('Items', []):
batch_items[target_table].append({
"PutRequest": {
"Item": item
}
})
# 25개 항목씩 나누기 (DynamoDB 제한)
chunks = []
items = batch_items[target_table]
for i in range(0, len(items), 25):
chunk = {
target_table: items[i:i+25]
}
chunks.append(chunk)
# 각 청크를 파일로 저장
for i, chunk in enumerate(chunks):
with open(f'batch_data_{i}.json', 'w') as f:
json.dump(chunk, f)
print(f"{len(chunks)} 개의 배치 파일이 생성되었습니다.")
스크립트 실행:
python convert_data.py table_data.json 대상테이블명
# 예시
python convert_data.py table_data.json MyTable
6단계: 데이터 가져오기
# 각 배치 파일을 대상 테이블에 가져오기
for file in batch_data_*.json; do
aws dynamodb batch-write-item --request-items file://$file --region 대상리전
echo "$file 처리 완료"
done
# 예시
for file in batch_data_*.json; do
aws dynamodb batch-write-item --request-items file://$file --region ap-northeast-2 > /dev/null
echo "$file 처리 완료"
done
방법 2: AWS DynamoDB Global Tables 사용 (자동 복제)
이 방법은 실시간 복제가 필요한 경우 권장됩니다.
1단계: 글로벌 테이블 생성하기
# 새 글로벌 테이블 생성 (두 리전에 동시에 생성)
aws dynamodb create-global-table \
--global-table-name 테이블명 \
--replication-group RegionName=리전1 RegionName=리전2
# 예시
aws dynamodb create-global-table \
--global-table-name MyGlobalTable \
--replication-group RegionName=us-east-1 RegionName=ap-northeast-2
2단계: 기존 테이블을 글로벌 테이블로 변환하기
# 기존 테이블에 새 리전 추가
aws dynamodb update-global-table \
--global-table-name 테이블명 \
--replica-updates 'Create={RegionName=추가할리전}'
# 예시
aws dynamodb update-global-table \
--global-table-name MyTable \
--replica-updates 'Create={RegionName=ap-northeast-2}'
초보자를 위한 팁
- 작은 테이블부터 시작하세요: 처음에는 작은 테이블로 연습하여 과정을 익히세요.
- 백업 먼저: 중요한 데이터는 항상 먼저 백업하세요.
- 비용 확인: 리전 간 데이터 전송 및 글로벌 테이블 사용에는 추가 비용이 발생합니다.
- 테스트 환경에서 연습: 실제 환경에 적용하기 전에 테스트 환경에서 연습하세요.
- 오류 확인: 각 단계 실행 후 오류 메시지를 확인하세요.
선택 가이드
- 간단한 일회성 복제: 방법 1 (수동 복제) 사용
- 실시간 복제 필요: 방법 2 (Global Tables) 사용
- 대용량 데이터: AWS Database Migration Service(DMS) 또는 AWS Data Pipeline 고려
이 가이드를 따라하면 AWS CLI를 사용하여 DynamoDB 테이블을 다른 리전으로 복제할 수 있습니다. 각 단계를 천천히 진행하며 명령어의 결과를 확인하세요.
0
Subscribe to my newsletter
Read articles from Unknown directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
