首页 > 解决方案 > 如何为 AWS 状态机创建阶段?

问题描述

我创建了一个带有 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指向不同的版本。所以developmentalias 总是指向$latestversion 并且productionalias 指向,比如说, version 2。我如何将状态机的阶段与这些 lambda 别名动态关联?所以阶段中的状态机development应该使用带有别名的lambda函数development等等。

我正在使用 AWS 控制台来管理状态机和 lambda,但我没有看到任何为状态机创建阶段的操作

标签: amazon-web-servicesaws-lambdaaws-step-functions

解决方案


回复:# 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


推荐阅读