我创建了一个带有lambda函数的简单AWS状态机。像下面一样
{
"Comment":"Validates data",
"StartAt": "ChooseDocumentType",
"States": {
"ChooseDocumentType": {
"Type": "Choice",
"Choices":[
{
"Variable":"$.documentType",
"StringEquals":"RETURN",
"Next":"ValidateReturn"
},
{
"Variable":"$.documentType",
"StringEquals":"ASSESSMENT",
"Next":"ValidateAssessment"
}
],
"Default":"DefaultState"
},
"ValidateReturn":{
"Type":"Task",
"Resource":"arn:aws:lambda:us-west-2:111111111:function:ValidateReturn",
"Next":"DefaultState"
},
"ValidateAssessment":{
"Type":"Task",
"Resource":"arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment",
"Next":"DefaultState"
},
"DefaultState":{
"Type":"Pass",
"End":true
}
}
}
问题
1>如何为该状态机创建阶段。 (例如生产,开发等)?
2>每个lambda函数都有alias
指向不同的版本。因此,development
别名始终指向$latest
版本,production
别名指向2
版本。我如何动态地将状态机的阶段与这些lambda别名相关联?因此,处于development
阶段的状态机应使用别名为development
的lambda函数,依此类推。
我正在使用AWS控制台管理状态机和lambda,并且看不到任何为状态机创建阶段的操作
答案 0 :(得分:0)
您可以在Lambda ARN中声明别名和版本:
# default, $LATEST
arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment
# using alias
arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment:development
# using version
arn:aws:lambda:us-west-2:111111111:function:ValidateAssessment:2
根据需要在“步进功能”定义中使用它们。
答案 1 :(得分:0)
回复:#2,如果您主要关心的是控制调用哪个Lambda别名,则有一种方法可以通过单步函数来实现。
您的步进函数状态定义将类似于:
{
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"InvocationType": "RequestResponse",
"FunctionName": "someFunction",
"Qualifier.$": "$.lambdaAlias",
"Payload": {}
},
}
因此,在执行step函数并指定阶段的情况下,您将传递一个lambdaAlias
参数。 (该名称没有什么神奇之处,您可以从所需的任何步进函数输入参数中提取它。)
您的Lambda的请求有效负载将进入Parameters.Payload
。
https://docs.aws.amazon.com/step-functions/latest/dg/connect-lambda.html