使用 AWS Glue 和 Athena 更新目標資料表中的資料 - AWS Step Functions

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

使用 AWS Glue 和 Athena 更新目標資料表中的資料

此範例專案示範如何使用 AWS Glue Catalog 查詢目標資料表以取得目前資料,然後使用 Amazon Athena 使用其他來源的新資料更新資料。

在此專案中,Step Functions 狀態機器會呼叫目 AWS Glue 錄,以驗證 Amazon S3 儲存貯體中是否存在目標資料表。如果沒有找到表,它將創建一個新表。然後,Step Functions執行 Athena 查詢,將資料列從不同的資料來源新增至目標資料表:先查詢目標資料表以取得最新的日期,然後查詢來源資料表中的最新資料,然後將其插入目標資料表。

步驟 1:建立狀態機器並佈建資源

  1. 開啟 Step Functions 主控台,然後選擇建立狀態機器

  2. Keep data up to date在搜尋方塊中輸入,然後從傳回的搜尋結果中選擇 [讓資料保持為最新狀態]。

  3. 選擇 Next (下一步) 繼續。

  4. Step Functions 會列出您選取的範例專案中 AWS 服務 使用的項目。它也會顯示範例專案的工作流程圖表。將此項目部署到您的項目中, AWS 帳戶 或將其用作構建自己的項目的起點。根據您想要的進行方式,選擇 [執行示範] 或 [在其上建置]。

    此範例專案會部署下列資源:

    • Amazon S3 儲存貯體

    • Amazon Athena查詢

    • 一個AWS Glue Data Catalog電話

    • AWS Step Functions 狀態機器

    • 相關 AWS Identity and Access Management (IAM) 角色

    下圖顯示了「保持資料為最新」範例專案的工作流程圖形:

    保持資料為最新範例專案的工作流程圖表。
  5. 選擇「使用範本」繼續進行選取。

  6. 執行以下任意一項:

    • 如果您選取「在其上建立」,Step Functions 會建立工作流程原型,但會在工作流程定義中部署資源,因此您可以繼續建置工作流程原型。

      在工作流 Studio 中設計模式,您可以將其他狀態納入您的工作流程原型。或者,您可以切換程式碼模式至使用整合的程式碼編輯器,從 Step Functions 主控台編輯狀態機器的 Amazon States Language (ASL) 定義。

      重要

      您可能需要更新範例專案中使用之資源的預留位置 Amazon 資源名稱 (ARN),才能執行工作流程

    • 如果您選取 [執行示範],Step Functions 會建立唯讀專案,該專案會使用 AWS CloudFormation 範本將該範本中的 AWS 資源部署到您的 AWS 帳戶. 您可以選擇「程式碼」模式來檢視狀態機定義。

      選擇部署並執行以部署專案並建立資源。

      請注意,建立資源和IAM權限最多可能需要 10 分鐘的時間。部署資源時,您可以開啟 AWS CloudFormation Stack ID 連結以查看正在佈建的資源。

      建立完所有資源之後,您應該會在主控台的 [狀態機器] 頁面上看到專案。

      重要

      CloudFormation 範本中使用的每項服務可能會收取標準費用。

步驟 2:運行狀態機

  1. 在 [狀態電腦] 頁面上,選擇您的範例專案。

  2. 在範例專案頁面上,選擇 [開始執行]。

  3. 在 [開始執行] 對話方塊中,執行下列動作:

    1. (選擇性) 若要識別您的執行項目,您可以指定名稱,或使用預設產生的執行名稱。

      注意

      Step Functions 接受包含非ASCII字元的狀態機器、執行項目、活動和標籤的名稱。由於ASCII包含非ASCII字元的名稱不適用於 Amazon CloudWatch,因此我們建議您僅使用字元,以便您可以追蹤中的指標。 CloudWatch

    2. (選擇性) 在「入」方塊中,以JSON格式輸入輸入值以執行工作流程。

      如果您選擇執行示範,則不需要提供任何執行輸入。

      注意

      如果您部署的示範專案包含預先填入的執行輸入資料,請使用該輸入來執行狀態機器。

    3. 選擇 Start execution (開始執行)

    4. Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。

      若要複查執行結果,請在「圖形」檢視中選擇個別狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需有關可在「執行詳細資訊」頁面檢視之執行資訊的詳細資訊,請參閱執行詳細資訊頁面 — 介面概觀

範例狀態機器程式碼

此範例專案中的狀態機器會直接將參數傳遞至這些資源 AWS Glue,與 Amazon S3 和 Amazon Athena 整合。

瀏覽此範例狀態機器, AWS Glue瞭解 Step Functions 如何透過連線至現Resource場的 Amazon 資源名稱 (ARN) 並傳遞Parameters至服務來控制 Amazon S3 和 Amazon Athena API。

如需如何 AWS Step Functions 控制其他 AWS 服務的詳細資訊,請參閱將其他服務與 Step Functions 整合

{ "Comment": "An example demonstrates how to use Athena to query a target table to get current data, then update it with new data from other sources.", "StartAt": "Get Target Table", "States": { "Get Target Table": { "Type": "Task", "Parameters": { "DatabaseName": "<GLUE_DATABASE_NAME>", "Name": "target" }, "Catch": [ { "ErrorEquals": [ "Glue.EntityNotFoundException" ], "Next": "Create Target Table" } ], "Resource": "arn:aws:states:::aws-sdk:glue:getTable", "Next": "Update Target Table" }, "Create Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "Next": "Update Target Table" }, "Update Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "End": true } } }

IAM例子

範例專案所產生的範例 AWS Identity and Access Management (IAM) 原則包含執行狀態機器及相關資源所需的最低權限。我們建議您僅在IAM原則中加入必要的權限。

AthenaStartQueryExecution

"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:startQueryExecution", "athena:stopQueryExecution", "athena:getQueryExecution", "athena:getDataCatalog" ], "Resource": [ "arn:aws:athena:us-east-2:123456789012:workgroup/stepfunctions-athena-sample-project-workgroup-26ujlyawxg", "arn:aws:athena:us-east-2:123456789012:datacatalog/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:CreateTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:DeletePartition", "glue:BatchDeletePartition" ], "Resource": [ "arn:aws::glue:us-east-2:123456789012:catalog", "arn:aws::glue:us-east-2:123456789012:database/*", "arn:aws::glue:us-east-2:123456789012:table/*", "arn:aws::glue:us-east-2:123456789012:userDefinedFunction/*" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

如需將 Step Functions 與其他 AWS 服務搭配使用IAM時如何設定的相關資訊,請參閱Step Functions 式如何為整合式服務產生IAM原則