【问题标题】:Can you specify a lambda alias when invoking a lambda function via a Step Function?通过 Step Function 调用 lambda 函数时可以指定 lambda 别名吗?
【发布时间】:2020-06-15 12:25:09
【问题描述】:

我想知道是否可以使用 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.$": "$"
      }
    },
...

我可以使用来自状态机输入的值,例如

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

或者我可以使用其他“参数”作为别名吗?

我试图避免为每个环境设置相同的 Step Function。

【问题讨论】:

    标签: aws-step-functions


    【解决方案1】:

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

    但是查看Lambda Task Integration,我们可以看到它支持参数 FunctionName 和 Qualifier。查看Lambda Invoke API,我们可以看到 FunctionName 支持 3 种名称格式:

    1. 函数 ARN
    2. 函数名称(名称或名称:别名)
    3. 部分 ARN (123456789012:function:my-function)

    限定符字段用于指定要调用的函数的版本或别名。因此,话虽如此,您将能够指定您的 Lambda 函数名称(不需要帐户和区域,因为 Step Functions 不支持跨区域/帐户调用)和函数的别名(从输入动态),而无需构造完整的 ARN。以下是您所在州的示例:

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

    【讨论】:

    • 感谢乔,这很好。 AWS 状态机定义编辑器出于某种原因抱怨它,但它似乎有效。
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2011-06-13
    • 2022-12-14
    • 2020-05-02
    相关资源
    最近更新 更多