如何在 cloudformation yml 中获取最新的 lambda 版本?

Posted

技术标签:

【中文标题】如何在 cloudformation yml 中获取最新的 lambda 版本?【英文标题】:How to get the latest lambda version in cloudformation yml? 【发布时间】:2018-06-16 16:14:13 【问题描述】:

我正在尝试在 cloudformation 中引用 edge lambda for cloudfront distribution。

我现在拥有的是:

          LambdaFunctionARN:
            Fn::GetAtt: [BasicAuthLambdaFunction,Arn]

但我收到此错误:

发生错误:GGGCloudFrontDistribution - 函数 ARN 必须引用特定的函数版本。 (ARN 必须以 版本号。)

那么.. 有什么技术可以引用最新版本的函数吗?

【问题讨论】:

在大多数情况下,省略 Lambda ARN 的版本号意味着“最新版本”。我想在这种情况下是不允许的。 【参考方案1】:

您不能使用最新版本。您必须使用特定版本作为您链接的文档:

您必须指定函数版本的 ARN;您不能指定 Lambda 别名或 $LATEST。

如果您在模板中创建 Lambda 函数,您还可以创建一个版本并使用它。

  BasicAuthLambdaFunctionVersion: 
    Type: "AWS::Lambda::Version"
    Properties:
      FunctionName:
        Ref: BasicAuthLambdaFunction
# ...
      LambdaFunctionARN:
        Fn::GetAtt: [BasicAuthLambdaFunctionVersion,Arn]

请注意,更新堆栈时,当 Lambda 函数代码更改时,将不会创建新版本。您必须通过将 BasicAuthLambdaFunctionVersion 的名称更改为 BasicAuthLambdaFunctionVersion2 或其他名称来手动创建和使用新版本。要自动执行此操作,您可以在使用之前使用脚本编辑模板。

如果您使用的是无服务器框架,请查看:

https://github.com/silvermine/serverless-plugin-cloudfront-lambda-edge https://github.com/serverless/serverless/issues/3944

【讨论】:

我必须添加 .. LambdaFunctionARN: !Join [':', [!GetAtt LambdaEdge.Arn, !GetAtt LambdaEdgeVersion.Version]] 函数名可以是函数名,也可以是函数arn。

以上是关于如何在 cloudformation yml 中获取最新的 lambda 版本?的主要内容,如果未能解决你的问题,请参考以下文章

在 CloudFormation 或 serverless.yml 中提供 OriginAccessIdentity 参考

无法在 serverless.yml 中引用 CloudFormation 资源。变量 UserPoolId 的变量引用语法无效

如何通过 CloudFormation 设置 EC2 实例根卷的标签

无服务器框架:输出编译的 CloudFormation

是否可以在 Terraform 中执行 CloudFormation 文件?

迭代模板中的 AWS cloudformation 资源数组