DynamoDB 가져오기를 사용하면 Amazon S3 버킷에서 새 DynamoDB 테이블로 데이터를 가져올 수 있습니다. DynamoDB 콘솔
AWS CLI를 사용하려면 먼저 구성을 해야 합니다. 자세한 내용은 DynamoDB 액세스 단원을 참조하십시오.
참고
테이블 가져오기 기능은 Amazon S3 및 CloudWatch와 같은 다양한 AWS 서비스와 상호 작용합니다. 가져오기를 시작하기 전에 가져오기 API를 호출하는 사용자 또는 역할에 해당 기능에서 사용되는 모든 서비스 및 리소스에 대한 권한이 있는지 확인합니다.
가져오기가 진행 중인 동안에는 Amazon S3 객체를 수정하지 마세요. 수정하면 작업이 실패하거나 취소될 수 있습니다.
오류 및 문제 해결에 대한 자세한 내용은 가져오기 형식 할당량 및 유효성 검사 섹션을 참조하세요.
주제
IAM 권한 설정
읽기 권한이 있는 Amazon S3 버킷에서 데이터를 가져올 수 있습니다. 소스 버킷이 소스 테이블과 같은 리전에 있거나 소유자가 동일하지 않아도 됩니다. AWS Identity and Access Management(IAM)에는 소스 Amazon S3 버킷에 대한 관련 작업과 디버깅 정보를 제공하는 데 필요한 CloudWatch 권한이 포함되어야 합니다. 예제 정책은 다음과 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowDynamoDBImportAction",
"Effect": "Allow",
"Action": [
"dynamodb:ImportTable",
"dynamodb:DescribeImport"
],
"Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table*"
},
{
"Sid": "AllowS3Access",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket/*",
"arn:aws:s3:::your-bucket"
]
},
{
"Sid": "AllowCloudwatchAccess",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:PutRetentionPolicy"
],
"Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws-dynamodb/*"
},
{
"Sid": "AllowDynamoDBListImports",
"Effect": "Allow",
"Action": "dynamodb:ListImports",
"Resource": "*"
}
]
}
Amazon S3 권한
다른 계정이 소유한 Amazon S3 버킷 소스에서 가져오기를 시작할 때는 해당 역할 또는 사용자에게 Amazon S3 객체에 대한 액세스 권한이 있는지 확인합니다. Amazon S3 GetObject
명령을 실행하고 보안 인증 정보를 사용하여 확인할 수 있습니다. API를 사용할 때 Amazon S3 버킷 소유자 파라미터는 기본적으로 현재 사용자의 계정 ID로 설정됩니다. 교차 계정 가져오기의 경우 이 파라미터가 버킷 소유자의 계정 ID로 올바르게 채워졌는지 확인합니다. 다음 코드는 소스 계정에 있는 Amazon S3 버킷 정책의 예입니다.
{
"Version": "2012-10-17",
"Statement": [
{"Sid": "ExampleStatement",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:user/Dave"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
}
]
}
AWS Key Management Service
가져올 새 테이블을 생성할 때 DynamoDB가 소유하지 않은 저장 데이터 암호화 키를 선택하는 경우 고객 관리형 키로 암호화된 DynamoDB 테이블을 작동하는 데 필요한 AWS KMS 권한을 제공해야 합니다. 자세한 내용은 AWS KMS 키 사용 권한 부여를 참조하세요. Amazon S3 객체가 서버 측 암호화 KMS(SSE-KMS)로 암호화된 경우 가져오기를 시작하는 역할 또는 사용자에게 AWS KMS 키를 사용하여 암호를 해독할 수 있는 액세스 권한이 있는지 확인합니다. 이 기능은 고객 제공 암호화 키(SSE-C)로 암호화된 Amazon S3 객체는 지원하지 않습니다.
CloudWatch 권한
가져오기를 시작하는 역할 또는 사용자에게는 가져오기와 관련된 로그 그룹 및 로그 스트림에 대한 생성 및 관리 권한이 필요합니다.
AWS Management Console을 사용하여 가져오기 요청
다음은 DynamoDB 콘솔을 사용하여 MusicCollection
이라는 새 테이블에 기존 데이터를 가져오는 방법을 보여 주는 예입니다.
테이블 가져오기를 요청하려면
AWS Management Console에 로그인하고 https://console.aws.amazon.com/dynamodb/
에서 DynamoDB 콘솔을 엽니다. -
콘솔 왼쪽의 탐색 창에서 S3에서 가져오기(Import from S3)를 선택합니다.
-
표시되는 페이지에서 S3에서 가져오기(Import from S3)를 선택합니다.
-
S3에서 가져오기(Import from S3)를 선택합니다.
-
소스 S3 URL에 Amazon S3 소스 URL을 입력합니다.
소스 버킷을 소유하고 있는 경우 S3 찾아보기를 선택하여 해당 버킷을 검색합니다. 또는
s3://bucket/prefix
형식으로 버킷의 URL을 입력합니다.prefix
는 Amazon S3 키 접두사입니다. 이는 가져오려는 Amazon S3 객체 이름 또는 가져오려는 모든 Amazon S3 객체에서 공유하는 키 접두사입니다.참고
DynamoDB 내보내기 요청과 동일한 접두사를 사용할 수 없습니다. 내보내기 기능은 모든 내보내기에서 폴더 구조와 매니페스트 파일을 생성합니다. 동일한 Amazon S3 경로를 사용하는 경우 오류가 발생합니다.
대신 특정 내보내기의 데이터가 들어 있는 폴더로 가져오기를 진행합니다. 이 경우 올바른 경로의 형식은
s3://bucket/prefix/AWSDynamoDB/<XXXXXXXX-XXXXXX>/Data/
입니다. 여기서XXXXXXXX-XXXXXX
는 내보내기 ID입니다. 내보내기 ID는 내보내기 ARN에서 찾을 수 있습니다. 내보내기 ARN의 형식은arn:aws:dynamodb:<Region>:<AccountID>:table/<TableName>/export/<XXXXXXXX-XXXXXX>
입니다. 예:arn:aws:dynamodb:
.us-east-1
:123456789012
:table/ProductCatalog
/export/01234567890123-a1b2c3d4
-
S3 버킷 소유자(S3 bucket owner)인지 여부를 지정합니다. 다른 계정이 소스 버킷을 소유한 경우 A different AWS account(다른 AWS 계정)을 선택합니다. 그런 다음 버킷 소유자의 계정 ID를 입력합니다.
가져오기 파일 압축(Import file compression)에서 압축 없음(No compression), GZIP 또는 ZSTD를 적절하게 선택합니다.
적절한 가져오기 파일 형식을 선택합니다. 옵션은 DynamoDB JSON, Amazon Ion 또는 CSV입니다. CSV를 선택하면 CSV 헤더(CSV header)와 CSV 구분 기호 문자(CSV delimiter character)의 두 가지 추가 옵션이 제공됩니다.
CSV 헤더(CSV header)에서 헤더를 파일의 첫 번째 줄에서 가져올지 아니면 사용자 지정할지를 선택합니다. 헤더 사용자 지정(Customize your headers)을 선택하는 경우 가져올 헤더 값을 지정할 수 있습니다. 이 메서드로 지정된 CSV 헤더는 대소문자를 구분하며 대상 테이블의 키를 포함해야 합니다.
CSV 구분 기호 문자(CSV delimiter character)에서 항목을 구분하는 문자를 설정합니다. 쉼표가 기본적으로 선택됩니다. 사용자 지정 구분 기호 문자를 선택하는 경우 구분 기호는 정규식 패턴과 일치해야 합니다.
[,;:|\t ]
.다음(Next) 버튼을 클릭하고 데이터를 저장하기 위해 생성될 새 테이블에 대한 옵션을 선택합니다.
참고
프라이머리 키 및 정렬 키는 파일의 속성과 일치해야 합니다. 그렇지 않으면 가져오기가 실패합니다. 속성은 대소문자를 구분합니다.
다음(Next)을 다시 선택하여 가져오기 옵션을 검토하고 가져오기(Import)를 클릭하여 가져오기 작업을 시작합니다. 먼저 '생성 중(Creating)' 상태로 '테이블(Tables)'에 나열된 새 테이블을 볼 수 있습니다. 현재는 테이블에 액세스할 수 없습니다.
가져오기가 완료되면 상태가 '활성(Active)'으로 표시되고 테이블 사용을 시작할 수 있습니다.
AWS Management Console에서 이전 가져오기에 대한 세부 정보 확인
이전에 실행한 가져오기 태스크에 대한 정보는 탐색 사이드바에서 S3에서 가져오기(Import from S3)를 클릭한 다음 가져오기(Imports) 탭을 선택하여 확인할 수 있습니다. 가져오기 패널에는 지난 90일간 생성한 모든 가져오기의 목록이 포함되어 있습니다. 가져오기 탭에 나열된 태스크의 ARN을 선택하면 선택한 고급 구성 설정을 포함하여 해당 가져오기에 대한 정보가 검색됩니다.
AWS CLI을 사용하여 가져오기 요청
다음 예제에서는 prefix라는 접두사가 있는 bucket이라는 S3 버킷에서 target-table이라는 새 테이블로 CSV 형식의 데이터를 가져옵니다.
aws dynamodb import-table --s3-bucket-source S3Bucket=bucket,S3KeyPrefix=prefix \ --input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"hk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"hk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}' \ --input-format-options '{"Csv": {"HeaderList": ["hk", "title", "artist", "year_of_release"], "Delimiter": ";"}}'
참고
AWS Key Management Service(AWS KMS)에 의해 보호되는 키를 사용하여 가져오기를 암호화하도록 선택하는 경우 해당 키는 대상 Amazon S3 버킷과 동일한 리전에 있어야 합니다.
AWS CLI에서 이전 가져오기에 대한 세부 정보 확인
이전에 실행한 가져오기 태스크에 대한 정보는 list-imports
명령을 사용하여 확인할 수 있습니다. 이 명령은 지난 90일간 생성한 모든 가져오기의 목록을 반환합니다. 가져오기 태스크 메타데이터는 90일이 지나면 만료되고 그보다 오래된 작업은 더 이상 이 목록에 없지만, DynamoDB는 Amazon S3 버킷의 객체 또는 가져오기 중에 생성된 테이블을 삭제하지 않습니다.
aws dynamodb list-imports
특정 가져오기 태스크에 대해 고급 구성 설정을 포함하여 자세한 정보를 검색하려면 describe-import
명령을 사용합니다.
aws dynamodb describe-import \ --import-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/exp