通过 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 种名称格式:
- 函数 ARN
- 函数名称(名称或name:alias)
- 部分 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
}
我想知道是否可以使用 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 种名称格式:
- 函数 ARN
- 函数名称(名称或name:alias)
- 部分 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
}