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

UnknownUnknown
3 min read

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

DynamoDB 테이블을 한 리전에서 다른 리전으로 복제하는 방법을 단계별로 알아보겠습니다.

준비 사항

  1. 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, 기본 리전, 출력 형식 입력
    
  2. 필요한 권한 확인

    • 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 파일을 텍스트 편집기로 열고 다음과 같이 수정합니다:

  1. Table 객체 내부의 내용만 남기고 나머지 제거
  2. 다음 속성만 유지: 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. 백업 먼저: 중요한 데이터는 항상 먼저 백업하세요.
  3. 비용 확인: 리전 간 데이터 전송 및 글로벌 테이블 사용에는 추가 비용이 발생합니다.
  4. 테스트 환경에서 연습: 실제 환경에 적용하기 전에 테스트 환경에서 연습하세요.
  5. 오류 확인: 각 단계 실행 후 오류 메시지를 확인하세요.

선택 가이드

  • 간단한 일회성 복제: 방법 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

Unknown
Unknown