CloudFormation, AWS Lambda:忽略旧模板中的参数

3
我正在将一个 .Net Core Web API 项目部署到 AWS Lambda。虽然它能正常工作,但我遇到了以下问题:
以前的模板包含不再使用的参数
我们之前部署 Lambda 时创建了一个 CloudFormation 模板,并定义了一个名为“BadParameter”的参数。
现在,我们不想再使用该参数了。我们已经更新了我们的 serverless.template,以便不再包含该参数。
现在,所有使用更新后的模板进行的部署都会失败,并显示以下错误信息:
创建 CloudFormation 变更集时出错:参数:[BadParameter] 在模板中不存在
我可以通过从 CloudFormation 下载模板、手动删除该参数,然后重新上传模板来解决此问题,但这很繁琐且容易出错。
是否有一种方法可以在我的新模板中指定应删除旧参数?

理想情况下,您的CloudFormation模板应该反映出您部署的当前状态,并且您不应该在CloudFormation之外的环境中部署/修改任何内容。您是否可以简单地从源代码中删除参数,包括CF模板中使用的所有位置,并执行CloudFormation更新以重新部署所有相关更改? - jarmod
@jarmod 这正是我尝试做的事情。问题在于,当我尝试更新模板时,因为旧版本具有新版本缺少的参数,所以更新失败。唯一的方法似乎是先手动更新现有模板。 - SouthShoreAK
我认为失败的原因不是模板的先前版本包含该参数(否则您永远无法删除参数)。文档建议您可以删除模板参数,除非它被不支持更新的资源使用。这可能是问题吗? - jarmod
2个回答

1

我也遇到了这个问题。我将详细说明我看到的情况以及我采取的措施来解决它,因为我的情况似乎与SouthShoreAK的情况不完全相同,但足够接近,我确信我们正在经历同样的问题。

情况和错误

parent-template.yml是CloudFormation模板,作为CI/CD过程的一部分进行部署。在此模板中有多个AWS::CloudFormation::StackSet资源,例如child-template-1.yml、child-template-2.yml等。每个child-template-*.yml StackSet资源都会部署到多个帐户中。

我在一个AWS::CloudFormation::StackSet资源上收到了以下错误:

参数:[OldParameter1,OldParameter2]不存在于模板中

导致错误的更改

最近的更改如下:

  1. 在child-template-1.yml中,我删除了这两个参数OldParameter1和OldParameter2。
  2. 在parent-template.yml中,在AWS::CloudFormation::StackSet资源中,我一直传递OldParamter1和OldParameter2的值。我删除了这两个ParameterKey-ParameterValues。换句话说,我停止将这些参数作为输入提供给子模板。

采取的步骤

  1. 我进入child-template-1.yml,并将参数OldParameter1和OldParameter2添加回模板中。
  2. 我给这两个参数一个默认值,“Dummy”。
  3. 我使用aws cloudformation deploy重新部署了它们。
  4. 我进入child-template-1.yml并删除了参数OldParameter1和OldParameter2。
  5. 我重新部署了它们。

此时,这些参数已从模板中删除。我不知道为什么需要这样做;对我来说,这似乎是CloudFormation的一个错误。


0

虽然这是一个老问题,但我刚刚在使用CodePipeline时遇到了同样的问题。从OP的问题中无法确定他们是否正在使用它。

解决方案是从CodePipeline CHANGE_SET_REPLACE阶段中引用的json文件中删除旧参数,该文件在TemplateConfiguration中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接