如何解决 CloudFormation 中的更改集错误?

2 分钟阅读
0

当我尝试将资源导入 AWS CloudFormation 堆栈时收到错误。

解决方案

根据您的错误类型,完成相关部分中的步骤以对错误进行故障排查。

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI

变更集错误

**错误内容: “There was an error creating this change set.**As part of the import operation, you cannot modify or add [Outputs]”

将资源导入堆栈时会出现此错误。使用资源导入模板创建新堆栈且模板通过 CloudFormation 控制台有输出时,也会发生这种情况。执行以下步骤来解决问题:

  • 将最新 CloudFormation 模板的输出部分与您的堆栈当前使用的模板进行比较。两个模板中的输出部分必须相同。如果值不相同,请更新最新的模板,以匹配当前模板的输出部分中的值和输出。
    重要事项:导入操作不能包含对输出逻辑 ID描述导出以及其他属性的添加和修改。
  • 导入操作完成后,使用输出配置中的所需更改更新堆栈。

堆栈属性验证错误

错误内容: “An error occurred (ValidationError) when calling the CreateChangeSet operation: As part of the import operation, you cannot modify or add [Tags]”

当您使用 AWS CLI 或 AWS SDK 创建 IMPORT 类型更改集,且更改集包含已修改或添加的堆栈属性时,会出现此错误。

  • 确认更改集创建操作中包含的堆栈属性与堆栈的当前属性值同步。
    **重要事项:**不要更新或添加任何新的属性值。
  • 导入资源后,另外执行单独的更新操作更新您的属性。

修改后的资源错误

错误内容: “There was an error creating this change set.You have modified resources [ResourceName] in your template that are not being imported.Update, create or delete operations cannot be executed during import operations.”

当您在资源导入操作期间修改现有资源时,会出现此错误。在导入操作期间,您无法创建、更新和删除资源。执行以下步骤来解决问题:

  • 创建 UPDATE 类型更改集,而非 IMPORT 类型更改集。这会为您显示资源中更改的来源。
  • 对现有资源使用相同的资源规范,仅向模板添加要导入的相应资源。

要导入的资源列表错误

当您使用 AWS CLI 或 AWS SDK 创建 IMPORT 类型更改集时,通常会出现以下错误。

错误内容: “An error occurred (ValidationError) when calling the CreateChangeSet operation: Resources [<ResourceName>] is missing from ResourceToImport list”

在您的 CloudFormation 模板中,确认您在将物理 ID 传递到要导入堆栈的所有资源的 ResourceToImport 属性中。

错误内容: “An error occurred (ValidationError) when calling the CreateChangeSet operation: Must Provide at least one resource to import”

确认您在 AWS CLI 命令中包含 --resources-to-import,或者在 API 调用中包含 ResourceToImport。另外,请务必列出所有要导入的资源。
**重要事项:**要导入,必须将物理 ID 传递给所有新资源。

由于 IAM 功能导致的错误

“Error: Failed to create changeset for the stack: <StackName>, ex: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state: For expression "Status" we matched expected path: "FAILED" Status: FAILED.Reason: Requires capabilities: [CAPABILITY_NAMED_IAM]”

执行以下步骤来解决问题:

  1. 打开 AWS CloudFormation 控制台
  2. 在“创建堆栈”或“更新堆栈”向导的查看页面上,选择我确认此模板可以创建 IAM 资源
  3. 在 AWS CLI 中,当您使用 create-stackupdate-stack命令时,为**--capabilities** 参数指定 CAPABILITY_IAM 或 CAPABILITY_NAMED_IAM 值。
    **注意:**如果您的模板包含 AWS Identity and Access Management(IAM)资源,则可以指定任一功能。如果您的模板包含 IAM 资源的自定义名称,则必须指定 CAPABILITY_NAMED_IAM。

由于更新堆栈操作期间“未提交任何更改”而导致的错误

错误内容: “The submitted information didn't contain changes.Submit different information to create a change set" or "An error occurred (ValidationError) when calling the UpdateStack operation: No updates are to be performed.”

当您在更新堆栈操作期间使用相同的堆栈模板时,会出现此错误。或者,当您不修改资源属性而只尝试修改参数值或堆栈描述时,就会发生这种情况。CloudFormation 不将其视为更改,因此更改集创建失败。

ExecuteChangeSet API 调用错误

错误内容: “Either DisableRollback or OnStackFailure can be specified, but not both.Validation error as OnStackFailure parameter was specified during CreateChangeSet.”

您可以指定 **OnFailure ** 或 DisableRollBack,但不能同时指定。要解决此问题,请通过删除命令中的 onStackFailure 属性来创建新的更改集,然后运行它。或者,打开回滚选项,然后运行当前更改集来更新堆栈。

由于控制台上更改集的输入和格式不匹配而导致的错误

错误内容: “Given input did not match expected format”

此错误通常是由于 CloudFormation 模板中的语法问题造成的。检查模板语法中是否有任何连接函数格式、额外字符或额外的双引号。此外,还要查看 AWS System Manager Agent(SSM Agent)参数等资源。有关解决语法错误的更多信息,请参阅如何解决 CloudFormation 中的模板验证或模板格式错误?

相关信息

从现有资源创建堆栈

将现有资源导入堆栈

支持导入和偏差检测操作的资源

使用 CloudFormation 对现有资源进行管理

确认 AWS CloudFormation 模板中的 IAM 资源

AWS 官方
AWS 官方已更新 9 个月前