使用 Express Mode 更快地部署 AWS CloudFormation 堆栈
借助 CloudFormation Express Mode,您可以在 CloudFormation 应用资源配置后立即完成堆栈操作,无需等待资源完全稳定。在迭代开发工作流程中,使用 Express Mode 可以更快地创建、更新和删除堆栈。
Express Mode 适用于所有现有的 CloudFormation 模板。您无需进行任何模板更改即可使用 Express Mode。
主题
何时使用 Express Mode
在开发和迭代工作流程中,当速度比等待资源完全稳定更为重要时,可使用 Express Mode。在以下情况下,可使用 Express Mode:
-
在开发过程中,您需要对模板更改进行迭代。
-
您希望更快地获得有关资源配置是否有效的反馈。
-
在继续操作之前,您无需等待资源完全投入运行。
对于生产环境部署,若您需要在确认资源已完全稳定并正常运行后才将部署视为完成,可使用默认部署模式。
Express Mode 的工作原理
在默认部署模式下,CloudFormation 会等待每个资源达到完全稳定的状态,然后再将该资源报告为“已完成”。例如,在创建 Amazon EC2 实例时,CloudFormation 会等待该实例进入 running 状态。
在 Express Mode 下,CloudFormation 通常会在用于创建、更新或删除资源的 API 调用成功后,立即将该资源操作视为已完成。在大多数情况下,CloudFormation 不会等待资源达到最终运行状态。
这意味着在 Express Mode 下的堆栈操作完成后:
-
资源可能仍在初始化或传播更改。
-
资源可能尚未准备好处理流量或接受连接。
-
删除操作可能仍在进行中。
CloudFormation 在 Express Mode下如何处理依赖关系
Express Mode 会遵循模板中定义的资源依赖关系。如果某个资源引用了另一个资源的 ID 或属性(通过 Ref 或 Fn::GetAtt),CloudFormation 会在启动被引用资源之前,确认该资源的配置已应用完毕。如果某个依赖资源因被引用的资源尚未就绪而遇到临时故障,CloudFormation 会重试该操作。
彼此之间没有依赖关系的资源可以并行执行。
Express Mode 不会改变资源的依赖顺序。该顺序会在堆栈操作报告“完成”时发生变化。
Express Mode 入门
您可以将 Express Mode 与 AWS Command Line Interface (AWS CLI)、AWS Cloud Development Kit (AWS CDK) (AWS CDK)、CloudFormation 控制台和更改集一起使用。以下各节介绍了如何通过每种方法启用 Express Mode。
将 Express Mode 与 AWS CLI 结合使用
要在将 Express Mode 与 AWS CLI 结合使用,请将 --deployment-config 参数添加到您的堆栈操作命令中。
使用 Express Mode 来创建堆栈
以下命令使用 Express Mode 来创建堆栈:
aws cloudformation create-stack --stack-namemy-stack\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS"}'
使用 Express Mode 来更新堆栈
以下命令使用 Express Mode 来更新堆栈:
aws cloudformation update-stack --stack-namemy-stack\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS"}'
使用 Express Mode 来删除堆栈
以下命令使用 Express Mode 来删除堆栈:
aws cloudformation delete-stack --stack-namemy-stack\ --deployment-config '{"mode": "EXPRESS"}'
将 Express Mode 与 AWS CDK 结合使用
要将 Express Mode 与 AWS Cloud Development Kit (AWS CDK) (AWS CDK) 结合使用,请在 cdk deploy 命令中使用 --express 标志:
cdk deploy --express
将 Express Mode 与 AWS SAM 结合使用
要将 Express Mode 与 AWS SAM CLI 结合使用,请在您的部署或同步命令中添加 --express 标志:
sam deploy --express
sam sync --express
要在项目配置中保留该设置,请使用 --save-params:
sam deploy --express --save-params
这会将 express = true 保存到您的 samconfig.toml 文件中,以便后续部署时自动使用 Express Mode。
启用 Express Mode 后,AWS SAM CLI 会将部署配置传递给 CloudFormation。--disable-rollback 标志控制部署配置中的回滚行为。
将 Express Mode 与控制台结合使用
在 CloudFormation 控制台中创建或更新堆栈时,您可以在配置堆栈选项步骤中启用 Express Mode。在“部署选项”下,将部署模式选为“Express”。
将 Express Mode 与更改集结合使用
您可以在创建更改集时指定部署配置,从而将 Express Mode 与更改集结合使用:
aws cloudformation create-change-set --stack-namemy-stack\ --change-set-namemy-change-set\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS"}'
当您执行更改集时,CloudFormation 会应用在创建更改集时指定的 Express Mode 部署配置。
Express Mode 下的回滚行为
当您使用 Express Mode 时,CloudFormation 会默认禁用回滚功能。如果资源操作失败,CloudFormation 不会自动回滚所做的更改。
要在使用 Express Mode 时重新启用回滚,请在 --deployment-config 参数中将 disableRollback 设置为 false:
aws cloudformation create-stack --stack-namemy-stack\ --template-bodyfile://my-template.yaml\ --deployment-config '{"mode": "EXPRESS", "disableRollback": false}'
Express Mode 和嵌套堆栈
当您在父堆栈上使用“Express Mode”时,该设置会传播到层次结构中的所有嵌套堆栈。您不需要为每个嵌套堆栈分别指定 Express Mode。根堆栈及其嵌套堆栈中的所有资源,一旦其配置被应用,便立即完成。
资源就绪性注意事项
Express Mode 会在资源达到完全稳定状态之前就完成资源操作,因此任何资源都可能需要额外的时间才能完全准备好处理流量或完成跨区域传播。下表通过不同资源类型的示例,说明了您可以预期的资源行为类型。这些示例仅供说明,并不代表所支持资源的完整列表。
| 资源类型 | 操作 | 就绪行为 |
|---|---|---|
| Amazon CloudFront 分配 | 创建/更新 | 配置被应用后,分发可能需要几分钟才能在全球范围内部署完成。 |
| Amazon EC2 实例 | 创建 | 堆栈操作完成后,实例可能仍在初始化中(运行用户数据脚本、状态检查)。 |
| AWS Lambda 函数 | 删除 | 删除操作报告“完成”后,函数资源可能仍在进行清理。 |
| Amazon Elastic Container Service (Amazon ECS) 服务 | 创建/更新 | 在堆栈操作完成后,服务任务可能仍在启动中,或正进入稳定状态。 |
不支持的功能和限制
以下功能和服务在 Express Mode 下不受支持:
- CloudFormation StackSets
-
CloudFormation 不支持将 Express Mode 与 StackSets 操作结合使用。
以下资源在 Express Mode 下具有特定的行为:
- 自定义资源
-
自定义资源(包括
AWS::CloudFormation::CustomResource和Custom::*资源)遵循其默认行为。即使在 Express Mode 下,CloudFormation 也会等待自定义资源发送响应信号,才会将该操作视为“完成”。要防止运行缓慢或卡住的自定义资源延迟快速迭代的工作流,请使用ServiceTimeout属性来设置最大等待时间。有关更多信息,请参阅 响应超时。
与 AWS CDK 热交换部署的对比
下表将 Express Mode 与 AWS CDK 热交换部署进行对比。
| 功能 | Express Mode | AWS CDK 热交换 |
|---|---|---|
| 部署机制 | 所有资源操作均使用 CloudFormation | 绕过 CloudFormation 并直接调用服务 API |
| 模板兼容性 | 适用于所有现有的 CloudFormation 模板 | 支持有限的资源类型 |
| 堆栈状态 | 堆栈状态与模板保持一致 | 堆栈状态可能会偏离模板 |
| 回滚支持 | 支持回滚(默认禁用) | 不支持回滚 |
| 资源覆盖范围 | 所有 CloudFormation 资源类型 | 有限的资源类型(AWS Lambda, Amazon ECS、AWS Step Functions 等) |
| 推荐用途 | 开发和迭代工作流 | 仅使用受支持资源的开发工作流 |
相关资源
-
《AWS CloudFormation API 参考》中的 CreateStack。