

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 請求在 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)。

**注意**  
匯入資料表功能會與多個不同的 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 儲存貯體匯入資料。來源儲存貯體無需與來源資料表位於相同區域或擁有相同的擁有者。Your 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 管理主控台
<a name="S3DataImport.Requesting.Console"></a>

以下範例示範如何使用 DynamoDB 主控台將現有資料匯入名為 `MusicCollection` 的新的資料表。

**請求資料表匯入**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/) 開啟 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。您可以在匯出 ARN 中找到匯出 ID，其格式如下：`arn:aws:dynamodb:<Region>:<AccountID>:table/<TableName>/export/<XXXXXXXX-XXXXXX>`。例如 `arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4`。

1. 指定您是否為 **S3 bucket owner** (S3 儲存貯體擁有者)。如果來源儲存貯體由不同的帳戶擁有，請選取**不同的 AWS 帳戶**。然後輸入儲存貯體擁有者的帳戶 ID。

1. 在 **Import file compression** (匯入檔案壓縮)，請選取 **No compression** (無壓縮)、**GZIP** (GZIP) 或者 **ZSTD** (ZSTD)，視情況而定。

1. 選取適當的匯入檔案格式。選項包括 **DynamoDB JSON** (DynamoDB JSON)、**Amazon Ion** (Amazon Ion) 或者**CSV** (CSV)。如果您選擇 **CSV** (CSV)，您將有兩個額外的選項：**CSV header** (CSV 標頭) 和 **CSV delimiter character** (CSV 分隔符號)。

   針對 **CSV header** (CSV 標頭)，請選擇是否要從檔案的第一行取得標頭或自訂。如果您選擇**Customize your headers** (自訂標頭)，您可以指定您要匯入的標頭值。用此方法指定的 CSV 標頭區分大小寫，且應包含目標資料表的索引鍵。

   針對 **CSV delimiter character** (CSV 分隔符號)，您可以設置用以分隔項目的字元。根據預設，會選取逗號。如果您選擇 **Custom delimiter character** (自訂分隔符號字元)，分隔符號必須符合正則表達式模式：`[,;:|\t ]`。

1. 選擇 **Next** (下一步) 按鈕，然後選擇建立以儲存資料的新資料表選項。
**注意**  
「主索引鍵」和「排序索引鍵」必須符合檔案中的屬性，否則匯入將會失敗。屬性區分大小寫。

1. 選擇 **Next** (下一步) 以再次檢視您的匯入選項，然後按一下 **Import** (匯入)，以啟動匯入任務。首先，您會看到「資料表」中列出的新資料表狀態為「建立中」。目前無法存取資料表。

1. 匯入完成後，狀態將顯示為「啟用」，您可以開始使用資料表。

## 取得 中過去匯入的詳細資訊 AWS 管理主控台
<a name="S3DataImport.Requesting.Console.Details"></a>

您可以按一下導覽側列中的 **Import from S3** (從 S3 匯入)，然後選取 **Imports** (匯入) 索引標籤，找到您過去曾執行的匯入任務資訊。匯入面板包含您在過去 90 天內建立的所有匯入清單。選取 Imports (匯入) 索引標籤中所列出任務的 ARN，即可擷取該匯入的相關資訊，包括您選擇的任何進階組態設定。

## 使用 請求匯入 AWS CLI
<a name="S3DataImport.Requesting.CLI"></a>

下列範例會從名為字首儲存貯體的 S3 儲存貯體，將 CSV 格式的資料匯入到名為 target-table 的新資料表。

```
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
```