AWS CloudFormation 堆栈创建过程优化
AWS 通过优化 AWS CloudFormation 的堆栈创建过程,显著提升了其速度。这一优化通过将资源创建过程分为两个阶段(创建和稳定)来实现,从而允许更早地创建堆栈中的其他资源。该变更已应用于所有区域,且无需用户采取任何操作。
原有流程的问题
在优化前,AWS CloudFormation 的资源调配过程将所有任务合并为一个步骤。对于堆栈中的每个资源,CloudFormation 会在调配过程开始时发出 CREATE_IN_PROGRESS 事件,在结束时发出 CREATE_COMPLETE 事件。然而,在内部,CloudFormation 会请求相关服务创建资源,然后等待资源准备就绪(创建并稳定)。这种策略确保了所有依赖资源在创建新资源之前都已准备就绪,但总是等待稳定过程导致了不必要的延迟,使得堆栈创建时间变长。
优化后的策略
优化后的策略将资源创建(从 AWS 服务请求新资源)和资源稳定(等待资源准备就绪)分为两个独立的阶段。一旦创建阶段完成,CloudFormation 就会乐观地开始创建堆栈中的其他资源。此外,新策略还引入了重试机制,如果资源创建失败,将在依赖资源的稳定阶段完成后重试。
依赖类型的影响
CloudFormation 根据资源之间的依赖类型选择合适的调配策略。对于隐式依赖(使用内建函数如 Fn::GetAtt 和 Ref 的资源),将采用新的优化策略。而对于显式依赖(使用 DependsOn 属性的资源),则继续使用包含资源稳定过程的原有策略,以确保资源准备就绪。
新事件引入
优化后,CloudFormation 引入了一个新的 CONFIGURATION_COMPLETE 事件,该事件在资源调配的创建阶段完成后发出。该事件不仅用于内部协调堆栈调配,还可以被客户端直接使用,以在不必要进行资源一致性检查的情况下加速进一步资源或堆栈的创建,例如在验证预生产堆栈配置时。
总结
通过将资源创建和稳定过程分离,并引入新的 CONFIGURATION_COMPLETE 事件和重试机制,AWS 显著提升了 CloudFormation 的堆栈创建速度。这一优化使得资源调配更加高效,同时保持了资源依赖关系的完整性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。