

# 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](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/Welcome.html) を使用できます。

AWS CLI を使用する場合は、最初に設定する必要があります。詳細については、「[DynamoDB にアクセスする](AccessingDynamoDB.md)」を参照してください。

**注記**  
テーブルのインポート機能は、複数の異なる AWS のサービス (Amazon S3 や CloudWatch など) と連携して動作します。インポートを開始する前に、インポート API を呼び出すユーザーまたはロールに、機能が依存するすべてのサービスとリソースに対するアクセス許可があることを確認します。
 インポートの進行中に Amazon S3 オブジェクトを変更しないでください。オペレーションが失敗したり、キャンセルされたりする可能性があります。
エラーとトラブルシューティングの詳細については、「[インポート形式のクォータと検証](S3DataImport.Validation.md)」を参照してください。

**Topics**
+ [IAM アクセス許可のセットアップ](#DataImport.Requesting.Permissions)
+ [AWS マネジメントコンソール を使用してインポートをリクエストする](#S3DataImport.Requesting.Console)
+ [AWS マネジメントコンソールで過去のインポートの詳細を取得する](#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 オブジェクトがサーバー側の暗号化で暗号化されている場合は、インポートを開始するロールまたはユーザーが、AWS KMS キーを使用して復号するアクセス権を持っていることを確認してください。この機能は、お客様が指定したキーによるサーバー側の暗号化 (SSE−C) で暗号化された Amazon S3 オブジェクトはサポートしません。

### CloudWatch のアクセス許可
<a name="DataImport.Requesting.Permissions.cw"></a>

インポートを開始するロールまたはユーザーには、インポートに関連付けられたロググループとログストリームに対する作成と管理のアクセス許可が必要です。

## AWS マネジメントコンソール を使用してインポートをリクエストする
<a name="S3DataImport.Requesting.Console"></a>

DynamoDB コンソールを使用して、`MusicCollection` という新しいテーブルに既存のデータをインポートする方法を次の例に示します。

**テーブルのインポートをリクエストするには**

1. AWS マネジメントコンソール にサインインして DynamoDB コンソール ([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)) を開きます。

1. コンソールの左側のナビゲーションペインで、[**Import from S3**] (S3 からインポート) を選択します。

1. 表示されたページで、[**Import from S3**] (S3 からインポート) を選択します。

1. [**Import from S3**] (S3 からインポート) を選択します。

1. **[ソース S3 の URL]** に Amazon S3 のソース URL を入力します。

   ソースバケットを所有している場合は、**[S3 を参照]** を選択してバケットを検索します。または、バケットの URL を `s3://bucket/prefix` の形式で入力します。`prefix` は Amazon S3 キープレフィックスです。これは、インポートする Amazon S3 オブジェクトの名前であるか、インポートするすべての Amazon S3 オブジェクトが共有するキープレフィックスのいずれかです。
**注記**  
DynamoDB エクスポートリクエストと同じプレフィックスを使用することはできません。エクスポート機能は、すべてのエクスポートのフォルダ構造とマニフェストファイルを作成します。同じ Amazon S3 パスを使用すると、エラーが発生します。  
代わりに、特定のエクスポートからのデータを含むフォルダにインポートを指定します。この場合、正しいパスの形式は `s3://bucket/prefix/AWSDynamoDB/<XXXXXXXX-XXXXXX>/data/` になります。ここで、`XXXXXXXX-XXXXXX` はエクスポート ID です。エクスポート ID はエクスポート 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 バケット所有**] であることを確認します。ソースバケットが別のアカウントによって所有されている場合は、[**別の AWS アカウント**] を選択します。次に、バケット所有者のアカウント ID を入力します。

1. **[ファイル圧縮をインポート]** で、**[圧縮なし]**、**[GZIP]**、または **[ZSTD]** を適宜選択します。

1. 適切なインポートファイルフォーマットを選択します。オプションは、[**DynamoDB JSON**]、[**Amazon Ion**]、または [**CSV**] です。[**CSV**] を選択する場合は、[**CSV ヘッダー**] および [**CSV 区切り文字**] の 2 つの追加オプションがあります。

   [**CSV ヘッダー**] を使用する場合は、ヘッダーをファイルの最初の行から取得するか、カスタマイズするかを選択します。[**Customize your headers**] (ヘッダーをカスタマイズ) を選択した場合は、インポートに使用するヘッダーの値を指定できます。この方法で指定される CSV ヘッダーは大文字と小文字が区別され、ターゲットテーブルのキーを含むことが想定されます。

   [**CSV 区切り文字**] では、項目を区切る文字を設定します。デフォルトではカンマが選択されます。[**カスタム区切り文字**] を選択した場合、区切り文字は正規表現パターン `[,;:|\t ]` と一致する必要があります。

1. [**次へ**] ボタンを選択し、データを保存するために作成される新しいテーブルのオプションを選択します。
**注記**  
プライマリキーとソートキーはファイル内の属性と一致する必要があります。一致しない場合、インポートは失敗します。属性では、大文字と小文字が区別されます。

1. [**次へ**] をもう一度選択してインポートオプションを確認し、[**インポート**] を選択してインポートタスクを開始します。まず、新しいテーブルが「作成中」のステータスで「テーブル」にリストされます。この時点では、テーブルにアクセスできません。

1. インポートが完了すると、ステータスが「アクティブ」と表示され、テーブルの使用を開始できます。

## AWS マネジメントコンソールで過去のインポートの詳細を取得する
<a name="S3DataImport.Requesting.Console.Details"></a>

過去に実行したインポートタスクに関する情報は、ナビゲーションサイドバーの [**Import from S3**] (S3 からインポート) を選択し、[**インポート**] タブを選択して表示できます。インポートパネルには、過去 90 日間に作成されたすべてのインポートのリストが表示されます。[インポート] タブにリストされているタスクの ARN を選択すると、選択した詳細設定など、そのインポートに関する情報が取得されます。

## AWS CLI を使用してインポートをリクエストする
<a name="S3DataImport.Requesting.CLI"></a>

次の例では、プレフィックスのプレフィックスが 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 日後に期限切れになり、それより古いジョブはこのリストに表示されなくなりますが、Amazon S3 バケット内のオブジェクトまたはインポート中に作成されたテーブルは削除されません。

```
aws dynamodb list-imports
```

詳細な設定など、特定のインポートタスクに関する詳細情報を取得するには、`describe-import` コマンドを使用します。

```
aws dynamodb describe-import \
    --import-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/exp
```