Amazon web services SAM Lambda使用AutoPublishAlias的自动版本控制在代码URL更改但其指向的代码不';T 简单问题:

Amazon web services SAM Lambda使用AutoPublishAlias的自动版本控制在代码URL更改但其指向的代码不';T 简单问题:,amazon-web-services,aws-lambda,amazon-cloudformation,aws-serverless,aws-sam,Amazon Web Services,Aws Lambda,Amazon Cloudformation,Aws Serverless,Aws Sam,SAM Lambda使用AutoPublishAlias进行自动版本控制是否适用于代码CodeUri更改但其指向的实际代码不更改的情况 背景 我们正在部署几个Lambda@Edge使用SAM资源类型的函数 我们的部署通过将代码放入S3存储桶,然后触发CloudFormation堆栈更新来运行。除了这些lambda之外,我们的堆栈还包含其他内容 这样,我们通常会在lambda代码不变的情况下进行部署 但是,每次部署时,代码URI都会更改为我们最新部署的bucket,这会按预期触发尝试发布的新版本,

SAM Lambda使用
AutoPublishAlias
进行自动版本控制是否适用于代码
CodeUri
更改但其指向的实际代码不更改的情况

背景 我们正在部署几个Lambda@Edge使用SAM资源类型的函数

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

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

但是,每次部署时,代码URI都会更改为我们最新部署的bucket,这会按预期触发尝试发布的新版本,该版本与中的注释(粘贴在下面作为上下文)

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

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

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

我已经查看了版本的创建位置和大部分文档,但找不到明确的答案

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


感谢您的帮助

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

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

谢谢!最后完成了以下操作:1)使用
AWS::Lambda::Function
AWS::Lambda::Version
2)在
AWS::Lambda::Version
的名称中添加
\uuuuuuuuuu替换为\uLambda::Version
3)添加一些自定义Rake构建逻辑,以使用
摘要::SHA256.file
生成Lambda代码的SHA-256,然后继续并用该SHA替换
\u替换为\u LAMBDA\u SHA\u