使用以下方式匯出和匯入 DynamoDB 資料 AWS Data Pipeline - Amazon DynamoDB

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

使用以下方式匯出和匯入 DynamoDB 資料 AWS Data Pipeline

您可以使用 AWS Data Pipeline 將資料從 DynamoDB 表格匯出到 Amazon S3 儲存貯體中的檔案。您也可以使用主控台,將 Amazon S3 中的資料匯入至相同 AWS 區域或不同區域中的 DynamoDB 資料表。

注意

DynamoDB 主控台現在原生支援從 Amazon S3 匯入和匯出。這些流程與 AWS Data Pipeline 匯入流程不相容。如需詳細資訊,請參閱從 Amazon S3 匯入從 Amazon S3 匯出和部落格文章將 Amazon DynamoDB 資料表的資料匯出至 Amazon S3 中的資料湖

在許多情況下,匯出和匯入資料的功能都十分有用。例如,假設您要維護一組基準資料,以進行測試。您可以將基準資料放入 DynamoDB 資料表,並將它匯出至 Amazon S3。然後,在您執行可修改測試資料的應用程式之後,將 Amazon S3 中的基準匯回 DynamoDB 資料表,即可「重設」資料集。另一個範例包含意外刪除資料,甚至意外 DeleteTable 操作。在這些情況下,您可以還原 Amazon S3 中先前匯出檔案中的資料。您甚至可以複製某個 AWS 區域內 DynamoDB 資料表中的資料,並將資料存放在 Amazon S3 中,然後將 Amazon S3 的資料匯入至第二個區域內的相同 DynamoDB 資料表中。第二個區域中的應用程式接著可以存取其最近 DynamoDB 端點,並使用其專屬資料複本,而且網路延遲較短。

重要

DynamoDB 備份與還原是一項全受管功能。您可以備份資料量從幾 MB 到數百 TB 不等的資料表,而且不會影響您生產應用程式的效能與可用性。只要按一下 AWS Management Console 或單一 API 呼叫,即可還原資料表。我們強烈建議您使用 DynamoDB 的原生備份和還原功能,而不要使用。 AWS Data Pipeline如需詳細資訊,請參閱 使用 DynamoDB 的隨需備份與還原

下圖顯示使用 AWS Data Pipeline匯出和匯入 DynamoDB 資料的概觀。

用於將動態資料匯出 AWS Data Pipeline 至 Amazon S3 並將其匯入回 DynamoDB 的程序。

若要匯出 DynamoDB 表格,您可以使用 AWS Data Pipeline 主控台建立新的管道。管道會啟動 Amazon EMR 叢集來執行實際匯出。Amazon EMR 會讀取 DynamoDB 的資料,並將資料寫入至 Amazon S3 儲存貯體中的匯出檔案。

此步驟與匯入類似,差異在於讀取 Amazon S3 儲存貯體中的資料,並將其寫入至 DynamoDB 資料表。

重要

匯出或匯入 DynamoDB 資料時,使用的基礎 AWS 服務會產生額外費用:

  • AWS Data Pipeline:管理匯入/匯出工作流程。

  • Amazon S3:包含您從 DynamoDB 匯出或匯入至 DynamoDB 的資料。

  • Amazon EMR:執行受管 Hadoop 叢集來執行 DynamoDB 與 Amazon S3 之間的讀取和寫入。叢集組態是一個 m3.xlarge 執行個體領導節點和一個 m3.xlarge 執行個體核心節點。

如需詳細資訊,請參閱 AWS Data Pipeline 定價Amazon EMR 定價Amazon S3 定價

匯出和匯入資料的必要條件

當您用 AWS Data Pipeline 於匯出和匯入資料時,您必須指定允許管線執行的動作,以及管線可以使用哪些資源。允許的動作和資源是使用 AWS Identity and Access Management (IAM) 角色定義的。

您也可以建立 IAM 政策,並將它們連接至使用者、角色或群組來控制存取。這些政策可讓您指定允許哪些使用者匯入和匯出 DynamoDB 資料。

重要

如果使用者想要與 AWS 之外的 AWS Management Console. 授與程式設計存 AWS取權的方式取決於正在存取的使用者類型。

若要授與使用者程式設計存取權,請選擇下列其中一個選項。

哪個使用者需要程式設計存取權? By

人力身分

(IAM Identity Center 中管理的使用者)

使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

請依照您要使用的介面所提供的指示操作。

IAM 使用臨時登入資料來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。 遵循《IAM 使用者指南》中的〈將臨時登入資料搭配 AWS 資源使用〉中的指
IAM

(不建議使用)

使用長期認證來簽署對 AWS CLI、 AWS SDK 或 AWS API 的程式設計要求。

請依照您要使用的介面所提供的指示操作。

建立 AWS Data Pipeline的 IAM 角色

若要使用 AWS Data Pipeline,您的 AWS 帳戶中必須有以下 IAM 角色:

  • DataPipelineDefaultRole— 您的管道可以代表您執行的動作。

  • DataPipelineDefaultResource角色 — 管道將代表您佈建的資 AWS 源。為了匯出和匯入 DynamoDB 資料,這些資源會包含 Amazon EMR 叢集以及與該叢集關聯的 Amazon EC2 執行個體。

如果您以 AWS Data Pipeline 前從未使用過,則需要自己創建DataPipelineDefaultRoleDataPipelineDefaultResource角色。建立這些角色後,您可以隨時使用它們來匯出或匯入 DynamoDB 資料。

注意

如果您之前曾使用 AWS Data Pipeline 主控台建立管線 DataPipelineDefaultRole,則當時已為您建立DataPipelineDefaultResource角色。不需要任何進一步動作;您可以跳過本節,並使用 DynamoDB 主控台開始建立管道。如需詳細資訊,請參閱 將資料從 DynamoDB 匯出至 Amazon S3從 Amazon S3 匯入資料至 DynamoDB

  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 從 IAM 主控台儀表板中,按一下 Roles (角色)。

  3. 按一下 Create Role (建立角色) 並執行下列作業:

    1. AWS Service (AWS 服務) 信任實體中,選擇 Data Pipeline (資料管道)。

    2. Select your use case (選取您的使用案例) 面板中,選擇 Data Pipeline (資料管道),然後選擇 Next:Permissions (下一步:許可)

    3. 請注意,會自動連接 AWSDataPipelineRole 政策。選擇 Next:Review (下一步:檢閱)

    4. Role name (角色名稱) 欄位中,輸入 DataPipelineDefaultRole 做為角色名稱,然後選擇 Create role (建立角色)

  4. 按一下 Create Role (建立角色) 並執行下列作業:

    1. AWS Service (AWS 服務) 信任實體中,選擇 Data Pipeline (資料管道)。

    2. Select your use case (選取您的使用案例) 面板中,選擇 EC2 Role for Data Pipeline (資料管道的 EC2 角色),然後選擇 Next:Permissions (下一步:許可)

    3. 請注意,會自動連接 AmazonEC2RoleForDataPipelineRole 政策。選擇 Next:Review (下一步:檢閱)

    4. Role name (角色名稱) 欄位中,輸入 DataPipelineDefaultResourceRole 做為角色名稱,然後選擇 Create role (建立角色)

即然您已建立這些角色,就可以使用 DynamoDB 主控台開始建立管道。如需詳細資訊,請參閱 將資料從 DynamoDB 匯出至 Amazon S3從 Amazon S3 匯入資料至 DynamoDB

授與使用者和群組執行匯出和匯入工作的權限 AWS Identity and Access Management

如果您想要允許其他使用者、角色或群組匯出和匯入您的 DynamoDB 資料表資料,則可以建立 IAM 政策,並將它連接至您指定的使用者或群組。政策只包含執行這些任務的必要許可。

授予完整存取權

下列程序說明如何將受 AWS 管政策AmazonDynamoDBFullAccessAWSDataPipeline_FullAccess和 Amazon EMR 內嵌政策附加到使用者。這些受管政策可提供 DynamoDB 資源的完整存取權,並與 Amazon EMR 內嵌政策搭配使用,可讓使用者執行本文件中所述的動作。 AWS Data Pipeline

注意

若要限制建議的許可範圍,上述的內嵌政策會強制使用標籤 dynamodbdatapipeline。如果您希望在不受限的情況下使用本文件,則可以移除建議政策的 Condition 部分。

  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 從 IAM 主控台儀表板中,按一下 Users (使用者),然後選取您要修改的使用者。

  3. Permissions (許可) 索引標籤中,按一下 Add Policy (新增政策)。

  4. Attach permissions (連接許可) 面板中,按一下 Attach existing policies directly (直接連接現有政策)。

  5. 同時選取 AmazonDynamoDBFullAccessAWSDataPipeline_FullAccess,然後按一下Next:Review (下一步:檢閱)。

  6. 按一下 Add Permission (新增許可)。

  7. 返回 Permissions (許可) 索引標籤,按一下 Add inline policy (新增內嵌政策)。

  8. Create a policy (建立政策) 頁面上,按一下 JSON 索引標籤。

  9. 貼上以下內容。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "EMR", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeStep", "elasticmapreduce:DescribeCluster", "elasticmapreduce:RunJobFlow", "elasticmapreduce:TerminateJobFlows" ], "Resource": "*", "Condition": { "Null": { "elasticmapreduce:RequestTag/dynamodbdatapipeline": "false" } } } ] }
  10. 按一下 Review policy (檢閱政策)。

  11. 在名稱欄位上輸入 EMRforDynamoDBDataPipeline

  12. 按一下 Create Policy (建立政策)。

注意

您可以使用類似的程序將此受管政策連接至角色或群組,而不是使用者。

限制特定 DynamoDB 資料表的存取

如果您想限制存取權限,讓使用者只能匯出或匯入您的資料表子集,則需要建立自訂的 IAM 政策文件。您可以如 授予完整存取權 所述,使用此程序作為自訂政策的起點,然後修改政策,讓使用者只能使用您指定的資料表。

例如,假設您想要允許使用者只匯出和匯入 ForumThreadReply 資料表。此程序說明如何建立自訂政策,讓使用者可以使用這些資料表,而不是其他資料表。

  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 從 IAM 主控台儀表板中,按一下 Policies (政策),然後按一下 Create Policy(建立政策)

  3. 在「建立策略」面板中,移至「複製 AWS 受管理策略」,然後按一下「選取」。

  4. 在「複製 AWS 受管理策略」面板中,移至AmazonDynamoDBFullAccess並按一下「選取」。

  5. Review Policy (檢閱政策) 面板中,執行下列操作:

    1. 檢閱自動產生的 Policy Name (政策名稱)Description (描述)。需要時,您可以修改這些值。

    2. Policy Document (政策文件) 文字方塊中,編輯政策來限制對特定資料表的存取。政策預設會允許對所有資料表執行的所有 DynamoDB 動作:

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "dynamodb:*", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "sns:Unsubscribe" ], "Effect": "Allow", "Resource": "*", "Sid": "DDBConsole" }, ...remainder of document omitted...

      若要限制政策,請先移除下行:

      "dynamodb:*",

      接下來,建構新的 Action,允許只存取 ForumThreadReply 資料表:

      { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Forum", "arn:aws:dynamodb:us-west-2:123456789012:table/Thread", "arn:aws:dynamodb:us-west-2:123456789012:table/Reply" ] },
      注意

      us-west-2 取代為 DynamoDB 資料表所在的區域。請123456789012以您的 AWS 帳號取代。

      最後,將新的 Action 新增至政策文件:

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Forum", "arn:aws:dynamodb:us-west-2:123456789012:table/Thread", "arn:aws:dynamodb:us-west-2:123456789012:table/Reply" ] }, { "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "sns:CreateTopic", "sns:DeleteTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "sns:Unsubscribe" ], "Effect": "Allow", "Resource": "*", "Sid": "DDBConsole" }, ...remainder of document omitted...
  6. 滿意政策設定時,請按一下 Create Policy (建立政策)

建立政策之後,即可將它連接至使用者。

  1. 從 IAM 主控台儀表板中,按一下 Users (使用者),然後選取您要修改的使用者。

  2. Permissions (許可) 標籤中,按一下 Attach Policy (連接政策)

  3. Attach Policy (連接政策) 面板中,選取您政策的名稱,然後按一下 Attach Policy (連接政策)

注意

您可以使用類似的程序將您的政策連接至角色或群組,而不是使用者。

將資料從 DynamoDB 匯出至 Amazon S3

本節說明如何將一或多個 DynamoDB 資料表中的資料匯出至 Amazon S3 儲存貯體。您需要先建立 Amazon S3 儲存貯體,才能執行匯出。

重要

如果您以 AWS Data Pipeline 前從未使用過,則必須先設定兩個 IAM 角色,然後再執行此程序。如需詳細資訊,請參閱 建立 AWS Data Pipeline的 IAM 角色

  1. 請登入 AWS Management Console 並開啟 AWS Data Pipeline 主控台,網址為 https://console.aws.amazon.com/datapipeline/

  2. 如果目前 AWS 區域中尚未有任何管線,請選擇「立即開始」。

    否則,如果您已經至少有一或多個管道,則請選擇 Create new pipeline (建立新管道)

  3. Create Pipeline (建立管道) 頁面上,執行下列操作:

    1. Name (名稱) 欄位中,輸入管道的名稱。例如:MyDynamoDBExportPipeline

    2. 針對 Source (來源) 參數,選取 Build using a template (使用範本建置)。從下拉式範本清單中,選擇 Export DynamoDB table to S3 (將 DynamoDB 資料表匯出至 S3)

    3. Source DynamoDB table name (來源 DynamoDB 資料表名稱) 欄位中,輸入您要匯出的 DynamoDB 資料表名稱。

    4. Output S3 Folder (輸出 S3 資料夾) 文字方塊中,輸入將寫入匯出檔案的 Amazon S3 URI。例如: s3://mybucket/exports

      此 URI 的格式是 s3://bucketname/folder,其中:

      • bucketname 是您的 Amazon S3 儲存貯體的名稱。

      • folder 是該儲存貯體內資料夾的名稱。如果資料夾不存在,則會自動建立資料夾。如果您未指定資料夾的名稱,則會指派其名稱,格式為 s3://bucketname/region/tablename

    5. S3 location for logs (日誌的 S3 位置) 文字方塊中,輸入將寫入匯出日誌檔案的 Amazon S3 URI。例如: s3://mybucket/logs/

      S3 Log Folder (S3 日誌資料夾) 的 URI 格式與 Output S3 Folder (輸出 S3 資料夾) 相同。URI 必須解析為資料夾;日誌檔案無法寫入至 S3 儲存貯體頂層。

  4. 新增金鑰為 dynamodbdatapipeline 和數值為 true 的標籤。

  5. 當您滿意設定後,請按一下 Activate (啟用)

現在將會建立您的管道;此程序需要幾分鐘的時間才能完成。您可以在 AWS Data Pipeline 控制台中監視進度。

匯出完成時,您可以前往 Amazon S3 主控台來檢視匯出檔案。輸出檔案名稱為不含附檔名的識別碼值,例如此範例:ae10f955-fb2f-4790-9b11-fbfea01a871e_000000。此檔案的內部格式在AWS Data Pipeline 開發人員指南中的檔案結構中有說明。

從 Amazon S3 匯入資料至 DynamoDB

本節假設您已經從 DynamoDB 資料表中匯出資料,而且已將匯出檔案寫入至 Amazon S3 儲存貯體。此檔案的內部格式在AWS Data Pipeline 開發人員指南中的檔案結構中有說明。請注意,這是 DynamoDB 一可以使用匯入的檔案格式。 AWS Data Pipeline

我們將使用來源資料表這個術語表示從中匯出資料的原始資料表,而目標資料表表示將收到已匯入資料的資料表。您可以在 Amazon S3 中匯入匯出檔案中的資料,但前提是符合下列所有項目:

  • 目標資料表已存在 (匯入程序將不會建立資料表)。

  • 目標資料表與來源資料表的索引鍵結構描述相同。

目標資料表不需要是空的。不過,匯入程序會取代資料表中索引鍵與匯出檔案中項目相同的任何資料項目。例如,假設您有一個包含索引鍵的 Custo mer 資料表 CustomerId,而且表格中只有三個項目 (CustomerId1、2 和 3)。如果您的匯出檔案也包含 CustomerID 1、2 和 3 的資料項目,則會將目標資料表中的項目取代為匯出檔案中的項目。如果匯出檔案也包含 CustomerId4 的資料項目,則該項目會新增至表格中。

目的地資料表可以位於不同的 AWS 區域。例如,假設您有一個 Customer (客戶) 資料表在美國西部 (奧勒岡) 區域,並要匯出其資料至 Amazon S3。您可以在之後將該資料匯入歐洲 (愛爾蘭) 區域中的相同 Customer (客戶) 資料表。這稱為跨區域匯出和匯入。如需 AWS 區域的清單,請前往AWS 一般參考中的區域與端點

請注意, AWS Management Console 可讓您一次匯出多個來源表格。不過,您一次只能匯入一個資料表。

  1. 請登入 AWS Management Console 並開啟 AWS Data Pipeline 主控台,網址為 https://console.aws.amazon.com/datapipeline/

  2. (選用) 如果您想要執行跨區域匯入,請前往視窗右上角,然後選擇目標區域。

  3. 選擇建立新的管道

  4. Create Pipeline (建立管道) 頁面上,執行下列操作:

    1. Name (名稱) 欄位中,輸入管道的名稱。例如:MyDynamoDBImportPipeline

    2. 針對 Source (來源) 參數,選取 Build using a template (使用範本建置)。從下拉式範本清單中,選擇 Import DynamoDB backup data from S3 (從 S3 匯入 DynamoDB 備份資料)

    3. Input S3 Folder (輸入 S3 資料夾) 文字方塊中,輸入可找到匯出檔案的 Amazon S3 URI。例如:s3://mybucket/exports

      此 URI 的格式是 s3://bucketname/folder,其中:

      • bucketname 是您的 Amazon S3 儲存貯體的名稱。

      • folder 是包含匯出檔案的資料夾名稱。

      匯入任務預期會在指定的 Amazon S3 位置找到檔案。如需了解檔案的內部格式,請參閱《AWS Data Pipeline 開發人員指南》中的驗證資料匯出檔案

    4. Target DynamoDB table name (目標 DynamoDB 資料表名稱) 欄位中,輸入您要將資料匯入其中的 DynamoDB 資料表名稱。

    5. S3 location for logs (日誌的 S3 位置) 文字方塊中,輸入將寫入匯入日誌檔案的 Amazon S3 URI。例如:s3://mybucket/logs/

      S3 Log Folder (S3 日誌資料夾) 的 URI 格式與 Output S3 Folder (輸出 S3 資料夾) 相同。URI 必須解析為資料夾;日誌檔案無法寫入至 S3 儲存貯體頂層。

    6. 新增金鑰為 dynamodbdatapipeline 和數值為 true 的標籤。

  5. 當您滿意設定後,請按一下 Activate (啟用)

現在將會建立您的管道;此程序需要幾分鐘的時間才能完成。匯入任務會在建立管道之後立即開始。

故障診斷

本節會介紹一些基本失敗模式,以及 DynamoDB 匯出的疑難排解資訊。

如果在匯出或匯入期間發生錯誤,則 AWS Data Pipeline 主控台中的管道狀態將會顯示為 ERROR。如果發生這種情況,請按一下故障管道的名稱,以前往其詳細資訊頁面。這將會顯示管道中所有步驟的詳細資訊,以及每個步驟的狀態。具體而言,請檢查您看到的任何執行堆疊追蹤。

最後,前往 Amazon S3 儲存貯體,並尋找任何已在該處寫入的匯出或匯入日誌檔。

下列是可能導致管道故障的一些常見問題,以及修正動作。若要診斷管道,請比較您在下面問題所看到的錯誤。

  • 針對匯入,確保目標資料表已存在,而且目標資料表與來源資料表的索引鍵結構描述相同。必須符合這些條件,否則匯入會失敗。

  • 確保管道具有標籤 dynamodbdatapipeline,否則 Amazon EMR API 呼叫不會成功。

  • 確定已建立您指定的 Amazon S3 儲存貯體,而且您已有它的讀取和寫入許可。

  • 管道可能已超過其執行逾時 (當您建立管道時,請設定此參數)。例如,您可能已設定 1 小時的執行逾時,但匯出任務所需的時間可能不僅於止。嘗試刪除後重新建立管道,但這次需要較長的執行逾時間隔。

  • 如果您從 Amazon S3 儲存貯體還原,而此儲存貯體不是用來執行匯出的原始儲存貯體 (包含匯出複本),則請更新資訊清單檔案。

  • 您可能沒有執行匯出或匯入的正確許可。如需詳細資訊,請參閱 匯出和匯入資料的必要條件

  • 您可能已達到 AWS 帳戶中的資源配額,例如 Amazon EC2 執行個體的最大數量或 AWS Data Pipeline 管道數量上限。如需詳細資訊,包括如何請求提高這些配額,請參閱 AWS 一般參考 中的AWS Service Quotas

注意

如需管道疑難排解的詳細資訊,請前往《AWS Data Pipeline 開發人員指南》中的疑難排解

預先定義的 DynamoDB AWS Data Pipeline 和

如果您想更深入地了解工 AWS Data Pipeline 作原理,我們建議您查閱AWS Data Pipeline 開發人員指南。本指南包含建立和使用配管的自 step-by-step學課程;您可以使用這些自學課程做為建立自己配管的起點。建議您閱讀 AWS Data Pipeline 教學,而本教學會逐步解說建立可針對您需求所自訂之匯入和匯出管道所需的步驟。請參閱《AWS Data Pipeline 開發人員指南》中的教學課程:使用 AWS Data Pipeline執行 Amazon DynamoDB 匯入和匯出

AWS Data Pipeline 提供數個用於建立管道的範本;下列範本與 DynamoDB 相關。

在 DynamoDB 和 Amazon S3 之間匯出資料

注意

DynamoDB 主控台現在支援自己的匯出到 Amazon S3 流程,但與 AWS Data Pipeline 匯入流程不相容。如需詳細資訊,請參閱 DynamoDB 資料匯出至 Amazon S3:運作方式 和部落格文章《在不撰寫程式碼的情況下將 Amazon DynamoDB 資料表的資料匯出至 Amazon S3 中的資料湖》

主 AWS Data Pipeline 控台提供兩個預先定義的範本,用於在 DynamoDB 和 Amazon S3 之間匯出資料。如需這些範本的詳細資訊,請參閱《AWS Data Pipeline 開發人員指南》的以下章節: