【发布时间】:2017-06-13 18:27:29
【问题描述】:
AWS CloudFormation 回滚(例如,UPDATE_ROLLBACK_IN_PROGRESS)一直在进行,比如一个半小时以上。我想完全删除堆栈或强制停止任何活动。这可能吗?
谢谢!
【问题讨论】:
AWS CloudFormation 回滚(例如,UPDATE_ROLLBACK_IN_PROGRESS)一直在进行,比如一个半小时以上。我想完全删除堆栈或强制停止任何活动。这可能吗?
谢谢!
【问题讨论】:
阻止堆栈更新/回滚的另一个常见原因是 ECS::Service 资源更新中的错误:它看起来不像当前检测到的(在某些情况下?)。 Cloudformation 正在等待服务事件以使服务达到稳定状态,因此只需将服务更新为可以工作的内容(例如,将所需任务设置为 0)即可解除阻塞。不过,在发送更多更新以避免问题之前,请尝试将状态恢复到 Cloudformation 的预期。
【讨论】:
我猜你的堆栈资源被外部更改或删除了。 您可以找到以下官方指南。
手动同步资源,使其与原始堆栈的模板匹配,然后继续回滚更新。例如,如果您手动删除了 AWS CloudFormation 尝试回滚到的资源,您必须手动创建具有相同名称的资源和它在原始堆栈中的属性。
或(正如@talentedmrjones 所说)
要修复堆栈,请联系 AWS 客户支持。
就我而言,我可以通过重新创建已删除的资源来停止同样的情况。
【讨论】:
在我的情况下,它是一个无法删除的 EC2 安全组,因为它是从另一个 EC2 安全组引用的。
【讨论】:
在处理自定义资源时,可以构建返回 url 的模拟版本。
最简单的方法是获取在创建过程中使用的 url。如果您可以使用它,请将最后一个 %2F 之后的部分替换为“客户端请求令牌”,您可以从 Cloudformation 的事件日志中获取该部分。
如果不是,那么这是您必须构建的 url 的格式。
https://{region}.console.aws.amazon.com/cloudformation/home?region={region}#/stacks?filter=active&tab=events&stackId={stack arn}%2F{stack name}%2F{client request token}
将该 url 作为 get 运行,这将导致资源回滚或删除失败。
【讨论】:
您需要调查回滚究竟为何需要这么长时间(例如,是否是由于缺少在 CloudFormation 堆栈之外修改的资源,或自定义资源未能返回预期信号)。
【讨论】:
An error occurred (ValidationError) when calling the DeleteStack operation: Stack [arn:aws:cloudformation:ap-<region>-1:<id>:stack/<stackname>/<id>] cannot be deleted while in status UPDATE_ROLLBACK_IN_PROGRESS 错误验证
如果您的用户角色缺少删除角色的权限,有时会发生这种情况。这可以通过尝试手动删除由 CloudFormation 堆栈创建的角色或用户来测试。
【讨论】:
我曾经发生过这样的事情,堆栈似乎永远停留在 UPDATE_ROLLBACK_IN_PROGRESS 状态。我建议向 AWS 支持提交票证。这是我能够解决它的唯一方法。
【讨论】:
您可以尝试删除资源,然后更新回滚将成功完成。
【讨论】:
能够通过 AWS 仪表板手动删除所有内容来删除我的。我最终得到了几个需要删除的悬空角色。
【讨论】:
我遇到了同样的问题。 控制台告诉我一些资源依赖于另一个,所以不能删除。在该状态下,回滚不可用。 我只是删除了整个 VPC 和该 VPC 中的资源。 因为 cloudformation 会每 10-20 分钟重试一次删除资源。所以当它重试时,它会发现资源已经被删除,它只是跳过删除,之后一切顺利。
【讨论】:
是的,使用此命令删除卡在“DELETE_IN_PROGRESS”状态的堆栈。 您也可以在 AWS CloudShell 中轻松运行它。
转到 Lambda 函数->监控->CloudWatch 日志。查找“RequestType”为“Delete”的日志并将必要的字段复制到以下命令
curl -H 'Content-Type: ''' -X PUT -d '{"Status": "SUCCESS","PhysicalResourceId": "Add your physical resource ID", "StackId": "Add your StackId","RequestId": "Add your RequestID","LogicalResourceId": "LambdaFunction"}' 'Add your ResponseURL Here'
例子:
curl -H 'Content-Type: ''' -X PUT -d '{"Status": "SUCCESS","PhysicalResourceId": "cutomRes-LambdaFunction-1NC1ORF", "StackId": "arn:aws:cloudformation:us-east-1:3343:stack/cutomRes/f52a-11eb-b5df-0a5c2cc1","RequestId": "d70931a2-364b-413e-a2","LogicalResourceId": "LambdaFunction"}' 'https://cloudformation-custom-resource-response-useast1.s3.amazonaws.com/arn%3Aaws%/cutomRes/f5466f6Expires=7200&X-Amz-Credential=AKIA6L7Q4OWT3GW5BT7K%2F20210330%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1db1f83f'
请注意,示例包含的 URL 可能出于安全目的而被修改为无效。它仅用于演示目的。
【讨论】:
我去了堆栈资源选项卡,检查了为什么其中一些无法删除,然后我先手动删除了它们。
【讨论】: