

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

# 為 Amazon RDS 將資料庫快照資料匯出至 Amazon S3
<a name="USER_ExportSnapshot"></a>

您可以將資料庫快照資料匯出至 Amazon S3 儲存貯體。匯出程序會在背景中執行，不會影響您作用中資料庫的效能。

當您匯出資料庫快照時，Amazon RDS 會從快照擷取資料，並將其存放於 Amazon S3 儲存貯體中。資料會以壓縮且一致的 Apache Parquet 格式存放。

您可以匯出所有類型的資料庫快照，包括手動快照、自動化系統快照，以及 AWS Backup 服務建立的快照。根據預設會匯出快照中的所有資料。但是，您可以選擇匯出特定資料庫、結構描述或資料表集。

匯出資料後，您可以直接透過 Amazon Athena 或 Amazon Redshift Spectrum 等工具分析匯出後的資料。有關使用 Athena 來讀取 Parquet 資料的詳細資訊，請參閱*Amazon Athena 使用者指南*中的 [Parquet SerDe](https://docs.aws.amazon.com/athena/latest/ug/parquet-serde.html)。如需有關使用 Redshift Spectrum 來讀取 Parquet 資料的詳細資訊，請參閱*《Amazon Redshift 資料庫開發人員指南》*中的[從單欄式資料格式的 COPY](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-columnar.html)。

**警告**  
您無法將匯出的快照資料從 S3 還原至新的資料庫執行個體，或將快照資料從 S3 匯入至現有的資料庫執行個體。不過，您可以使用 Amazon Athena 或 Redshift Spectrum 處理資料，以進行分析。此外，您可以使用 AWS Glue 轉換資料，然後使用 AWS DMS 或自訂指令碼等工具將其匯入 Amazon RDS。

如需將資料庫快照匯出至 Amazon S3 的詳細資訊，請參閱下列主題。

**主題**
+ [監控 Amazon RDS 的快照匯出](USER_ExportSnapshot.Monitoring.md)
+ [取消 Amazon RDS 的快照匯出任務](USER_ExportSnapshot.Canceling.md)
+ [Amazon RDS 的 Amazon S3 匯出任務失敗訊息](USER_ExportSnapshot.failure-msg.md)
+ [對 RDS for PostgreSQL 許可錯誤進行疑難排解](USER_ExportSnapshot.postgres-permissions.md)
+ [匯出至 Amazon S3 for Amazon RDS 的檔案命名慣例](USER_ExportSnapshot.FileNames.md)
+ [Amazon RDS 匯出至 Amazon S3 儲存貯體時的資料轉換](USER_ExportSnapshot.data-types.md)

## 匯出快照資料概觀
<a name="USER_ExportSnapshot.Overview"></a>

您可以使用下列程序，將資料庫快照資料匯出至 Amazon S3 儲存貯體。如需詳細資訊，請參閱下列各節。

1. 識別要匯出的快照

   使用現有的自動化或手動快照，或手動建立資料庫執行個體或多可用區域資料庫叢集的快照。

1. 設定對 Amazon S3 儲存貯體的存取。

   「儲存貯體」**是 Amazon S3 物件或檔案的容器。如要提供存取儲存貯體的資訊，請採取下列步驟：

   1. 識別要匯出快照的目標 S3 儲存貯體。S3 儲存貯體必須與快照位於相同的 AWS 區域。如需詳細資訊，請參閱[識別要匯出的 Amazon S3 儲存貯體](#USER_ExportSnapshot.SetupBucket)。

   1. 建立 AWS Identity and Access Management (IAM) 角色，授予快照匯出任務對 S3 儲存貯體的存取權。如需詳細資訊，請參閱[使用 IAM 角色提供對 Amazon S3 儲存貯體的存取權](#USER_ExportSnapshot.SetupIAMRole)。

1. 為 AWS KMS key 伺服器端加密建立對稱加密。快照匯出任務會使用 KMS 金鑰，在將匯出資料寫入 S3 時設定 AWS KMS 伺服器端加密。

   KMS 金鑰政策必須同時包含 `kms:CreateGrant` 和 `kms:DescribeKey` 許可。如需在 Amazon RDS 中使用 KMS 金鑰的詳細資訊，請參閱 [AWS KMS key 管理](Overview.Encryption.Keys.md)。

   如果您的 KMS 金鑰政策中有拒絕陳述式，請務必明確排除 AWS 服務主體 `export.rds.amazonaws.com`。

   您可以在 AWS 帳戶中使用 KMS 金鑰，也可以使用跨帳戶 KMS 金鑰。如需詳細資訊，請參閱[使用跨帳戶 AWS KMS key 加密 Amazon S3 匯出](#USER_ExportSnapshot.CMK)。

1. 使用主控台或 `start-export-task` CLI 命令將快照匯出至 Amazon S3。如需詳細資訊，請參閱[將資料庫快照匯出至 Amazon S3 儲存貯體](#USER_ExportSnapshot.Exporting)。

1. 若要存取 Amazon S3 儲存貯體中您匯出的資料，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[上傳、下載及管理物件](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-download-objects.html)。

## 設定對 Amazon S3 儲存貯體的存取權
<a name="USER_ExportSnapshot.Setup"></a>

如要將資料庫快照資料匯出至 Amazon S3 檔案，您首先要給予快照存取 Amazon S3 儲存貯體的許可。您接著可以建立 IAM 角色，允許 Amazon RDS 服務寫入 Amazon S3 儲存貯體。

**Topics**
+ [識別要匯出的 Amazon S3 儲存貯體](#USER_ExportSnapshot.SetupBucket)
+ [使用 IAM 角色提供對 Amazon S3 儲存貯體的存取權](#USER_ExportSnapshot.SetupIAMRole)
+ [使用跨帳戶 Amazon S3 儲存貯體](#USER_ExportSnapshot.Setup.XAcctBucket)
+ [使用跨帳戶 AWS KMS key 加密 Amazon S3 匯出](#USER_ExportSnapshot.CMK)

### 識別要匯出的 Amazon S3 儲存貯體
<a name="USER_ExportSnapshot.SetupBucket"></a>

識別要匯出資料庫快照的目標 Amazon S3 儲存貯體。使用現有的 S3 儲存貯體或建立新的 S3 儲存貯體。

**注意**  
要匯出至 的 S3 儲存貯體必須與快照位於相同的 AWS 區域。

如需使用 Amazon S3 儲存貯體的詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的下列內容：
+ [ 如何檢視 S3 儲存貯體的屬性？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/view-bucket-properties.html)
+ [ 如何啟用 Amazon S3 儲存貯體的預設加密？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/default-bucket-encryption.html)
+ [ 如何建立 S3 儲存貯體？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)

### 使用 IAM 角色提供對 Amazon S3 儲存貯體的存取權
<a name="USER_ExportSnapshot.SetupIAMRole"></a>

在您將資料庫快照資料匯出至 Amazon S3 前，請給予快照匯出任務對 Amazon S3 儲存貯體的存取許可。

若要授予此許可，請建立 IAM 政策，提供儲存貯體的存取權，然後建立 IAM 角色並將該政策附加至其中。稍後您會指派 IAM 角色給您的快照匯出任務。

如需其他 Amazon S3 存取管理工具的詳細資訊，請參閱《Amazon S3 使用者指南》**中的 [Amazon S3 中的存取控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html)。

**重要**  
如果您打算使用 AWS 管理主控台 匯出快照，您可以選擇在匯出快照時自動建立 IAM 政策和角色。如需說明，請參閱[將資料庫快照匯出至 Amazon S3 儲存貯體](#USER_ExportSnapshot.Exporting)。

**給予資料庫快照任務對 Amazon S3 的存取權限**

1. 建立 IAM 政策。此政策會提供儲存貯體和物件許可，允許您的快照匯出任務存取 Amazon S3。

   在政策中，包含下列必要動作，允許將檔案從 Amazon RDS 傳輸至 S3 儲存貯體：
   + `s3:PutObject*`
   + `s3:GetObject*` 
   + `s3:ListBucket` 
   + `s3:DeleteObject*`
   +  `s3:GetBucketLocation`

   在政策中，包含下列資源，以識別 S3 儲存貯體和該儲存貯體中的物件。以下資源清單會顯示用於存取 Amazon S3 的 Amazon Resource Name (ARN) 格式。
   + `arn:aws:s3:::amzn-s3-demo-bucket`
   + `arn:aws:s3:::amzn-s3-demo-bucket/*`

   如需為 Amazon RDS 建立 IAM 政策的詳細資訊，請參閱 [建立並使用 IAM 政策進行 IAM 資料庫存取](UsingWithRDS.IAMDBAuth.IAMPolicy.md)。另請參閱《*IAM 使用者指南*》中的[教學：建立和連接您的第一個客戶受管原則](https://docs.aws.amazon.com//IAM/latest/UserGuide/tutorial_managed-policies.html)。

   下列 AWS CLI 命令會使用這些選項建立名為 `ExportPolicy`的 IAM 政策。其將存取權授予名為 *amzn-s3-demo-bucket* 的儲存貯體。
**注意**  
在您建立政策後，請記下政策的 ARN。在後續步驟中將政策附加至 IAM 角色時，您會需要此 ARN。

   ```
   aws iam create-policy  --policy-name ExportPolicy --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ExportPolicy",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject*",
                   "s3:ListBucket",
                   "s3:GetObject*",
                   "s3:DeleteObject*",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }'
   ```

1. 建立 IAM 角色，讓 Amazon RDS 可以代表您擔任此 IAM 角色，以存取您的 Amazon S3 儲存貯體。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 IAM 使用者](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)。

   下列範例顯示使用 AWS CLI 命令來建立名為 的角色`rds-s3-export-role`。

   ```
   aws iam create-role  --role-name rds-s3-export-role  --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "export.rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole"
          }
        ] 
      }'
   ```

1. 將您建立的 IAM 政策附加至您建立的 IAM 角色。

   下列 AWS CLI 命令會將先前建立的政策連接到名為 的角色`rds-s3-export-role`。將 `your-policy-arn` 取代成您在稍早步驟中記下的政策 ARN。

   ```
   aws iam attach-role-policy  --policy-arn your-policy-arn  --role-name rds-s3-export-role
   ```

### 使用跨帳戶 Amazon S3 儲存貯體
<a name="USER_ExportSnapshot.Setup.XAcctBucket"></a>

您可以跨 AWS 帳戶使用 Amazon S3 儲存貯體。若要使用跨帳戶儲存貯體，請新增儲存貯體政策，以將存取權授予您用於 S3 匯出的 IAM 角色。如需詳細資訊，請參閱[範例 2：儲存貯體擁有者授予跨帳戶儲存貯體許可](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)。

將儲存貯體政策附加至您的儲存貯體，如下列範例所示。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/Admin"
            },
            "Action": [
                "s3:PutObject*",
                "s3:ListBucket",
                "s3:GetObject*",
                "s3:DeleteObject*",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket",
                "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
            ]
        }
    ]
}
```

------

### 使用跨帳戶 AWS KMS key 加密 Amazon S3 匯出
<a name="USER_ExportSnapshot.CMK"></a>

您可以使用跨帳戶 AWS KMS key 來加密 Amazon S3 匯出。首先，將金鑰政策新增至本機帳戶，然後在外部帳戶中新增 IAM 政策。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

**使用跨帳戶 KMS 金鑰**

1. 將金鑰政策新增至本機帳戶。

   下列範例將本機帳戶 123456789012 中的許可給予外部帳戶 444455556666 中的 `ExampleRole` 和 `ExampleUser`。

   ```
   {
       "Sid": "Allow an external account to use this KMS key",
       "Effect": "Allow",
       "Principal": {
           "AWS": [
               "arn:aws:iam::444455556666:role/ExampleRole",
               "arn:aws:iam::444455556666:user/ExampleUser"
           ]
       },
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:CreateGrant",
           "kms:DescribeKey",
           "kms:RetireGrant"
       ],
       "Resource": "*"
   }
   ```

1. 將 IAM 政策新增至外部帳戶。

   以下 IAM 政策範例允許委託人使用帳戶 123456789012 中的 KMS 金鑰來進行密碼編譯操作。若要提供此許可給帳戶 444455556666 中的 `ExampleRole` 和 `ExampleUser`，請在該帳戶中[附加政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)給他們。

   ```
   {
       "Sid": "Allow use of KMS key in account 123456789012",
       "Effect": "Allow",
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:CreateGrant",
           "kms:DescribeKey",
           "kms:RetireGrant"
       ],
       "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
   }
   ```

## 將資料庫快照匯出至 Amazon S3 儲存貯體
<a name="USER_ExportSnapshot.Exporting"></a>

每個 最多可以有五個同時進行的資料庫快照匯出任務 AWS 帳戶。

**注意**  
匯出 RDS 快照可能需要一段時間，依您的資料庫類型和大小而定。匯出任務會先還原和擴展整個資料庫，然後再將資料擷取到 Amazon S3。此階段期間的工作進度會顯示為**STARTING (開始)**。當任務切換到將資料匯出到 S3 時，進度會顯示為 **In progress (進行中)**。  
匯出完成所需的時間取決於儲存在資料庫中的資料。例如，如果資料表有分散均勻的數值主索引鍵或索引資料欄，則匯出速度最快。如果資料表不含適合分割的資料欄，或是資料表只在字串型資料欄上有一個索引，則會花更多時間。因為匯出使用較慢的單一執行緒處理序，所以將會耗費更長的時間。

您可以使用 AWS CLI、 或 RDS API，將資料庫快照匯出至 AWS 管理主控台 Amazon S3。若要將資料庫快照匯出至跨帳戶 Amazon S3 儲存貯體，請使用 AWS CLI 或 RDS API。

如果您使用 Lambda 函式匯出快照集，請將 `kms:DescribeKey` 動作新增至 Lambda 函式政策。如需詳細資訊，請參閱 [AWS Lambda 許可](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html)。

### 主控台
<a name="USER_ExportSnapshot.ExportConsole"></a>

**Export to Amazon S3** (匯出至 Amazon S3) 主控台選項僅會針對可匯出至 Amazon S3 的快照顯示。由於下列原因，快照可能無法匯出：
+ S3 匯出不支援此資料庫引擎。
+ S3 匯出不支援此資料庫引擎版本。
+ 建立快照的 AWS 區域不支援 S3 匯出。

**匯出資料庫快照**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Snapshots** (快照)。

1. 從標籤中，選擇您希望匯出的快照類型。

1. 在快照清單中，選擇您希望匯出的快照。

1. 針對 **Actions** (動作)，選擇 **Export to Amazon S3** (匯出至 Amazon S3)。

   隨即出現 **Export to Amazon S3 (匯出至 Amazon S3)** 視窗。

1. 針對 **Export identifier (匯出識別符)**，輸入名稱以識別匯出任務。這個值也會用來做為在 S3 儲存貯體中建立的檔案名稱。

1. 選擇匯出的資料：
   + 選擇 **All (全部)** 來匯出快照中的所有資料。
   + 選擇 **Partial (部分)** 來匯出快照的特定部分。若要識別要匯出的快照部分，請針對 **Identifier (識別符)** 輸入一或多個資料庫、結構描述或表格，並以空格分隔。

     使用下列格式：

     ```
     database[.schema][.table] database2[.schema2][.table2] ... databasen[.scheman][.tablen]
     ```

     例如：

     ```
     mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
     ```

1. 針對 **S3 bucket (S3 儲存貯體)**，選擇要匯出的儲存貯體。

   如要將匯出資料指派給 S3 儲存貯體中的資料夾路徑，請針對 **S3 prefix (S3 字首)** 輸入選用的路徑。

1. 針對 **IAM role (IAM 角色)**，您可選擇授予對您所選擇 S3 儲存貯體寫入存取權限的角色，或建立新角色。
   + 如果您透過遵循 [使用 IAM 角色提供對 Amazon S3 儲存貯體的存取權](#USER_ExportSnapshot.SetupIAMRole) 中的步驟建立了角色，請選擇該角色。
   + 如果您沒有建立授予您所選擇 S3 儲存貯體寫入存取權限的角色，請選擇 **Create a new role** (建立新角色) 以自動建立角色。接下來，為 **IAM 角色名稱 (IAM role name)** 中的角色輸入名稱。

1. 針對 **AWS KMS key**，輸入金鑰的 ARN 以加密匯出的資料。

1. 選擇 **Export to Amazon S3 (匯出至 Amazon S3)**。

### AWS CLI
<a name="USER_ExportSnapshot.ExportCLI"></a>

若要使用 將資料庫快照匯出至 Amazon S3 AWS CLI，請使用 [start-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/start-export-task.html) 命令搭配下列必要選項：
+ `--export-task-identifier` 
+ `--source-arn` 
+ `--s3-bucket-name` 
+ `--iam-role-arn` 
+ `--kms-key-id` 

在下列範例中，快照匯出任務名為 *my-snapshot-export*，會將快照匯出至名為 *amzn-s3-demo-bucket* 的 S3 儲存貯體。

**Example**  
針對 Linux、macOS 或 Unix：  

```
1. aws rds start-export-task \
2.     --export-task-identifier my-snapshot-export \
3.     --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \
4.     --s3-bucket-name amzn-s3-demo-bucket \
5.     --iam-role-arn iam-role \
6.     --kms-key-id my-key
```
在 Windows 中：  

```
1. aws rds start-export-task ^
2.     --export-task-identifier my-snapshot-export ^
3.     --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name ^
4.     --s3-bucket-name amzn-s3-demo-bucket ^
5.     --iam-role-arn iam-role ^
6.     --kms-key-id my-key
```
範例輸出如下。  

```
{
    "Status": "STARTING", 
    "IamRoleArn": "iam-role", 
    "ExportTime": "2019-08-12T01:23:53.109Z", 
    "S3Bucket": "my-export-bucket", 
    "PercentProgress": 0, 
    "KmsKeyId": "my-key", 
    "ExportTaskIdentifier": "my-snapshot-export", 
    "TotalExtractedDataInGB": 0, 
    "TaskStartTime": "2019-11-13T19:46:00.173Z", 
    "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name"
}
```
如要為快照匯出提供 S3 儲存貯體中的資料夾路徑，請在 [start-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/start-export-task.html) 命令中包含 `--s3-prefix` 選項。

### RDS API
<a name="USER_ExportSnapshot.ExportAPI"></a>

如要使用 Amazon RDS API 將資料庫快照匯出至 Amazon S3，請搭配下列必要參數使用 [StartExportTask](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartExportTask.html) 操作：
+ `ExportTaskIdentifier`
+ `SourceArn`
+ `S3BucketName`
+ `IamRoleArn`
+ `KmsKeyId`

## 區域和版本可用性
<a name="USER_ExportSnapshot.RegionVersionAvailability"></a>

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需具備將快照匯出至 S3 功能的版本和區域可用性的詳細資訊，請參閱 [將快照匯出至 Amazon RDS 中的 S3 的支援區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.ExportSnapshotToS3.md)。

## 限制
<a name="USER_ExportSnapshot.Limits"></a>

將資料庫快照資料匯出至 Amazon S3 時有下列限制：
+ 您無法同時針對相同的資料庫快照執行多個匯出任務。這同時適用於完整和部分匯出。
+ 不支援從使用磁性儲存體的資料庫匯出快照。
+ 匯出至 S3 不支援內含冒號 (:) 的 S3 字首。
+ 在匯出過程中，S3 檔案路徑中的以下字元將轉換為底線 (\$1)：

  ```
  \ ` " (space)
  ```
+ 如果資料庫、結構描述或資料表的名稱中包含下列字元以外的字元，則不支援部分匯出。但是，您可以匯出整個資料庫快照。
  + 拉丁字母 (A–Z)
  + 數字 (0–9)
  + 美元符號 (\$1)
  + 底線 (\$1)
+ 資料庫資料表資料欄名稱不支援空格 ( ) 和某些字元。資料行名稱中具備下列字元的資料表會在匯出時跳過：

  ```
  , ; { } ( ) \n \t = (space)
  ```
+ 匯出時會略過名稱中具備斜線 (/) 的表格。
+ 匯出期間，系統會略過 RDS for PostgreSQL 的暫存和未記錄資料表。
+ 若資料包含接近或超過 500 MB 的大型物件 (例如 BLOB 或 CLOB)，則匯出會失敗。
+ 如果資料表包含接近或大於 2 GB 的大型資料列，則在匯出期間會略過該資料表。
+ 對於部分匯出，`ExportOnly` 清單的大小上限為 200 KB。
+ 強烈建議您對每個匯出任務使用唯一的名稱。如果不使用唯一的任務名稱，可能會收到下列錯誤訊息：

  ExportTaskAlreadyExistsFault：呼叫 StartExportTask 操作時出現錯誤 (ExportTaskAlreadyExists)：ID *xxxxx* 的匯出任務已存在。
+ 您在將快照資料匯出至 S3 時可以刪除該快照，但在匯出任務完成之前，仍會向您收取該快照的儲存費用。
+ 您無法將匯出的快照資料從 S3 還原至新的資料庫執行個體，或將快照資料從 S3 匯入至現有的資料庫執行個體。
+ 每個 最多可以有五個同時進行的資料庫快照匯出任務 AWS 帳戶。
+ 若要將資料庫快照匯出至跨帳戶 Amazon S3 儲存貯體，您必須使用 AWS CLI 或 RDS API。
+ Amazon RDS 完成匯出任務後，可能需要稍待片刻，才能從相同的資料庫快照啟動另一個匯出任務。
+ 您無法匯出檢視或具體化檢視。
+ RDS 匯出至 S3 的作業不支援 GuardDuty Malware Protection for S3 的標籤型存取控制。

# 監控 Amazon RDS 的快照匯出
<a name="USER_ExportSnapshot.Monitoring"></a>

您可以使用 AWS 管理主控台、AWS CLI 或 RDS API 監控資料庫快照匯出。

## 主控台
<a name="USER_ExportSnapshot.MonitorConsole"></a>

**監控資料庫快照匯出**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Snapshots** (快照)。

1. 如要檢視快照匯出清單，請選擇 **Exports in Amazon S3 (Amazon S3 中的匯出)** 標籤。

1. 如要檢視特定快照匯出的相關資訊，請選擇匯出任務。

## AWS CLI
<a name="USER_ExportSnapshot.MonitorCLI"></a>

如要使用 AWS CLI 監控資料庫快照匯出，請使用 [describe-export-tasks](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-export-tasks.html) 命令。

以下範例示範如何顯示您所有快照匯出的目前資訊。

**Example**  

```
 1. aws rds describe-export-tasks
 2. 
 3. {
 4.     "ExportTasks": [
 5.         {
 6.             "Status": "CANCELED",
 7.             "TaskEndTime": "2019-11-01T17:36:46.961Z",
 8.             "S3Prefix": "something",
 9.             "ExportTime": "2019-10-24T20:23:48.364Z",
10.             "S3Bucket": "amzn-s3-demo-bucket",
11.             "PercentProgress": 0,
12.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY",
13.             "ExportTaskIdentifier": "anewtest",
14.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
15.             "TotalExtractedDataInGB": 0,
16.             "TaskStartTime": "2019-10-25T19:10:58.885Z",
17.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:parameter-groups-test"
18.         },
19. {
20.             "Status": "COMPLETE",
21.             "TaskEndTime": "2019-10-31T21:37:28.312Z",
22.             "WarningMessage": "{\"skippedTables\":[],\"skippedObjectives\":[],\"general\":[{\"reason\":\"FAILED_TO_EXTRACT_TABLES_LIST_FOR_DATABASE\"}]}",
23.             "S3Prefix": "",
24.             "ExportTime": "2019-10-31T06:44:53.452Z",
25.             "S3Bucket": "amzn-s3-demo-bucket1",
26.             "PercentProgress": 100,
27.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
28.             "ExportTaskIdentifier": "thursday-events-test", 
29.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
30.             "TotalExtractedDataInGB": 263,
31.             "TaskStartTime": "2019-10-31T20:58:06.998Z",
32.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-31-06-44"
33.         },
34.         {
35.             "Status": "FAILED",
36.             "TaskEndTime": "2019-10-31T02:12:36.409Z",
37.             "FailureCause": "The S3 bucket edgcuc-export isn't located in the current AWS Region. Please, review your S3 bucket name and retry the export.",
38.             "S3Prefix": "",
39.             "ExportTime": "2019-10-30T06:45:04.526Z",
40.             "S3Bucket": "amzn-s3-demo-bucket2",
41.             "PercentProgress": 0,
42.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
43.             "ExportTaskIdentifier": "wednesday-afternoon-test",
44.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
45.             "TotalExtractedDataInGB": 0,
46.             "TaskStartTime": "2019-10-30T22:43:40.034Z",
47.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-30-06-45"
48.         }
49.     ]
50. }
```
如要顯示特定快照匯出的相關資訊，請在 `--export-task-identifier` 命令中包含 `describe-export-tasks` 選項。如要篩選輸出，請包含 `--Filters` 選項。如需更多選項，請參閱 [describe-export-tasks](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-export-tasks.html) 命令。

## RDS API
<a name="USER_ExportSnapshot.MonitorAPI"></a>

如要使用 Amazon RDS API 顯示資料庫快照匯出的相關資訊，請使用 [DescribeExportTasks](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeExportTasks.html) 操作。

若要追蹤匯出工作流程的完成或起始其他工作流程，您可以訂閱 Amazon Simple Notification Service 主題。如需 Amazon SNS 的詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。

# 取消 Amazon RDS 的快照匯出任務
<a name="USER_ExportSnapshot.Canceling"></a>

您可以使用 AWS 管理主控台、AWS CLI 或 RDS API 取消資料庫快照匯出任務。

**注意**  
取消快照匯出任務不會移除任何已匯出到 Amazon S3 的資料。如需如何使用主控台刪除資料的資訊，請參閱[如何從 S3 儲存貯體刪除物件？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/delete-objects.html) 如要使用 CLI 刪除資料，請使用 [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) 命令。

## 主控台
<a name="USER_ExportSnapshot.CancelConsole"></a>

**取消快照匯出任務**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Snapshots** (快照)。

1. 選擇 **Exports in Amazon S3 (Amazon S3 中的匯出)** 標籤。

1. 選擇您希望取消的快照匯出任務。

1. 選擇 **Cancel (取消)**。

1. 選擇確認頁面上的 **Cancel export task (取消匯出任務)**。

 

## AWS CLI
<a name="USER_ExportSnapshot.CancelCLI"></a>

如要使用 AWS CLI 取消快照匯出任務，請使用 [cancel-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/cancel-export-task.html) 命令。命令需要 `--export-task-identifier` 選項。

**Example**  

```
 1. aws rds cancel-export-task --export-task-identifier my_export
 2. {
 3.     "Status": "CANCELING", 
 4.     "S3Prefix": "", 
 5.     "ExportTime": "2019-08-12T01:23:53.109Z", 
 6.     "S3Bucket": "amzn-s3-demo-bucket", 
 7.     "PercentProgress": 0, 
 8.     "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", 
 9.     "ExportTaskIdentifier": "my_export", 
10.     "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", 
11.     "TotalExtractedDataInGB": 0, 
12.     "TaskStartTime": "2019-11-13T19:46:00.173Z", 
13.     "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:export-example-1"
14. }
```

## RDS API
<a name="USER_ExportSnapshot.CancelAPI"></a>

如要使用 Amazon RDS API 取消快照匯出任務，請搭配 `ExportTaskIdentifier` 參數使用 [CancelExportTask](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CancelExportTask.html) 操作。

# Amazon RDS 的 Amazon S3 匯出任務失敗訊息
<a name="USER_ExportSnapshot.failure-msg"></a>

下表說明 Amazon S3 匯出任務失敗時傳回的訊息。


| 失敗訊息 | 描述 | 
| --- | --- | 
| 發生未知的內部錯誤。 |  因為不明的錯誤、例外或故障，所以任務失敗。  | 
| 將匯出任務的中繼資料寫入 S3 儲存貯體 [儲存貯體名稱] 時發生未知的內部錯誤。 |  因為不明的錯誤、例外或故障，所以任務失敗。  | 
| RDS 匯出無法寫入匯出任務的中繼資料，因為無法擔任 IAM 角色 [角色 ARN]。 |  匯出任務會擔任您的 IAM 角色，以驗證是否允許將中繼資料寫入 S3 儲存貯體。如果任務無法擔任您的 IAM 角色，則會失敗。  | 
| RDS 匯出無法使用具有 KMS 金鑰 [金鑰 ID] 的 IAM 角色 [角色 ARN]，將匯出任務的中繼資料寫入 S3 儲存貯體 [儲存貯體名稱]。錯誤代碼：[錯誤代碼] |  缺少一或多個許可，因此匯出任務無法存取 S3 儲存貯體。收到下列其中一個錯誤碼時會引發此失敗訊息： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.failure-msg.html) 這些錯誤碼表示 IAM 角色、S3 儲存貯體或 KMS 金鑰的設定錯誤。  | 
| IAM 角色 [角色 ARN] 未獲得授權在 S3 儲存貯體 [儲存貯體名稱] 上呼叫 [S3 動作]。檢閱您的許可，然後重試匯出。 |  IAM 政策設定錯誤。缺少 S3 儲存貯體上特定 S3 動作的許可，這會導致匯出任務失敗。  | 
| KMS 金鑰檢查失敗。請檢查 KMS 金鑰上的憑證，然後再試一次。 | KMS 金鑰憑證檢查失敗。 | 
| S3 憑證檢查失敗。檢查您的 S3 儲存貯體與 IAM 政策的許可。 | S3 憑證檢查失敗。 | 
| S3 儲存貯體 [儲存貯體名稱] 無效。可能不是位於目前的 AWS 區域或不存在。檢閱您的 S3 儲存貯體名稱並重試匯出。 | S3 儲存貯體無效。 | 
| S3 儲存貯體 [儲存貯體名稱] 並非位於目前 AWS 區域。檢閱您的 S3 儲存貯體名稱並重試匯出。 | S3 儲存貯體位於錯誤 AWS 區域。 | 

# 對 RDS for PostgreSQL 許可錯誤進行疑難排解
<a name="USER_ExportSnapshot.postgres-permissions"></a>

將 PostgreSQL 資料庫匯出至 Amazon S3 時，您可能會看到 `PERMISSIONS_DO_NOT_EXIST` 錯誤，指出某些資料表已略過。之所以發生此錯誤，通常是因為您在建立資料庫時指定的超級使用者沒有存取這些資料表的許可。

若要修正此錯誤，請執行下列命令：

```
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO superuser_name
```

如需超級使用者權限的詳細資訊，請參閱[主要使用者帳戶權限](UsingWithRDS.MasterAccounts.md)。

# 匯出至 Amazon S3 for Amazon RDS 的檔案命名慣例
<a name="USER_ExportSnapshot.FileNames"></a>

特定表格的匯出資料會以 `base_prefix/files` 的格式儲存，其中基本前綴如下：

```
export_identifier/database_name/schema_name.table_name/
```

例如：

```
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
```

檔案命名方式有兩種慣例：
+ 目前慣例：

  ```
  batch_index/part-partition_index-random_uuid.format-based_extension
  ```

  批次索引是序號，代表從資料表讀取的資料批次。如果我們無法將您的資料表分割成要平行匯出的小型區塊，將會有多個批次索引。如果您的資料表分割為多個資料表，則會發生相同的情況。此時會有多個批次索引，一個用於主資料表的每個資料表分割區。

  如果我們可以將您的資料表分割成要平行讀取的小區塊，則只會有批次索引 `1` 資料夾。

  在批次索引資料夾中，有一或多個 Parquet 檔案包含資料表的資料。Parquet 檔案名稱的字首為 `part-partition_index`。如果您的資料表已分割，則會有多個以分割區索引 `00000` 開頭的檔案。

  分割區索引序列中可能會有間隙。這是因為每個分割區是從資料表中的範圍查詢取得。如果該分割區的範圍內沒有資料，則會略過該序號。

  例如，假設 `id` 欄是資料表的主索引鍵，且其最小值和最大值為 `100` 和 `1000`。當我們嘗試使用九個分割區匯出此資料表時，我們會使用平行查詢來讀取它，如下所示：

  ```
  SELECT * FROM table WHERE id <= 100 AND id < 200
  SELECT * FROM table WHERE id <= 200 AND id < 300
  ```

  這應該會產生從 `part-00000-random_uuid.gz.parquet` 到 `part-00008-random_uuid.gz.parquet` 的九個檔案。不過，如果沒有 ID 介於 `200` 和 `350` 之間的資料列，則其中一個已完成的分割區是空的，而且不會為其建立檔案。在上一個範例中，`part-00001-random_uuid.gz.parquet` 不會建立。
+ 較舊的慣例：

  ```
  part-partition_index-random_uuid.format-based_extension
  ```

  這與目前的慣例相同，但沒有 `batch_index` 字首，例如：

  ```
  part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet
  part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet
  part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet
  ```

檔案命名慣例可能會有所變更。因此，在讀取目標資料表時，建議您讀取資料表基本字首內的所有內容。

# Amazon RDS 匯出至 Amazon S3 儲存貯體時的資料轉換
<a name="USER_ExportSnapshot.data-types"></a>

當您將資料庫快照匯出至 Amazon S3 儲存貯體時，Amazon RDS 會以 Parquet 格式轉換資料、匯出資料，以及存放資料。如需 Parquet 的詳細資訊，請參閱 [Apache Parquet](https://parquet.apache.org/docs/) 網站。

Parquet 會將所有資料以下列其中一種基本類型存放：
+ BOOLEAN
+ INT32
+ INT64
+ INT96
+ FLOAT
+ DOUBLE
+ BYTE\$1ARRAY – 長度可變的位元組陣列，也稱為二進位
+ FIXED\$1LEN\$1BYTE\$1ARRAY – 長度固定的位元組陣列，用於值具備固定大小時

Parquet 的資料類型相當少，可減少讀取和寫入格式的複雜性。Parquet 提供擴充基本類型的邏輯類型。「邏輯類型」**會實作為標註，並將資料存放在 `LogicalType` 中繼資料欄位中。邏輯類型標註會說明如何解譯基本類型。

當 `STRING` 邏輯類型標註 `BYTE_ARRAY` 類型時，會指出位元組陣列應解譯為 UTF-8 編碼的字元字串。在匯出任務完成後，Amazon RDS 會通知您是否發生任何字串轉換。匯出的基礎資料一律與來源資料相同。但是，由於 UTF-8 中的編碼存在差異，在 Athena 等工具中讀取時，有些字元的顯示方式可能會和來源中的顯示方式不同。

如需詳細資訊，請參閱 Parquet 文件中的 [Parquet Logical Type Definitions](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md)。

**Topics**
+ [MySQL 和 MariaDB 資料類型對 Parquet 的映射](#USER_ExportSnapshot.data-types.MySQL)
+ [PostgreSQL 資料類型對 Parquet 的映射](#USER_ExportSnapshot.data-types.PostgreSQL)

## MySQL 和 MariaDB 資料類型對 Parquet 的映射
<a name="USER_ExportSnapshot.data-types.MySQL"></a>

下表顯示轉換資料並匯出至 Amazon S3 時，MySQL 和 MariaDB 資料類型到 Parquet 資料類型的映射。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.data-types.html)

## PostgreSQL 資料類型對 Parquet 的映射
<a name="USER_ExportSnapshot.data-types.PostgreSQL"></a>

下表顯示轉換資料並匯出至 Amazon S3 時，PostgreSQL 資料類型到 Parquet 資料類型的映射。


| PostgreSQL 資料類型 | Parquet 基本類型 | 邏輯類型標註 | 映射備註 | 
| --- | --- | --- | --- | 
| 數值資料類型 | 
| BIGINT | INT64 |  |   | 
| BIGSERIAL | INT64 |  |   | 
| DECIMAL | BYTE\$1ARRAY | STRING | DECIMAL 類型會轉換成 BYTE\$1ARRAY 類型中的字串，並以 UTF8 編碼。此轉換是為了避免因非數字 (NaN) 而導致的資料精確度和資料值複雜性。 | 
| DOUBLE PRECISION | DOUBLE |  |   | 
| INTEGER | INT32 |  |   | 
| MONEY | BYTE\$1ARRAY | STRING |   | 
| REAL | FLOAT |  |   | 
| SERIAL | INT32 |  |   | 
| SMALLINT | INT32 | INT(16, true) |   | 
| SMALLSERIAL | INT32 | INT(16, true) |   | 
| 字串和相關資料類型 | 
| ARRAY | BYTE\$1ARRAY | STRING |  陣列會轉換成字串，並以 BINARY (UTF8) 編碼。 此轉換是為了避免因非數字 (NaN) 和時間資料值而導致的資料精確度複雜性。  | 
| BIT | BYTE\$1ARRAY | STRING |   | 
| BIT VARYING | BYTE\$1ARRAY | STRING |   | 
| BYTEA | BINARY |  |   | 
| CHAR | BYTE\$1ARRAY | STRING |   | 
| CHAR(N) | BYTE\$1ARRAY | STRING |   | 
| ENUM | BYTE\$1ARRAY | STRING |   | 
| NAME | BYTE\$1ARRAY | STRING |   | 
| TEXT | BYTE\$1ARRAY | STRING |   | 
| TEXT SEARCH | BYTE\$1ARRAY | STRING |   | 
| VARCHAR(N) | BYTE\$1ARRAY | STRING |   | 
| XML | BYTE\$1ARRAY | STRING |   | 
| 日期和時間資料類型 | 
| DATE | BYTE\$1ARRAY | STRING |   | 
| INTERVAL | BYTE\$1ARRAY | STRING |   | 
| TIME | BYTE\$1ARRAY | STRING |  | 
| TIME WITH TIME ZONE | BYTE\$1ARRAY | STRING |  | 
| TIMESTAMP | BYTE\$1ARRAY | STRING |  | 
| TIMESTAMP WITH TIME ZONE | BYTE\$1ARRAY | STRING |  | 
| 幾何資料類型 | 
| BOX | BYTE\$1ARRAY | STRING |   | 
| CIRCLE | BYTE\$1ARRAY | STRING |   | 
| LINE | BYTE\$1ARRAY | STRING |   | 
| LINESEGMENT | BYTE\$1ARRAY | STRING |   | 
| PATH | BYTE\$1ARRAY | STRING |   | 
| POINT | BYTE\$1ARRAY | STRING |   | 
| POLYGON | BYTE\$1ARRAY | STRING |   | 
| JSON 資料類型 | 
| JSON | BYTE\$1ARRAY | STRING |   | 
| JSONB | BYTE\$1ARRAY | STRING |   | 
| 其他資料類型 | 
| BOOLEAN | BOOLEAN |  |   | 
| CIDR | BYTE\$1ARRAY | STRING |  網路資料類型 | 
| COMPOSITE | BYTE\$1ARRAY | STRING |   | 
| DOMAIN | BYTE\$1ARRAY | STRING |   | 
| INET | BYTE\$1ARRAY | STRING |  網路資料類型 | 
| MACADDR | BYTE\$1ARRAY | STRING |   | 
| OBJECT IDENTIFIER | N/A |  |  | 
| PG\$1LSN | BYTE\$1ARRAY | STRING |   | 
| RANGE | BYTE\$1ARRAY | STRING |   | 
| UUID | BYTE\$1ARRAY | STRING |   | 