本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
开始Athena
此示例项目基于标准工作流,演示了如何使用 Step Functions 和 Amazon Athena 来启动 Athena 查询并发送包含查询结果的通知。此示例项目创建以下内容:
-
Amazon Athena
-
一个 Amazon Glue 爬网程序
-
Amazon Simple Notifice
-
相关Amazon Identity and Access Management(IAM) 角色
在此项目中,Step Functions 使用 Lambda 函数和Amazon Gluecrawler 生成一组示例数据。然后,它使用Athena 服务集成并使用 SNS 主题返回结果。
有关Athena 和Step Functions 服务集成的更多信息,请参阅以下内容:
此示例项目可能会产生费用。
为新 Amazon 用户提供了免费使用套餐。在此套餐中,低于某种使用水平的服务是免费的。有关 的更多信息Amazon成本和免费套餐,请参阅Athena
创建状态机并预置资源
打开Step Functions ct
-
选择示例项目,然后选择开始Athena.
此时将显示状态机 Code (代码) 和 Visual Workflow (可视工作流程)。
-
选择 Next(下一步)。
此时将显示 Deploy resources (部署资源) 页面,其中列出了将创建的资源。对于本示例项目,资源包括:
-
两个 Lambda 函数
-
状态机
-
SNS 主题
-
相关 IAM 角色
-
-
选择 Deploy Resources (部署资源)。
注意 创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。当显示 Deploy resources (部署资源) 页面时,您可打开 Stack ID (堆栈 ID) 链接以查看正在预置的资源。
启动新的执行
-
在存储库的状态机页面上,选择AthenaStateMachine示例项目创建的状态机,然后选择开始执行.
-
在 New execution 页面上,输入执行名称 (可选),然后选择 Start Execution (开始执行)。
(可选)要识别您的执行,您可以在名称。默认情况下,Step Functions 会自动生成唯一的执行名称。
注意 Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于亚马逊 CloudWatch. 为了确保你可以跟踪 CloudWatch 指标,请选择一个仅使用 ASCII 字符的名称。
-
(可选)转到 Step Functions (控制功能) 上新创建的状态机控制面板,然后选择新处决.
-
执行完成后,您可以在 Visual workflow (可视工作流) 上选择状态,并浏览 Step details (步骤详细信息) 下的 Input (输入) 和 Output (输出)。
示例状态机代码
此示例项目中的状态机与 Athena 和Amazon Lambda方法是将参数直接传递给这些资源,并且使用 SNS 主题来返回查询结果。
浏览此示例状态机以了解 Step functions 如何控制 Lambda 和 Athena。
有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅将 Amazon Step Functions 与其他服务一起使用。
{
"StartAt": "Generate example log",
"States": {
"Generate example log": {
"Resource": "arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-Athena-LambdaForDataGeneration-AKIAIOSFODNN7EXAMPLE",
"Type": "Task",
"Next": "Run Glue crawler"
},
"Run Glue crawler": {
"Resource": "arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-Athen-LambdaForInvokingCrawler-AKIAI44QH8DHBEXAMPLE",
"Type": "Task",
"Next": "Start an Athena query"
},
"Start an Athena query": {
"Resource": "arn:aws:states:::athena:startQueryExecution.sync",
"Parameters": {
"QueryString": "SELECT * FROM \"athena-sample-project-db-wJalrXUtnFEMI\".\"log\" limit 1",
"WorkGroup": "stepfunctions-athena-sample-project-workgroup-wJalrXUtnFEMI"
},
"Type": "Task",
"Next": "Get query results"
},
"Get query results": {
"Resource": "arn:aws:states:::athena:getQueryResults",
"Parameters": {
"QueryExecutionId.$": "$.QueryExecution.QueryExecutionId"
},
"Type": "Task",
"Next": "Send query results"
},
"Send query results": {
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:us-east-1:111122223333:StepFunctionsSample-AthenaDataQueryd1111-2222-3333-777788889999-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE",
"Message": {
"Input.$": "$.ResultSet.Rows"
}
},
"Type": "Task",
"End": true
}
}
}
有关在将Step Functions 与其他Amazon服务,请参阅集成服务的 IAM 政策.
IAM 示例
这些示例Amazon Identity and Access Management示例项目生成的这些策略包括执行状态机和相关资源所需的最小权限。我们建议在 IAM 策略中仅包含这些必需的权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-Athena-LambdaForDataGeneration-AKIAIOSFODNN7EXAMPLE",
"arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-Athen-LambdaForInvokingCrawler-AKIAI44QH8DHBEXAMPLE"
],
"Effect": "Allow"
},
{
"Action": [
"sns:Publish"
],
"Resource": [
"arn:aws:sns:us-east-1:111122223333:StepFunctionsSample-AthenaDataQueryd1111-2222-3333-777788889999-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE"
],
"Effect": "Allow"
},
{
"Action": [
"athena:getQueryResults",
"athena:startQueryExecution",
"athena:stopQueryExecution",
"athena:getQueryExecution",
"athena:getDataCatalog"
],
"Resource": [
"arn:aws:athena:us-east-1:111122223333:workgroup/stepfunctions-athena-sample-project-workgroup-wJalrXUtnFEMI",
"arn:aws:athena:us-east-1:111122223333: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-1:111122223333:database/*",
"arn:aws:glue:us-east-1:111122223333:table/*",
"arn:aws:glue:us-east-1:111122223333:catalog"
],
"Effect": "Allow"
}
]
}
有关在将Step Functions 与其他Amazon服务,请参阅集成服务的 IAM 政策.