將資料庫快照資料匯出至 Amazon RDS 的 Amazon S3 - Amazon Relational Database Service

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

將資料庫快照資料匯出至 Amazon RDS 的 Amazon S3

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

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

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

匯出資料後,您可以直接透過 Amazon Athena 或 Amazon Redshift Spectrum 等工具分析匯出後的資料。有關使用 Athena 來讀取 Parquet 資料的詳細資訊,請參閱Amazon Athena 使用者指南中的 Parquet SerDe。如需有關使用 Redshift Spectrum 來讀取 Parquet 資料的詳細資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的從單欄式資料格式的 COPY

警告

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

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

匯出快照資料概觀

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

  1. 識別要匯出的快照

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

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

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

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

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

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

    KMS 金鑰政策必須同時包含 kms:CreateGrantkms:DescribeKey 許可。如需在 Amazon RDS 中使用 KMS 金鑰的詳細資訊,請參閱 AWS KMS key 管理

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

    您可以在 AWS 帳戶中使用 KMS 金鑰,也可以使用跨帳戶 KMS 金鑰。如需詳細資訊,請參閱使用跨帳戶 AWS KMS key 加密 Amazon S3 匯出

  4. 使用主控台或 start-export-task CLI 命令將快照匯出至 Amazon S3。如需詳細資訊,請參閱將資料庫快照匯出至 Amazon S3 儲存貯體

  5. 若要存取 Amazon S3 儲存貯體中您匯出的資料,請參閱《Amazon Simple Storage Service 使用者指南》中的上傳、下載及管理物件

設定對 Amazon S3 儲存貯體的存取權

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

識別要匯出的 Amazon S3 儲存貯體

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

注意

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

如需使用 Amazon S3 儲存貯體的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的下列內容:

使用 IAM 角色提供對 Amazon S3 儲存貯體的存取權

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

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

如需有關其他 Amazon S3 存取管理工具的資訊,請參閱《Amazon S3 使用者指南》中的 Amazon S3 中的存取控制Amazon S3

重要

如果您打算使用 AWS Management Console 匯出快照,您可以選擇在匯出快照時自動建立 IAM 政策和角色。如需說明,請參閱 將資料庫快照匯出至 Amazon S3 儲存貯體

給予資料庫快照任務對 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 資料庫存取。另請參閱《IAM 使用者指南》中的教學:建立和連接您的第一個客戶受管原則

    下列 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/*" ] } ] }'
  2. 建立 IAM 角色,讓 Amazon RDS 可以代表您擔任此 IAM 角色,以存取您的 Amazon S3 儲存貯體。如需詳細資訊,請參閱《IAM 使用者指南》中的建立角色以將許可委派給 IAM 使用者

    下列範例顯示使用 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" } ] }'
  3. 將您建立的 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 儲存貯體

您可以在 AWS 帳戶間使用 Amazon S3 儲存貯體。若要使用跨帳戶儲存貯體,請新增儲存貯體政策,以將存取權授予您用於 S3 匯出的 IAM 角色。如需詳細資訊,請參閱範例 2:儲存貯體擁有者授予跨帳戶儲存貯體許可

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

{ "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 匯出

您可以使用跨帳戶 AWS KMS key 來加密 Amazon S3 匯出。首先,將金鑰政策新增至本機帳戶,然後在外部帳戶中新增 IAM 政策。如需詳細資訊,請參閱允許其他帳戶中的使用者使用 KMS 金鑰

使用跨帳戶 KMS 金鑰
  1. 將金鑰政策新增至本機帳戶。

    下列範例將本機帳戶 123456789012 中的許可給予外部帳戶 444455556666 中的 ExampleRoleExampleUser

    { "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": "*" }
  2. 將 IAM 政策新增至外部帳戶。

    以下 IAM 政策範例允許委託人使用帳戶 123456789012 中的 KMS 金鑰來進行密碼編譯操作。若要提供此許可給帳戶 444455556666 中的 ExampleRoleExampleUser,請在該帳戶中附加政策給他們。

    { "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 儲存貯體

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

注意

匯出 RDS 快照可能需要一段時間,依您的資料庫類型和大小而定。匯出任務會先還原和擴展整個資料庫,然後再將資料擷取到 Amazon S3。此階段期間的工作進度會顯示為STARTING (開始)。當任務切換到將資料匯出到 S3 時,進度會顯示為 In progress (進行中)

匯出完成所需的時間取決於儲存在資料庫中的資料。例如,如果資料表有分散均勻的數值主索引鍵或索引資料欄,則匯出速度最快。如果資料表不含適合分割的資料欄,或是資料表只在字串型資料欄上有一個索引,則會花更多時間。因為匯出使用較慢的單一執行緒處理序,所以將會耗費更長的時間。

您可以使用 AWS Management Console、 AWS CLI或 RDS API,將資料庫快照匯出至 Amazon S3。若要將資料庫快照匯出至跨帳戶 Amazon S3 儲存貯體,請使用 AWS CLI 或 RDS API。

如果您使用 Lambda 函式匯出快照集,請將 kms:DescribeKey 動作新增至 Lambda 函式政策。如需詳細資訊,請參閱 AWS Lambda 許可

Export to Amazon S3 (匯出至 Amazon S3) 主控台選項僅會針對可匯出至 Amazon S3 的快照顯示。由於下列原因,快照可能無法匯出:

  • S3 匯出不支援此資料庫引擎。

  • S3 匯出不支援資料庫引擎版本。

  • 建立快照 AWS 的區域不支援 S3 匯出。

匯出資料庫快照
  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/rds/:// 開啟 Amazon RDS 主控台。

  2. 在導覽窗格中,選擇 Snapshots (快照)

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

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

  5. 針對 Actions (動作),選擇 Export to Amazon S3 (匯出至 Amazon S3)。

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

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

  7. 選擇匯出的資料:

    • 選擇 All (全部) 來匯出快照中的所有資料。

    • 選擇 Partial (部分) 來匯出快照的特定部分。若要識別要匯出的快照部分,請針對 Identifier (識別符) 輸入一或多個資料庫、結構描述或表格,並以空格分隔。

      使用下列格式:

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

      例如:

      mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
  8. 針對 S3 bucket (S3 儲存貯體),選擇要匯出的儲存貯體。

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

  9. 針對 IAM role (IAM 角色),您可選擇授予對您所選擇 S3 儲存貯體寫入存取權限的角色,或建立新角色。

    • 如果您透過遵循 使用 IAM 角色提供對 Amazon S3 儲存貯體的存取權 中的步驟建立了角色,請選擇該角色。

    • 如果您沒有建立授予您所選擇 S3 儲存貯體寫入存取權限的角色,請選擇 Create a new role (建立新角色) 以自動建立角色。接下來,為 IAM 角色名稱 (IAM role name) 中的角色輸入名稱。

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

  11. 選擇 Export to Amazon S3 (匯出至 Amazon S3)

若要使用 將資料庫快照匯出至 Amazon S3 AWS CLI,請使用 start-export-task 命令搭配下列必要選項:

  • --export-task-identifier

  • --source-arn

  • --s3-bucket-name

  • --iam-role-arn

  • --kms-key-id

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

對於 Linux、 macOS或 Unix:

aws rds start-export-task \ --export-task-identifier my-snapshot-export \ --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \ --s3-bucket-name amzn-s3-demo-bucket \ --iam-role-arn iam-role \ --kms-key-id my-key

在 Windows 中:

aws rds start-export-task ^ --export-task-identifier my-snapshot-export ^ --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name ^ --s3-bucket-name amzn-s3-demo-bucket ^ --iam-role-arn iam-role ^ --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 命令中包含 --s3-prefix 選項。

如要使用 Amazon RDS API 將資料庫快照匯出至 Amazon S3,請搭配下列必要參數使用 StartExportTask 操作:

  • ExportTaskIdentifier

  • SourceArn

  • S3BucketName

  • IamRoleArn

  • KmsKeyId

區域和版本可用性

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需具備將快照匯出至 S3 功能的版本和區域可用性的詳細資訊,請參閱 支援區域和資料庫引擎,用於將快照匯出至 Amazon RDS 中的 S3

限制

將資料庫快照資料匯出至 Amazon S3 時有下列限制:

  • 您無法同時針對相同的資料庫快照執行多個匯出任務。這同時適用於完整和部分匯出。

  • 不支援從使用磁性儲存的資料庫匯出快照。

  • 匯出至 S3 不支援包含冒號 (:) 的 S3 字首。

  • 在匯出過程中,S3 檔案路徑中的以下字元將轉換為底線 (_):

    \ ` " (space)
  • 如果資料庫、結構描述或資料表的名稱中包含下列字元以外的字元,則不支援部分匯出。但是,您可以匯出整個資料庫快照。

    • 拉丁字母 (A–Z)

    • 數字 (0–9)

    • 美元符號 ($)

    • 底線 (_)

  • 資料庫資料表資料欄名稱不支援空格 ( ) 和某些字元。資料行名稱中具備下列字元的資料表會在匯出時跳過:

    , ; { } ( ) \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 完成匯出任務後,您可能需要等待一小段時間,才能從相同的資料庫快照開始另一個匯出任務。