了解 CloudFormation 堆栈创建事件
在堆栈部署期间,将会发生多个事件来创建、配置和验证堆栈模板中定义的资源。了解这些事件有助您优化堆栈创建过程并简化部署。
-
资源创建事件 – 当每个资源的创建过程启动时,都会设置一个
CREATE_IN_PROGRESS
事件的状态。该事件指示正在预置该资源。 -
最终一致性检查 – 在堆栈创建过程中,很大一部分时间都用于对堆栈所创建资源执行最终一致性检查。在此阶段,服务会执行内部一致性检查,以确保资源完全正常运行并符合各项 Amazon Web Services 服务所定义的服务稳定性标准。
-
配置完成事件 – 当每个资源完成预置的最终一致性检查阶段后,将会设置
CONFIGURATION_COMPLETE
事件的详细状态。 -
资源创建完成事件 – 按规定创建和配置好资源,并且配置与模板中指定的内容一致后,将会设置
CREATE_COMPLETE
事件的状态。
在不需要资源最终一致性检查的情况下,例如验证预生产堆栈配置或跨堆栈预调配,您可以利用 CONFIGURATION_COMPLETE
事件来简化堆栈创建过程。您可以通过多种方式来使用此事件。例如,您可以将其用作视觉信号,以跳过等待资源的过程或堆栈一致性检查完成的过程。或者,您可以使用持续集成和持续交付(CI/CD)来创建自动机制,以触发其他操作。
重要
虽然利用 CONFIGURATION_COMPLETE
事件可以加快堆栈创建时间,但您也应该注意其利弊。首先,只有支持偏差检测的少部分资源类型才支持该功能。有关支持偏差检测的资源类型的列表,请参阅 资源类型支持。这种方法可能不适用于所有场景,尤其是资源需要彻底的最终一致性检查以确保整个云环境(例如,在生产环境)完全准备就绪的情况。建议您仔细评测您的部署要求,以及每种资源的一致性检查的重要程度。利用 CONFIGURATION_COMPLETE
事件来优化部署速度,同时不影响基础设施的完整性和可靠性。有关如何充分利用此事件并了解其对您的特定应用场景的影响的指导,请参阅详情博客《我们如何通过乐观的稳定操作加快 Amazon CloudFormation 部署速度》https://www.amazonaws.cn/blogs/devops/how-we-sped-up-aws-cloudFormation-deployments-with-optimistic-stabilization/
由于不能保证会设置 CONFIGURATION_COMPLETE
事件,因此任何使用该事件的场景都应准备好在未设置任何 CONFIGURATION_COMPLETE
事件时处理 CREATE_COMPLETE
事件。

堆栈部署开始时,AWS::ECR::Repository
和 AWS::ECS::Cluster
资源都会启动创建过程(ResourceStatus
= CREATE_IN_PROGRESS
)。当 AWS::ECR::Repository
资源类型开始最终一致性检查(DetailedStatus
= CONFIGURATION_COMPLETE
)后,AWS::ECS::TaskDefinition
资源就可以开始创建过程了。同样,一旦 AWS::ECS::TaskDefinition
资源开始最终一致性检查,AWS::ECS::Service
资源就会开始创建过程。
CREATE_IN_PROGRESS
和 CREATE_COMPLETE
事件
-
[堆栈]:
CREATE_IN_PROGRESS
-
[资源]:ECR 存储库
CREATE_IN_PROGRESS
-
[资源]:ECS 集群
CREATE_IN_PROGRESS
-
[资源]:ECR 存储库
CREATE_IN_PROGRESS
、CONFIGURATION_COMPLETE
-
[资源]:ECS 任务定义
CREATE_IN_PROGRESS
-
[资源]:ECS 集群
CREATE_IN_PROGRESS
、CONFIGURATION_COMPLETE
-
[资源]:ECS 任务定义
CREATE_IN_PROGRESS
、CONFIGURATION_COMPLETE
-
[资源]:ECS 服务
CREATE_IN_PROGRESS
-
[资源]:ECR 存储库
CREATE_COMPLETE
-
[资源]:ECS 集群
CREATE_COMPLETE
-
[资源]:ECS 服务
CREATE_IN_PROGRESS
、CONFIGURATION_COMPLETE
-
[堆栈]:
CREATE_IN_PROGRESS
、CONFIGURATION_COMPLETE
-
[资源]:ECS 任务定义
CREATE_COMPLETE
-
[资源]:ECS 服务
CREATE_COMPLETE
-
[堆栈]:
CREATE_COMPLETE