AWS Data Pipeline을 사용하여 Amazon DynamoDB 테이블을 다른 AWS 계정에 있는 Amazon Simple Storage Service(S3) 버킷에 백업하려고 합니다.
간략한 설명
참고: 소스 계정은 DynamoDB 테이블이 있는 계정입니다. 대상 계정은 Amazon S3 버킷이 있는 계정입니다.
- 소스 계정에서 DataPipeline 서비스 역할 및 DataPipeline 자원 역할에 Amazon S3 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 연결합니다.
- 대상 계정에서 S3 버킷에 액세스할 수 있도록 소스 계정에 DataPipeline 서비스 역할 및 DataPipeline 자원 역할을 허용합니다.
- 소스 계정에서 S3로 DynamoDB 테이블 내보내기 Data Pipeline 템플릿을 사용하여 파이프라인을 생성합니다.
- 미리 준비된 BucketOwnerFullControl 또는 AuthenticatedRead 액세스 제어 목록(ACL)을 파이프라인의 EmrActivity 객체에 있는 [단계] 필드에 추가합니다.
- DynamoDB 테이블을 대상 계정의 S3 버킷에 백업하기 위해 파이프라인을 활성화합니다.
- 대상 계정에서 DynamoDB 테이블을 생성합니다.
- 대상 테이블에 원본 테이블을 복원하려면 S3에서 DynamoDB 백업 데이터 가져오기 Data Pipeline 템플릿을 사용하여 파이프라인을 생성합니다.
해결 방법
Data Pipeline 기본 역할에 IAM 정책 연결
1. 소스 계정에서 [IAM 콘솔]을 엽니다.
2. [Policies]를 선택한 후 [Create policy]를 선택합니다.
3. [JSON] 탭을 선택하고 다음과 비슷한 IAM 정책을 입력합니다. 대상 계정에서 awsdoc-example-bucket을 S3 버킷의 이름으로 바꿉니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::awsdoc-example-bucket/*",
"arn:aws:s3:::awsdoc-example-bucket"
]
}
]
}
4. [정책 검토(Review policy)]를 선택합니다.
5. 정책의 [Name]을 입력한 후 [Create policy]를 선택합니다.
6. 정책 목록에서 방금 생성한 정책 이름 옆에 있는 확인란을 선택합니다. [Filter] 메뉴와 검색 상자를 사용하여 정책 목록을 필터링할 수 있습니다.
7. [Policy actions]를 선택하고 [Attach]를 선택합니다.
8. DataPipeline 서비스 역할 및 DataPipeline 자원 역할을 선택한 다음 정책 연결을 선택합니다.
S3 버킷에 버킷 정책 추가
대상 계정에서 다음과 유사한 버킷 정책을 생성합니다. 다음 예제에서 아래와 같은 값을 대체합니다.
- 111122223333: Data Pipeline 계정 ID. 자세한 내용은 AWS 계정 ID 찾기를 참조하세요.
- awsdoc-example-bucket: S3 버킷의 이름
{
"Version": "2012-10-17",
"Id": "",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "s3:*",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:role/DataPipelineDefaultRole",
"arn:aws:iam::111122223333:role/DataPipelineDefaultResourceRole"
]
},
"Resource": [
"arn:aws:s3:::awsdoc-example-bucket",
"arn:aws:s3:::awsdoc-example-bucket/*"
]
}
]
}
파이프라인 생성 및 활성화
1. 소스 계정에서 S3로 DynamoDB 테이블 내보내기 Data Pipeline 템플릿을 사용하여 파이프라인을 생성합니다.
[파라미터]섹션에서 소스 DynamoDB 테이블 이름 및 S3 출력 폴더를 입력합니다. 버킷에 s3://awsdoc-example-bucket/ 형식을 사용하세요.
IAM 역할에 대한 [보안/액세스] 섹션에서 [기본값]을 선택합니다.
2. 파이프라인을 활성화하기 전에 [아키텍트에서 편집]을 선택합니다.
3. [Activities] 섹션을 열고 EmrActivity 객체를 찾습니다.
4. [단계] 필드에서 미리 준비된 BucketOwnerFullControl 또는 AuthenticatedRead 액세스 제어 목록(ACL)을 추가합니다. 이렇게 미리 준비된 ACL은 대상 계정에서 S3 버킷에 쓸 수 있는 Amazon EMR Apache Hadoop 작업 권한을 제공합니다. -Dfs.s3.canned.acl=BucketOwnerFullControl 형식을 사용했는지 확인합니다. org.apache.hadoop.dynamodb.tools.DynamoDbExport 및 #{output.directoryPath} 사이에 명령문을 추가합니다. 예:
s3://dynamodb-dpl-#{myDDBRegion}/emr-ddb-storage-handler/4.11.0/emr-dynamodb-tools-4.11.0-SNAPSHOT-jar-with-dependencies.jar,org.apache.hadoop.dynamodb.tools.DynamoDBExport,-Dfs.s3.canned.acl=BucketOwnerFullControl,#{output.directoryPath},#{input.tableName},#{input.readThroughputPercent}
5. 저장을 선택한 다음 활성화를 선택하여 DynamoDB 테이블을 대상 계정의 S3 버킷에 백업하기 위해 파이프라인을 활성화합니다.
(선택 사항)대상 계정에 백업 복원
- 대상 계정에서 DynamoDB 테이블을 생성합니다. 테이블이 비어 있지 않아도 됩니다. 그러나 가져오기 프로세스에서 내보내기 파일에 있는 항목과 동일한 키를 가진 항목을 대체합니다.
- S3에서 DynamoDB 백업 데이터 가져오기 Data Pipeline 템플릿을 사용하여 파이프라인을 생성합니다.
S3 입력 폴더에 대한 [파라미터] 섹션에서 DynamoDB 백업이 저장되는 위치인 S3 버킷을 입력합니다.
IAM 역할에 대한 [보안/액세스] 섹션에서 [기본값]을 선택합니다.
- 파이프라인을 활성화하고 대상 테이블을 복원합니다.
관련 정보
버킷 소유자가 교차 계정 버킷 권한 부여
IAM 정책 관리