如何將我的 Amazon DynamoDB 資料表從一個 AWS 帳戶遷移到另一個 AWS 帳戶?

3 分的閱讀內容
0

我想執行跨帳戶 Amazon DynamoDB 資料表遷移。

簡短描述

使用以下其中一種適合您使用案例的方法將 DynamoDB 資料表遷移到不同的 AWS 帳戶:

  • AWS Backup
  • DynamoDB 匯入和匯出至 Amazon Simple Storage Service (Amazon S3)
  • Amazon S3 和 AWS Glue
  • Amazon EMR

解決方法

AWS Backup

您可以使用 AWS Backup 來建立跨帳戶 DynamoDB 備份。如需詳細資訊,請參閱跨 AWS 帳戶建立備份副本AWS Backup 示範: 跨帳戶和跨區域備份

在目標帳戶中,執行下列操作:

  1. 在 DynamoDB 所在區域的目標帳戶中建立 AWS Backup 保存庫。
  2. 建立保存庫時,使用您已設定的 AWS Key Management Service (KMS) 金鑰。這是您已與同一組織中的來源帳戶共用的金鑰。
  3. 建立保存庫之後,將 AWS Identity and Access Management (IAM) 政策新增至保存庫。您可以選取選項允許從組織存取備份保存庫來執行此操作。這允許同一組織內的其他帳戶複製到保存庫中。

在來源帳戶中,執行下列操作:

  1. 在 DynamoDB 所在的來源帳戶中,在需要遷移資料表資料的區域中建立 AWS Backup 保存庫。
  2. 建立保存庫時,使用您已設定的 AWS KMS 金鑰。這是您與組織中其他帳戶共用的金鑰。
  3. 將 IAM 政策新增至保存庫,允許組織中的其他帳戶複製到保存庫。您可以選取選項允許從組織存取備份保存庫來執行此操作。
  4. 建立備份計畫,以產生來源帳戶中 DynamoDB 資料表到目標帳戶的備份。
  5. 對於備份保存庫,請確保選擇您在來源帳戶中建立的保存庫。
  6. 然後,選取複製到另一個帳戶的保存庫選項。
  7. 對於「指派資源」,請確保包含必須備份的資源。您可以選擇包含特定資源類型
  8. 對於選取特定資源類型,選取 DynamoDB。您可以選擇所有資料表,或僅選擇必須備份的資料表。

在目標帳戶中,執行下列操作:

  1. 在目標帳戶中,導覽至您建立的保存庫。
    您可以看到復原點與來源帳戶中相同。
  2. 您可以在目標帳戶中還原 DynamoDB 資料表

**注意:**對於此方法,來源帳戶和目標帳戶必須位於同一組織中。

DynamoDB 匯入和匯出至 Amazon S3

  1. 將資料表匯出至目標帳戶中的 Amazon S3 儲存貯體,以遷移 DynamoDB 資料表資料。確定 DynamoDB 對此 S3 儲存貯體具有 s3:ListBucket 許可。確定 S3 儲存貯體沒有任何拒絕存取匯出資料的存取控制清單。
  2. 匯出完成後,將資料從 S3 儲存貯體匯入目標帳戶中的新資料表。如需詳細資訊,請參閱從 Amazon S3 的 DynamoDB 資料匯入:如何運作

**注意:**匯出資料表不會消耗資料表上的任何讀取容量,對資料表效能或可用性也沒有影響。此外,匯入資料表不會消耗任何寫入器容量。因此,您在匯入過程中不需要額外的容量。

Amazon S3 和 AWS Glue

您可以使用 S3 儲存貯體和 AWS Glue 任務將 DynamoDB 資料表遷移至不同的 AWS 帳戶。

1.    您可以將資料表匯出至其他帳戶中的 Amazon S3 儲存貯體,以執行 DynamoDB 資料表的初始遷移。

將資料表從帳戶 A 匯出至帳戶 B 中的 S3 儲存貯體時,物件仍由帳戶 A 所擁有。帳戶 B 中的 AWS Identify Access Management (IAM) 使用者預設無法存取這些物件。匯出功能不會使用存取控制清單 (ACL) 儲存貯體擁有者完整控制來寫入資料。作為此物件擁有權問題的因應措施,在匯出完成後,在所有匯出的物件上加入 PutObjectAcl 許可。此因應措施授予帳戶 B 中儲存貯體擁有者存取所有匯出物件的存取權限。如需詳細資訊,請參閱為什麼我無法存取由另一個 AWS 帳戶上傳至 Amazon S3 儲存貯體的物件?

2.    使用 Glue 任務從 S3 儲存貯體讀取檔案,並將其寫入目標 DynamoDB 資料表。

如步驟 1 所述將資料匯出至目標帳戶中的 S3 儲存貯體後,在目標帳戶中執行下列操作:

在 Amazon S3 中的資料上執行 AWS Glue 編目程式。編目程式會推斷架構,並使用該架構定義建立 AWS Glue Data Catalog 資料表。

使用 AWS Glue Studio 建立 ETL 任務。指定來源、轉換和目標之後,AWS Glue Studio 會根據這些輸入自動產生 PySpark 程式碼。對於此任務,請將 AWS Glue Data Catalog 資料表指定為來源,將 ApplyMApplyMapping 指定為轉換。不要指定目標。AWS Glue Studio 會產生 PySpark 程式碼,以從 S3 建立 DynamicFrame。

請確定 AWS Glue Studio 所產生的程式碼的金鑰名稱和資料類型對映是正確的。如果對映不正確,請修改程式碼,並更正對映。由於您在建立 AWS Glue 任務時沒有指定目標,因此新增類似於本範例中的接收操作。新增此操作可讓任務直接寫入目標 DynamoDB 資料表:

glueContext.write_dynamic_frame_from_options ( frame = Mapped, connection_type = "dynamodb", connection_options = { "dynamodb.region": "", "dynamodb.output.tableName": "", "dynamodb.throughput.write.percent": "1.0" } )

若要將資料載入至目標資料表,請從 AWS Glue Studio 或 AWS Glue 主控台上的「任務」頁面執行任務。

3.    將資料表匯出至 S3 儲存貯體後,使用 DynamoDB Streams 和 AWS Lambda 將資料插入和更新從來源表遷移到另一個帳戶中的目的地資料表。如需詳細資訊,請參閱使用 Amazon DynamoDB 的跨帳戶複寫

AWS Glue

AWS Glue ETL 任務支援在不同帳戶的 DynamoDB 資料表之間讀取和寫入資料。使用 dynamodb.sts.roleArn 參數在任務指令碼中擔任跨帳戶角色。擔任此角色可讓您取得必須用於跨帳戶存取 DynamoDB 的暫時憑證。如需詳細資訊,請參閱 DynamoDB 資料表的跨帳戶跨區域存取以及如何使用 AWS Step Functions 和 AWS Glue 將 Amazon DynamoDB 資料表匯出至 Amazon S3

Amazon EMR

使用 Amazon EMR 遷移 DynamoDB 資料表時,根據您的使用案例使用下列其中一個選項:

  • 如果您能夠承受遷移期間的停機,請停止寫入來源資料表的操作。這是為了確保目標資料表與來源資料表同步。
  • 如果您無法承受停機,必須將遷移期間發生的所有事務儲存在暫存資料表中。將原始資料表遷移至其他 AWS 帳戶後,將新事務從暫存資料表推送到目標資料表。

**注意:**使用 Amazon EMR 遷移資料表所需的時間可能會顯著不同。差異取決於 DynamoDB 資料表的佈建輸送量網路效能,以及儲存在資料表中的資料量。

若要使用 Amazon EMR 遷移 DynamoDB 資料表,請執行下列動作:

  1. 在來源和目的地帳戶中啟動 EMR 叢集。在軟體組態區段中,確保選擇包含 Apache Hive 的選項。注意: 將 Amazon EMR 叢集啟動至私有子網路是安全最佳實務。私有子網路必須具有 Amazon S3 VPC 端點,以及至 DynamoDB 的路由。如需詳細資訊,請參閱私有子網路。如果叢集必須存取網際網路,請使用位於公有子網路中的 NAT 閘道。如需詳細資訊,請參閱具有公有和私有子網路 (NAT) 的 VPC
  2. 請確保兩個帳戶中的 EMR_EC2_DefaultRole IAM 角色都具有寫入目的地帳戶中 S3 儲存貯體的許可。如需詳細資訊,請參閱為 AWS 服務和資源的 Amazon EMR 許可設定 IAM 服務角色
  3. 在來源帳戶中,使用 SSH 連接至主節點。
  4. 在來源帳戶中,使用 Hive 命令匯出 DynamoDB 資料表資料至目的地帳戶中的 S3 儲儲存貯體。
  5. 在目的地帳戶中,將 Amazon S3 資料匯入新的 DynamoDB 資料表
  6. 如果您使用暫存資料表擷取遷移期間發生的寫入,請在暫存資料表上重複步驟 4 和 5。

相關資訊

在 DynamoDB 與 Amazon S3 之間複製資料

AWS 官方
AWS 官方已更新 9 個月前