本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
讓資料保持最新狀態 (Amazon Athena、Amazon S3 AWS Glue)
此範例專案示範如何使用 AWS Glue Catalog 查詢目標資料表以取得目前資料,然後使用 Amazon Athena 使用其他來源的新資料更新資料。
在此專案中,Step Functions 狀態機器會呼叫目 AWS Glue 錄,以驗證 Amazon S3 儲存貯體中是否存在目標資料表。如果沒有找到一個表,它將創建一個新表。然後,Step Functions執行 Athena 查詢,將資料列從不同的資料來源新增至目標資料表:先查詢目標資料表以取得最新的日期,然後查詢來源資料表是否有最新的資料,然後將其插入目標資料表。
步驟 1:建立狀態機器並佈建資源
-
開啟 Step Functions 主控台
,然後選擇建立狀態機器。 -
Keep data up to date
在搜尋方塊中輸入,然後從傳回的搜尋結果中選擇 [讓資料保持為最新狀態]。 -
選擇 Next (下一步) 繼續。
-
Step Functions 會列出您選取的範例專案中 AWS 服務 使用的項目。它也會顯示範例專案的工作流程圖表。將此項目部署到您的項目中, AWS 帳戶 或將其用作構建自己的項目的起點。根據您想要的進行方式,選擇 [執行示範] 或 [在其上建置]。
此範例專案會部署下列資源:
-
Amazon S3 儲存貯體
-
Amazon Athena查詢
-
一個AWS Glue Data Catalog電話
-
AWS Step Functions 狀態機器
-
相關 AWS Identity and Access Management (IAM) 角色
下圖顯示了「保持資料為最新」範例專案的工作流程圖形:
-
-
選擇「使用範本」繼續進行選取。
-
執行以下任意一項:
-
如果您選取「在其上建置」,「Step Functions」會為您選取的範例專案建立工作流程原型。Step Functions 不會部署工作流程定義中列出的資源。
在工作流程 Studio 中設計模式,從拖放狀態狀態瀏覽器以繼續建立您的工作流程原型。或者切換到程式碼模式提供類似 VS 代碼的集成代碼編輯器,用於在 Step Functions 控制台中更新狀態機器的Amazon States Language(ASL)定義。如需有關使用工作流程 Studio 建置狀態機器的詳細資訊,請參閱使用工作流程。
重要
請記得在執行工作流程之前,更新範例專案中使用之資源的預留位置 Amazon 資源名稱 (ARN)。
-
如果您選取 [執行示範],Step Functions 會建立唯讀範例專案,該專案會使用 AWS CloudFormation 範本將該範本中列出的 AWS 資源部署到您的 AWS 帳戶.
提示
若要檢視範例專案的狀態機定義,請選擇 [程式碼]。
準備就緒後,請選擇 [部署並執行] 以部署範例專案並建立資源。
建立這些資源和相關 IAM 許可最多可能需要 10 分鐘的時間。部署資源時,您可以開啟 CloudFormation Stack ID 連結以查看正在佈建的資源。
建立範例專案中的所有資源之後,您可以在 [狀態機器] 頁面上看到列出的新範例專案。
重要
CloudFormation 範本中使用的每項服務可能會收取標準費用。
-
步驟 2:運行狀態機
-
在 [狀態電腦] 頁面上,選擇您的範例專案。
-
在範例專案頁面上,選擇 [開始執行]。
-
在 [開始執行] 對話方塊中,執行下列動作:
-
(選擇性) 若要識別您的執行項目,您可以在「名稱」(Name) 方塊中指定執行項目的名稱。依預設,Step Functions 會自動產生唯一的執行名稱。
注意
Step Functions 可讓您為包含非 ASCII 字元的狀態機器、執行項目、活動和標籤建立名稱。這些非 ASCII 名稱不適用於 Amazon CloudWatch。若要確保您可以追蹤 CloudWatch 量度,請選擇僅使用 ASCII 字元的名稱。
-
(選擇性) 在「輸入」方塊中,以 JSON 格式輸入輸入值以執行工作流程。
如果您選擇執行示範,則不需要提供任何執行輸入。
-
選擇 Start execution (開始執行)。
-
Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。
若要複查執行結果,請在「圖形」檢視中選擇個別狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需有關可在「執行詳細資訊」頁面檢視之執行資訊的詳細資訊,請參閱執行詳細資訊頁面 — 介面概觀。
-
範例狀態機器程式碼
此範例專案中的狀態機器會直接將參數傳遞至這些資源 AWS Glue,與 Amazon S3 和 Amazon Athena 整合。
瀏覽此範例狀態機器, AWS Glue瞭解 Step Functions 如何透過連線至現Resource
場的 Amazon 資源名稱 (ARN) 並傳遞至服務 API Parameters
來控制 Amazon S3 和亞馬遜雅典娜。
如需如何 AWS Step Functions 控制其他 AWS 服務的詳細資訊,請參閱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 的詳細資訊,請參閱整合式服務的 IAM 政策。