4

简单的问题:

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

背景

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

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

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

然而,每次部署,代码 URI 都会更改为我们最新部署的存储桶,这会按预期触发尝试发布的新版本,该版本与SAM 文档中的注释内联(粘贴在下面作为上下文)

注意: AutoPublishAlias 将仅在 CodeUri 更改时发布新版本。对其他配置的更新(例如:MemorySize、Timeout)等不会发布新版本。因此,您的别名将继续指向使用旧配置的旧版本。

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

存在此 Lambda 函数的版本 ( {some number} )。修改函数以创建新版本。

我查看了创建版本的SAM 代码及其大部分文档,但找不到明确的答案。

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

任何帮助表示赞赏!

4

2 回答 2

2

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

于 2018-11-09T19:55:18.227 回答
0

为了解决这个问题,我有一个技巧,即创建一个 NOUNCE 环境变量,其随机值随每次部署而变化。因此,CloudFormation 认为这是对代码的更改并部署了该 Lambda 的新版本,我们不再有该版本错误。

于 2020-08-18T09:32:45.480 回答