验证错误堆栈: AWS CloudFormation堆栈处于ROLLBACK_COMPLETE状态,无法进行更新。

169

当我使用cloudformation进行部署时,命令如下:aws cloudformation deploy --region $region --stack-name ABC

出现错误:

调用CreateChangeSet操作时发生了一个错误(ValidationError):Stack:arn:aws:cloudformation:stack/service/7e1d8c70-d60f-11e9-9728-0a4501e4ce4c 已处于ROLLBACK_COMPLETE状态,无法更新。


某些堆栈正在回滚,我认为必须先完成它。 - Lamanus
1
所以我必须手动创建堆栈吗?还是可以更新另一个已存在的堆栈? - Thanh Nguyen Van
您可以提供更多信息,例如导致回滚的错误是什么,这将有助于社区更好地理解问题并提供解决方案。您可以从AWS控制台获取更多信息。 - Vinoth A
4个回答

231

当堆栈创建失败时会发生这种情况。默认情况下,堆栈将保持原地,并显示状态为ROLLBACK_COMPLETE。这意味着它已成功回滚(删除)堆栈创建的所有资源。唯一剩下的是空的堆栈本身。您无法更新此堆栈;您必须手动删除它,然后才能尝试再次部署。


如果在控制台中将“发生故障后回滚”设置为禁用(或在使用create-stack时,在CLI命令中将--on-failure设置为DO_NOTHING),则堆栈创建失败将导致状态为CREATE_FAILED。在故障点之前创建的任何资源都不会被回滚。

如果您正在对现有(成功创建的)堆栈进行更新,但更新失败但已成功回滚,则它将返回到其先前的有效状态(带有状态UPDATE_ROLLBACK_COMPLETE),以允许您重新尝试更新。


正如@SteffenOpel所指出的,您现在可以通过在CLI中将--on-failure选项(仅适用于create-stack而非deploy)设置为DELETE来指定在失败时应删除堆栈。撰写本文时(20年11月13日),此选项尚未在控制台中提供。


3
如何指定在失败时删除它? - Jun
1
@Jun711 我不相信内置功能可以实现这个。您可以在“堆栈创建选项”部分中指定是否在失败时回滚,但我不认为您可以告诉它在失败时自动删除。您可以创建一个自定义资源并将其添加到CF模板中,以监视堆栈的状态并在失败时删除它。但通常您会想要调查失败原因,因此我认为自动删除它不是一个好主意。 - 404
4
可以通过使用相应的“--on-failure”选项并指定“DELETE”来在失败时自动删除堆栈(这在语义上取代了“--disable-rollback”)- 尽管控制台仍未公开这个更新和更灵活的选项,但它可以通过CreateStack API操作和AWS CLI create-stack 操作中获得。 - Steffen Opel
3
提醒一下,OP正在使用aws cloudformation deploy而不是aws cloudformation create-stackdeploy不允许您设置--on-failure,因此如果创建失败,您必须手动删除堆栈。 https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/deploy/index.html - John Breen
@JohnBreen 你是不是想说反过来?那个 OP 正在使用 create-stack 吗? - user10706046
1
AWS很丢人。我只有一个建议。不要使用CloudFormation,使用terraform。 - Vlad

84
运行以下 AWS CLI 命令来删除您的堆栈
aws cloudformation delete-stack --stack-name <<stack-name>>

删除您的堆栈可能只需要不到一分钟的时间,然后尝试重新部署它。


4
如果你的区域与CLI命令相符,则此方法有效。如果使用此方法时出现某种空列表,请不要担心,只需登录Web控制台,进入正确的区域并从那里删除即可。当然,这不是解决此问题的最佳方式,但至少可以解决问题,以防上述输入无法解决问题。 - nate
这对我有效。 我的初次调用节点部署失败了,由于权限不足。 空的存根没有被自动删除,随后的部署都因为上述错误而失败。 - Nafsin Vk
解决方案无效。 - Julius Goddard

1

2种解决方案 1.你必须手动删除S3中的所有对象(如果仍然出现错误,Stack:arn:aws:cloudformation:eu-west-3:624140032431:stack/as*****cbucket/f57c54f0-618a-11ec-afd7-06fc90426f3e处于ROLLBACK_COMPLETE状态,无法更新。,请转到第二个解决方案) 2.创建一个新的Bucket以继续


1

问题是S3存储桶在全球范围内具有唯一性,我也遇到了同样的问题,当我使用CloudFormation时出现了相同的错误。

在我的情况下,S3存储桶名称在我的情况下并不唯一,它已经被创建了,我改变了存储桶的名称后问题得到了解决。


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