当我尝试将资源导入 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]”
执行以下步骤来解决问题:
- 打开 AWS CloudFormation 控制台。
- 在“创建堆栈”或“更新堆栈”向导的查看页面上,选择我确认此模板可以创建 IAM 资源。
- 在 AWS CLI 中,当您使用 create-stack 和 update-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 资源