

# DynamoDB에서 테이블 가져오기 요청
<a name="S3DataImport.Requesting"></a>

DynamoDB 가져오기를 사용하면 Amazon S3 버킷에서 새 DynamoDB 테이블로 데이터를 가져올 수 있습니다. [DynamoDB 콘솔](https://console.aws.amazon.com/), [CLI](AccessingDynamoDB.md#Tools.CLI), [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html) 또는 [DynamoDB API](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/Welcome.html)를 사용하여 테이블 가져오기를 요청할 수 있습니다.

AWS CLI를 사용하려면 먼저 구성을 해야 합니다. 자세한 내용은 [DynamoDB 액세스](AccessingDynamoDB.md) 섹션을 참조하세요.

**참고**  
테이블 가져오기 기능은 Amazon S3 및 CloudWatch와 같은 다양한 AWS 서비스와 상호 작용합니다. 가져오기를 시작하기 전에 가져오기 API를 호출하는 사용자 또는 역할에 해당 기능에서 사용되는 모든 서비스 및 리소스에 대한 권한이 있는지 확인합니다.
 가져오기가 진행 중인 동안에는 Amazon S3 객체를 수정하지 마세요. 수정하면 작업이 실패하거나 취소될 수 있습니다.
오류 및 문제 해결에 대한 자세한 내용은 [가져오기 형식 할당량 및 유효성 검사](S3DataImport.Validation.md) 섹션을 참조하세요.

**Topics**
+ [IAM 권한 설정](#DataImport.Requesting.Permissions)
+ [AWS Management Console을 사용하여 가져오기 요청](#S3DataImport.Requesting.Console)
+ [AWS Management Console에서 이전 가져오기에 대한 세부 정보 확인](#S3DataImport.Requesting.Console.Details)
+ [AWS CLI을 사용하여 가져오기 요청](#S3DataImport.Requesting.CLI)
+ [AWS CLI에서 이전 가져오기에 대한 세부 정보 확인](#S3DataImport.Requesting.CLI.Details)

## IAM 권한 설정
<a name="DataImport.Requesting.Permissions"></a>

읽기 권한이 있는 Amazon S3 버킷에서 데이터를 가져올 수 있습니다. 소스 버킷이 소스 테이블과 같은 리전에 있거나 소유자가 동일하지 않아도 됩니다. AWS Identity and Access Management(IAM)에는 소스 Amazon S3 버킷에 대한 관련 작업과 디버깅 정보를 제공하는 데 필요한 CloudWatch 권한이 포함되어야 합니다. 예제 정책은 다음과 같습니다.

------
#### [ JSON ]

****  

```
{
  "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 권한
<a name="DataImport.Requesting.Permissions.s3"></a>

다른 계정이 소유한 Amazon S3 버킷 소스에서 가져오기를 시작할 때는 해당 역할 또는 사용자에게 Amazon S3 객체에 대한 액세스 권한이 있는지 확인합니다. Amazon S3 `GetObject` 명령을 실행하고 보안 인증 정보를 사용하여 확인할 수 있습니다. API를 사용할 때 Amazon S3 버킷 소유자 파라미터는 기본적으로 현재 사용자의 계정 ID로 설정됩니다. 교차 계정 가져오기의 경우 이 파라미터가 버킷 소유자의 계정 ID로 올바르게 채워졌는지 확인합니다. 다음 코드는 소스 계정에 있는 Amazon S3 버킷 정책의 예입니다.

------
#### [ JSON ]

****  

```
{
    "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
<a name="DataImport.Requesting.Permissions.kms"></a>

가져올 새 테이블을 생성할 때 DynamoDB가 소유하지 않은 저장 데이터 암호화 키를 선택하는 경우 고객 관리형 키로 암호화된 DynamoDB 테이블을 작동하는 데 필요한 AWS KMS 권한을 제공해야 합니다. 자세한 내용은 [AWS KMS 키 사용 권한 부여](encryption.usagenotes.html#dynamodb-kms-authz)를 참조하세요. Amazon S3 객체가 서버 측 암호화 KMS(SSE-KMS)로 암호화된 경우 가져오기를 시작하는 역할 또는 사용자에게 AWS KMS 키를 사용하여 암호를 해독할 수 있는 액세스 권한이 있는지 확인합니다. 이 기능은 고객 제공 암호화 키(SSE-C)로 암호화된 Amazon S3 객체는 지원하지 않습니다.

### CloudWatch 권한
<a name="DataImport.Requesting.Permissions.cw"></a>

가져오기를 시작하는 역할 또는 사용자에게는 가져오기와 관련된 로그 그룹 및 로그 스트림에 대한 생성 및 관리 권한이 필요합니다.

## AWS Management Console을 사용하여 가져오기 요청
<a name="S3DataImport.Requesting.Console"></a>

다음은 DynamoDB 콘솔을 사용하여 `MusicCollection`이라는 새 테이블에 기존 데이터를 가져오는 방법을 보여 주는 예입니다.

**테이블 가져오기를 요청하려면**

1. AWS Management Console에 로그인하고 DynamoDB 콘솔([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/))을 엽니다.

1. 콘솔 왼쪽의 탐색 창에서 **S3에서 가져오기(Import from S3)**를 선택합니다.

1. 표시되는 페이지에서 **S3에서 가져오기(Import from S3)**를 선택합니다.

1. **S3에서 가져오기(Import from S3)**를 선택합니다.

1. **소스 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`입니다.

1. **S3 버킷 소유자(S3 bucket owner)**인지 여부를 지정합니다. 다른 계정이 소스 버킷을 소유한 경우 **다른 AWS 계정**을 선택합니다. 그런 다음 버킷 소유자의 계정 ID를 입력합니다.

1. **가져오기 파일 압축**에서 **압축 없음**, **GZIP** 또는 **ZSTD**를 적절하게 선택합니다.

1. 적절한 가져오기 파일 형식을 선택합니다. 옵션은 **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 ]`.

1. **다음(Next)** 버튼을 클릭하고 데이터를 저장하기 위해 생성될 새 테이블에 대한 옵션을 선택합니다.
**참고**  
프라이머리 키 및 정렬 키는 파일의 속성과 일치해야 합니다. 그렇지 않으면 가져오기가 실패합니다. 속성은 대소문자를 구분합니다.

1. **다음(Next)**을 다시 선택하여 가져오기 옵션을 검토하고 **가져오기(Import)**를 클릭하여 가져오기 작업을 시작합니다. 먼저 '생성 중(Creating)' 상태로 '테이블(Tables)'에 나열된 새 테이블을 볼 수 있습니다. 현재는 테이블에 액세스할 수 없습니다.

1. 가져오기가 완료되면 상태가 '활성(Active)'으로 표시되고 테이블 사용을 시작할 수 있습니다.

## AWS Management Console에서 이전 가져오기에 대한 세부 정보 확인
<a name="S3DataImport.Requesting.Console.Details"></a>

이전에 실행한 가져오기 태스크에 대한 정보는 탐색 사이드바에서 **S3에서 가져오기(Import from S3)**를 클릭한 다음 **가져오기(Imports)** 탭을 선택하여 확인할 수 있습니다. 가져오기 패널에는 지난 90일간 생성한 모든 가져오기의 목록이 포함되어 있습니다. 가져오기 탭에 나열된 태스크의 ARN을 선택하면 선택한 고급 구성 설정을 포함하여 해당 가져오기에 대한 정보가 검색됩니다.

## AWS CLI을 사용하여 가져오기 요청
<a name="S3DataImport.Requesting.CLI"></a>

다음 예제에서는 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에서 이전 가져오기에 대한 세부 정보 확인
<a name="S3DataImport.Requesting.CLI.Details"></a>

이전에 실행한 가져오기 태스크에 대한 정보는 `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
```