如何为AWS状态机创建阶段?

时间:2019-01-18 02:32:22

标签: amazon-web-services aws-lambda aws-step-functions

我创建了一个带有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,并且看不到任何为状态机创建阶段的操作

2 个答案:

答案 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