通过 Step Function 调用 lambda 函数时可以指定 lambda 别名吗?

Can you specify a lambda alias when invoking a lambda function via a Step Function?

我想知道是否可以使用 Step Function 的别名调用 lambda 函数?

我目前设置了一些 Lambda 函数来使用别名。 (每个环境一个,例如 DEV、UAT 等)。这很方便,因为这意味着我不需要为每个环境部署单独的 Lambda 函数。

我想用 Step Functions 实现同样的事情,并使用代表执行环境(别名)的值在状态机上开始执行。

然后我想在状态机语言中使用该值将其传递到 Lambda 函数的 arn 中。

类似这样。

"Comment": "DEV Send Email Notification",
"StartAt": "Send Email Through Mandrill",
"States": {
  "Send Email Through Mandrill": {
    "Type": "Task",
    "Resource": "arn:aws:states:::lambda:invoke",
    "Parameters": {
      "FunctionName": "arn:aws:lambda:{region}:{accountId}:function:Email-Notification:DEV",
      "Payload": {
        "Input.$": "$"
      }
    },
...

我可以不使用 arn:aws:lambda:{region}:{accountId}:function:Email-Notification:DEV 作为 FunctionName,而是使用来自状态机输入的值,例如

"FunctionName": "arn:aws:lambda:{region}:{accountId}:function:Email-Notification:$.Alias"

或者我可以使用其他 "Parameters" 作为别名吗?

我试图避免为每个环境设置相同的阶跃函数。

参数使用 JSONPath 这是一种查询语言,因此您将无法像示例中那样连接值。此外,要从您的 Input inside Parameters 引用数据,它需要采用键值格式 ("key.$": "$.Value")。

但是查看 Lambda Task Integration we can see it supports the parameters FunctionName and Qualifier. Looking at the Lambda Invoke API 我们可以看到 FunctionName 支持 3 种名称格式:

  1. 函数 ARN
  2. 函数名称(名称或name:alias)
  3. 部分 ARN(123456789012:函数:我的函数)

限定符字段用于指定要调用的函数的版本或别名。因此,您将能够指定您的 Lambda 函数名称(不需要帐户和区域,因为 Step Functions 不支持交叉 region/account 调用)和函数的别名(动态地来自输入)而不必构建完整的 ARN。这是您所在州的示例:

"LambdaTask": {
    "Type": "Task",
    "Resource": "arn:aws:states:::lambda:invoke",
    "Parameters": {
        "FunctionName": "NameOfYourFunction",
        "Qualifier.$": "$.Alias",
        "Payload": {
            "Foo": "Bar"
        }
    },
    "End": true
}