本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
保持数据处于最新状态(Amazon Athena、Amazon S3 等Amazon Glue)
此示例项目演示如何查询目标表以通过Amazon Glue Catalog 获取当前数据,然后使用 Amazon Athena 使用来自其他来源的新数据对其进行更新。部署此示例项目会创建Amazon Step Functions状态机、Amazon S3 存储桶、Amazon Athena 查询和Amazon Glue数据目录调用。
在此项目中,Step Functions 状态机调用Amazon Glue Catalog 来验证 Amazon S3 存储桶中是否存在目标表。如果找不到表,它将创建一个新表。然后将运行 Athena 查询,将来自不同数据源的行添加到目标表中:首先查询目标表以获取最新日期,然后查询源表以获取最新数据,然后将其插入目标表中。
创建状态机并预置资源
从 https://console.aws.amazon.com/athena/
打开 Amazon Athena 控制台。 -
在左侧导航窗格中,选择 Instancc ccs。
-
在 “保持数据最新” 图块中,选择 “开始”。
-
在 “开始” 对话框中,选择 “部署示例项目”,然后选择 “继续”。
-
您将被重定向到 Step Functions 控制台的 “查看” 工作流程页面。查看为示例项目自动生成的亚马逊州语言定义。
将显示状态机工作流定义和可视工作流。
-
选择 Next(下一步)。
将显示 “部署并运行” 页面,其中列出了将要创建的资源。此示例项目创建了以下资源:
-
Amazon Athena 查询
-
Lambda 函数
-
亚马逊 EventBridge 规则
-
一个 Amazon S3 存储桶
-
一个Amazon Glue数据库
-
-
选择 “部署并运行”。
注意 创建这些资源和相关的 IAM 权限可能需要长达 10 分钟时间。在显示 “部署并运行” 页面时,您可以打开 Stack ID 链接以查看正在配置哪些资源。
启动新的执行
-
在 New execution 页面上,输入执行名称 (可选),然后选择 Start Execution (开始执行)。
(可选)要识别您的执行情况,可以在 “名称” 框中为其指定名称。默认情况下,Step Functions 会自动生成唯一的执行名称。
注意 Step Functions 允许您为包含非 ASCII 字符的状态机、执行、活动和标签创建名称。这些非 ASCII 名称不适用于亚马逊 CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。
-
(可选)您可以转到 Step Functions 仪表板上新创建的状态机,然后选择 “新建执行”。
执行完成后,您可以在 Visual workflow (可视工作流) 上选择状态,并浏览 Step details (步骤详细信息) 下的 Input (输入) 和 Output (输出)。
示例状态机代码
此示例项目中的状态机通过将参数直接传递给 Amazon S3 和 Amazon Athena 来与 Amazon Athena 集成。Amazon Glue
浏览此示例状态机,了解 Step Functions 如何通过连接到Resource
字段中的亚马逊资源名称 (ARN) 并传递Parameters
给服务 API 来控制 Amazon S3 和 Amazon Athena。Amazon Glue
有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅将 Amazon 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 示例
示例项目生成的此示例Amazon 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与其他Amazon服务一起使用时如何配置 IAM 的信息,请参阅集成服务的 IAM 政策。