当代码 URL 更改但它指向的代码不更改时,使用 AutoPublishAlias 的 SAM Lambda 自动版本控制是否有效?

Does SAM Lambda auto-versioning using AutoPublishAlias work when code URL changes but the code that it points to doesn't?

简单问题:

当代码 CodeUri 更改但它指向的实际代码没有更改时,使用 AutoPublishAlias 的 SAM Lambda 自动版本控制是否适用于 AWS::Serverless::Function

背景

我们正在使用 SAM AWS::Serverless::Function 资源类型部署多个 Lambda@Edge 函数。

我们的部署通过将代码放入 S3 存储桶然后触发 CloudFormation 堆栈更新来运行。除了这些 Lambda 之外,我们的堆栈还包含其他内容。

因此,我们经常会在 lambda 代码不变的情况下进行部署。

但是,每次部署时,代码 URI 都会更改为我们最新部署的存储桶,这会按预期触发尝试发布的新版本,该版本与 SAM documentation 中的注释(粘贴在下方以获取上下文)

NOTE: AutoPublishAlias will publish a new version only when the CodeUri changes. Updates to other configuration (ex: MemorySize, Timeout) etc will not publish a new version. Hence your Alias will continue to point to old version that uses the old configurations.

我问的原因是因为我们遇到了一些暂时的 CloudFormation 部署问题,我一直在尝试找出可能与此相关的根本原因。我们在 CloudFormation 堆栈更新中的 SAM 生成版本上得到的错误如下:

A version for this Lambda function exists ( {some number} ). Modify the function to create a new version.

我查看了创建版本的 SAM code 和他们的大部分文档,但找不到明确的答案。

我们可能每次都在版本上手动创建具有不同逻辑 ID 的 AWS::Lambda::FunctionAWS::Lambda::Version,这应该(?)解决问题,但我们试图利用 SAM 进行自动-我们的 Lambda 的版本控制。

感谢任何帮助!

是的,SAM 将在 CodeUri 更改时创建新版本,但是,如果没有更改,Lambda 将不允许您创建新版本。

为了解决这个问题,我有一个 hack,它创建一个 NOUNCE 环境变量,其随机值随每次部署而变化。所以 CloudFormation 认为这是对代码的更改并部署了 Lambda 的新版本,我们没有更多的版本错误。