监控堆栈更新的进度
您可以通过查看堆栈事件来监控堆栈更新进度。堆栈的事件选项卡会显示堆栈创建和更新过程中的每个重要步骤(按照每个事件的时间排序排列,最新的事件显示在最上方)。有关更多信息,请参阅 监控堆栈进度。
成功更新堆栈期间生成的事件
堆栈更新过程开始时会为堆栈标记一个 UPDATE_IN_PROGRESS
事件:
2011-09-30 09:35 PDT AWS::CloudFormation::Stack MyStack
UPDATE_IN_PROGRESS
接下来显示的事件标明更新模板中已发生更改的各个资源的更新开始和完成。例如,更新名为 MyDB
的 AWS::RDS::DBInstance 资源将产生以下条目:
2011-09-30 09:35 PDT AWS::RDS::DBInstance MyDB UPDATE_COMPLETE
2011-09-30 09:35 PDT AWS::RDS::DBInstance MyDB UPDATE_IN_PROGRESS
当 CloudFormation 报告已开始更新资源时,将会记录一个 UPDATE_IN_PROGRESS
事件。在资源创建成功时,将记录 UPDATE_COMPLETE
事件。
CloudFormation 成功更新堆栈时,您会看到以下事件:
2011-09-30 09:35 PDT AWS::CloudFormation::Stack MyStack
UPDATE_COMPLETE
重要
在堆栈更新操作期间,如果 CloudFormation 需要替换现有资源,它会首先创建一个新资源,然后删除旧资源。但是,在某些情况下,CloudFormation 可能无法删除旧资源(例如,当用户不具有删除给定类型的资源的权限时)。
CloudFormation 会尝试删除旧资源三次。如果 CloudFormation 无法删除旧资源,其会将旧资源从堆栈中移除并继续更新堆栈。堆栈更新完成后,CloudFormation 会发出 UPDATE_COMPLETE
堆栈事件,但同时会包含一个 StatusReason
,以说明无法删除一个或多个资源。CloudFormation 还会针对特定资源发布一个 DELETE_FAILED
事件,以及相应的 StatusReason
,以详细说明 CloudFormation 未能删除资源的原因。
旧资源仍然存在并会继续产生费用,但无法再通过 CloudFormation 进行访问。要删除旧资源,请使用基础服务的控制台或 API 直接访问旧资源。
对于已从堆栈模板中移除的资源也是如此,因此将在堆栈更新期间从堆栈中将它们删除。
资源更新失败时生成的事件
如果资源更新失败,CloudFormation 将报告一个包含失败原因的 UPDATE_FAILED
事件。例如,假设您的更新模板指定了资源不支持的属性更改,如缩减 AWS::RDS::DBInstance 资源的 AllocatedStorage
大小,则将看到与以下类似的事件:
2011-09-30 09:36 PDT AWS::RDS::DBInstance MyDB UPDATE_FAILED Size cannot be less than current size; requested: 5; current: 10
2011-09-30 09:35 PDT AWS::RDS::DBInstance MyDB UPDATE_IN_PROGRESS
如果资源更新失败,CloudFormation 会将升级期间更新的所有资源回滚到更新前的配置。下面列出了您将在更新回滚期间看到的事件示例:
2011-09-30 09:38 PDT AWS::CloudFormation::Stack MyStack
UPDATE_ROLLBACK_COMPLETE
2011-09-30 09:38 PDT AWS::RDS::DBInstance MyDB UPDATE_COMPLETE
2011-09-30 09:37 PDT AWS::RDS::DBInstance MyDB UPDATE_IN_PROGRESS
2011-09-30 09:37 PDT AWS::CloudFormation::Stack MyStack
UPDATE_ROLLBACK_IN_PROGRESS The following resource(s) failed to update: [MyDB]