View a markdown version of this page

cdk deploy - AWS 云开发套件 (AWS CDK) v2

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

cdk deploy

部署一个或多个 AWS CDK 会堆叠到你的 AWS 环境。

在部署期间,CDK CLI 将输出进度指标,类似于从中观察到的进度指标 AWS CloudFormation 控制台。

如果 AWS 环境未启动,只有没有资产且合成模板低于 51,200 字节的堆栈才能成功部署。

用量

$ cdk deploy <arguments> <options>

参数

CDK 堆栈 ID

应用程序中要部署的 CDK 堆栈的构造 ID。

类型:字符串

必需:否

选项

有关适用于所有 CDK CLI 命令的全局选项的列表,请参阅全局选项。

--all <BOOLEAN>

部署 CDK 应用程序中的所有堆栈。

默认值:false

--asset-parallelism <BOOLEAN>

指定是否并行构建和发布资产。

--asset-prebuild <BOOLEAN>

指定是否在部署第一个堆栈之前构建所有资产。此选项对于 Docker 构建失败很有用。

默认值:true

--build-exclude, -E <ARRAY>

请勿使用给定 ID 重建资产。

可以在单个命令中多次指定此选项。

默认值:[]

--change-set-name <STRING>

的名字 AWS CloudFormation 将设置更改为创建。

此选项与 --method='direct' 不兼容。

--concurrency <NUMBER>

并行部署多个堆栈,同时考虑堆栈间的依赖项。使用此选项可以加快部署速度。你仍然必须考虑在内 AWS CloudFormation 和其他 AWS 账户速率限制。

提供一个数字来指定要执行的最大同时部署数(依赖项允许)。

默认值:1

--exclusively, -e <BOOLEAN>

仅部署请求的堆栈,不包括依赖项。

--express <BOOLEAN>

使用进行部署 CloudFormation 快捷模式。快速模式允许通过以下方式更快地部署 CloudFormation 通过尽快报告堆栈操作完成即可 CloudFormation 应用资源配置。但是, CloudFormation 无需等待资源稳定即可报告成功。此外,快速模式不会自动执行回滚,如果出现问题,堆栈将处于故障状态。要使用快速模式启用自动回滚,请包括 --rollback 在您的快速模式部署中标记。

有关更多信息,请参阅 快捷模式 在 AWS CloudFormation 用户指南。

注意

快速模式不会等待稳定后才报告成功,也不会在失败时执行自动回滚。我们不建议使用快速模式进行生产部署。快速模式的目标是您在开发应用程序时要执行的迭代部署。

默认值:false

--force, -f <BOOLEAN>

当您部署以更新现有堆栈时,CDK CLI 会将已部署堆栈的模板和标签与即将部署的堆栈进行比较。如果未检测到更改,则 CDK CLI 将跳过部署。

要覆盖此行为并始终部署堆栈,即使未检测到任何更改,也请使用此选项。

默认值:false

--help, -h <BOOLEAN>

显示 cdk deploy 命令的命令参考信息。

--hotswap <BOOLEAN>

热交换部署,用于加快开发速度。如果可能,此选项会尝试执行更快的热交换部署。例如,如果您在 CDK 应用程序中修改 Lambda 函数的代码,CDK CLI 将直接通过服务 API 更新资源,而不是执行 CloudFormation 部署。

如果 CDK CLI 检测到不支持热交换的更改,则将忽略这些更改并显示一条消息。如果你更喜欢完整表演 CloudFormation 部署作为后备方案,使用 --hotswap-fallback 取而代之。

CDK CLI 使用您当前的 AWS 执行 API 调用的证书。即使 @aws-cdk/core:newStyleStackSynthesis 功能标志设置为 true,其也不会承担引导堆栈中的角色。这些角色没有必要的更新权限 AWS 直接使用资源,无需使用 CloudFormation。因此,请确保您的凭证用途相同 AWS 说明您正在对其执行热交换部署的堆栈以及它们具有更新资源所必需的 IAM 权限。

热交换目前支持以下更改:

  • Lambda 函数的代码资产(包括 Docker 映像和内联代码)、标签更改和配置更改(仅支持描述和环境变量)。

  • Lambda 版本和别名更改。

  • 的定义变更 AWS 步进函数状态机。

  • Amazon ECS 服务的容器资产更改。

  • Amazon S3 存储桶部署的网站资产更改。

  • 的来源和环境变化 AWS CodeBuild 项目。

  • 的 VTL 映射模板更改 AWS AppSync 解析器和函数。

  • 的架构更改 AWS AppSync GraphQL API。

  • 亚马逊 API 网关的 REST API、部署和方法变更。

  • 亚马逊 API Gateway V2 的 API 和集成变更。

  • 亚马逊 Bedrock 代理的配置更改。

  • 亚马逊 Bedrock 的配置变更 AgentCore 运行时间

  • 亚马逊的规则变更 EventBridge。

  • 亚马逊 DynamoDB 表和全局表的配置更改。

  • 亚马逊 SQS 队列的配置更改。

  • 亚马逊的警报、复合警报和控制面板变更 CloudWatch。

某些用法 CloudFormation 作为热交换部署的一部分,支持固有函数。这些方法包括:

  • Ref

  • Fn::GetAtt — 仅部分支持,使用云控制 API 和自定义实现的组合。请参阅支持的资源列表 云控制 API 和 这个实现 获取支持资源的完整列表。

  • Fn::ImportValue

  • Fn::Join

  • Fn::Select

  • Fn::Split

  • Fn::Sub

此选项还与嵌套堆栈兼容。

注意
  • 此选项故意引入漂移 CloudFormation 堆栈以加快部署。因此,仅将其用于开发目的。请勿将该选项用于生产部署。

  • 某些参数的默认值可能与热交换参数不同。例如,Amazon ECS 服务的最低运行正常百分比目前将设置为 0。如果发生这种情况,请相应地检查来源。

  • 在表演时 CloudFormation 热交换部署后部署,使用 cdk deploy --revert-drift 使用漂移感知变更集进行部署,并协调热交换带来的任何偏差。

默认值:false

--hotswap-fallback <BOOLEAN>

此选项类似于 --hotswap。区别在于 --hotswap-fallback 会回去表演 CloudFormation 如果检测到需要的更改,则进行部署。

有关此选项的更多信息,请参阅 --hotswap。

默认值:false

--ignore-no-stacks <BOOLEAN>

即使 CDK 应用程序不包含任何堆栈,也要执行部署。

此选项在以下情况中很有用:应用程序可能具有多个环境,例如 dev 和 prod。开始开发时,您的 prod 应用程序可能没有任何资源,或者资源可能被注释掉。这将导致部署错误,并显示一条消息,指示该应用程序没有堆栈。使用 --ignore-no-stacks 来绕过此错误。

默认值:false

--import-existing-resources <BOOLEAN>

导入现有的、非托管的 AWS CloudFormation 来自你的资源 AWS 账户。

当你使用这个选项时,你合成的资源 AWS CloudFormation 与同一账户中的现有非托管资源具有相同自定义名称的模板将导入到您的堆栈中。

您可以使用此选项将现有资源导入到新堆栈中,也可以导入到现有堆栈中。

您可以在同一 cdk deploy 命令中导入现有资源并部署新资源。

要了解有关自定义名称的更多信息,请参阅 姓名类型 在 AWS CloudFormation 用户指南。

要了解有关 ImportExistingResources CloudFormation 参数,请参阅 AWS CloudFormation 使用的新参数简化资源导入 ChangeSets。

有关使用此选项的更多信息,请参阅 导入现有资源 在 aws-cdk-cli GitHub 知识库。

--logs <BOOLEAN>

显示亚马逊 CloudWatch 登录标准输出 (stdout) 用于来自所选堆栈中所有资源的所有事件。

此选项仅与 --watch 兼容。

默认值:true

--method, -m <STRING>

配置执行部署的方法。

  • change-set:默认方法。CDK CLI 创建了一个 CloudFormation 使用将要部署的更改进行变更集,然后执行部署。

  • direct:不创建更改集。相反,立即应用更改。这通常比创建更改集更快,但 CLI 输出中会丢失部署进度详细信息。

  • prepare-change-set:创建更改集但不执行部署。如果您有检查更改集的外部工具,或者您有更改集的审批流程,则此方法会非常有用。使用 execute-change-set 执行准备好的变更集。

  • execute-change-set — 执行先前使用创建的变更集 prepare-change-set。更改集名称默认为 cdk-deploy-change-set,或者你可以使用以下命令指定自定义名称 --change-set-name。

有效值:change-set、direct、execute-change-set、prepare-change-set

默认值:change-set

--monitoring-time-minutes <NUMBER>

那段时间的分钟数 CloudFormation 在部署完成后,在清理旧资源之前,继续监控回滚触发警报。该值必须是介于 0 到 180 之间的整数。

必须将此选项与 --rollback-trigger-alarm-arns 。

默认值: 0 (CloudFormation 仅在部署过程中监控警报)

--notification-arns <ARRAY>

亚马逊 SNS 主题的 ARN CloudFormation 将通知堆栈相关事件。

--outputs-file, -O <STRING>

部署中堆栈输出的写入路径。

部署后,堆栈输出将以 JSON 格式写入指定的输出文件。

您可以在项目的 cdk.json 文件中或本地开发计算机上的 ~/.cdk.json 中配置此选项:

{ "app": "npx ts-node bin/myproject.ts", // ... "outputsFile": "outputs.json" }

如果部署了多个堆栈,则输出将写入同一个输出文件,并按表示堆栈名称的键进行组织。

--parameters <ARRAY>

将其他参数传递给 CloudFormation 在部署期间。

该选项接受以下格式的数组:STACK:KEY=VALUE。

  • STACK:与参数关联的堆栈名称。

  • KEY:堆栈中的参数名称。

  • VALUE:部署时要传递的值。

如果未提供堆栈名称,或者如果提供 * 作为堆栈名称,则参数将应用于所有正在部署的堆栈。如果堆栈未使用该参数,则部署将失败。

参数不会传播到嵌套堆栈。要将参数传递给嵌套堆栈,请使用 NestedStack 构造。

默认值:{}

--previous-parameters <BOOLEAN>

对现有参数使用以前的值。

当此选项设置为 false 时,必须在每次部署中指定所有参数。

默认值:true

--progress <STRING>

配置 CDK CLI 显示部署进度的方式。

  • bar:以进度条的形式显示堆栈部署事件,其中包含当前正在部署的资源的事件。

  • events — 提供完整的历史记录,包括所有历史记录 CloudFormation 事件。

您也可以在项目的 cdk.json 文件中或本地开发计算机上的 ~/.cdk.json 中配置此选项:

{ "progress": "events" }

有效值:bar、events

默认值:bar

--require-approval <STRING>

指定哪些更改需要手动批准。

  • any-change:对堆栈进行任何更改都需要手动批准。

  • broadening:如果更改涉及扩大权限或安全组规则,则需要手动批准。

  • never:无需批准。

有效值: any-change, broadening, never

默认值:broadening

--revert-drift

使用漂移感知变更集进行部署。这将创建一个变更集 CloudFormation的 REVERT_DRIFT 部署模式,该模式可检测由于带外更改而偏离其模板定义的资源,并将其恢复到模板中定义的所需状态。

参见 关于漂移感知变更集的 Cloudformation 文档 以获取有关它们工作原理的更多信息。

默认值:false

--rollback | --no-rollback, -R

在部署期间,如果资源创建或更新失败,则部署将在 CDK CLI 返回之前回滚到最新的稳定状态。在此之前所做的所有更改都将被撤消。将删除已创建的资源,并且将回滚所做的更新。

指定 --no-rollback 可以关闭这种行为。如果资源创建或更新失败,则 CDK CLI 将保留在此之前所做的更改并返回。这会导致部署处于失败、暂停状态。在这里,您可以更新代码并再次尝试部署。在快速迭代的开发环境中,这可能会有所帮助。

如果使用 --no-rollback 执行的部署失败,并且您决定要回滚该部署,则可以使用 cdk rollback 命令。有关更多信息,请参阅 cdk rollback。

注意

使用 --no-rollback,引起资源替换的部署将始终失败。您只能将此选项值用于更新或创建新资源的部署。

默认值:--rollback

--rollback-trigger-alarm-arns <ARRAY>

的 ARN CloudWatch 警报那个 CloudFormation 部署期间的监视器。如果有任何警报响起 ALARM 州, CloudFormation 回滚部署。您最多可以指定 5 个警报。警报被视为指标警报 (AWS::CloudWatch::Alarm)。

可以在单个命令中多次指定此选项。

要清除之前在堆栈上配置的所有回滚触发器,请传递单个值 none。

控制多长时间 CloudFormation 部署完成后继续监控这些警报,使用 --monitoring-time-minutes 。

--toolkit-stack-name <STRING>

现有 CDK Toolkit 堆栈的名称。

默认情况下, cdk bootstrap 部署名为的堆栈 CDKToolkit 进入指定的 AWS 环境。使用此选项可为引导堆栈提供不同的名称。

CDK CLI 使用此值来验证引导堆栈版本。

--watch <BOOLEAN>

持续观察 CDK 项目文件,当在检测到更改时自动部署指定的堆栈。

默认情况下,此选项为 --hotswap。

此选项具有等效的 CDK CLI 命令。有关更多信息,请参阅 cdk watch。

示例

部署名为的堆栈 MyStackName

$ cdk deploy MyStackName --app='node bin/main.js'

在应用程序中部署多个堆栈

使用 cdk list 列出您的堆栈:

$ cdk list CdkHelloWorldStack CdkStack2 CdkStack3

要部署所有堆栈,请使用 --all 选项:

$ cdk deploy --all

要选择部署哪些堆栈,请提供堆栈名称作为参数:

$ cdk deploy CdkHelloWorldStack CdkStack3

部署管线堆栈

使用 cdk list 将堆栈名称显示为路径,显示它们在管线层次结构中的位置:

$ cdk list PipelineStack PiplelineStack/Prod PipelineStack/Prod/MyService

使用 --all 选项或通配符 * 来部署所有堆栈。如果您有如上所述的堆栈层次结构,则 --all 和 * 将仅匹配顶层的堆栈。要匹配层次结构中的所有堆栈,请使用 **。

您可以将这些模式结合起来。以下示例部署了 Prod 阶段的所有堆栈:

$ cdk deploy PipelineStack/Prod/**

部署时传递参数

在 CDK 堆栈中定义参数。以下是为 Amazon SNS 主题创建名为 TopicNameParam 的参数的示例:

new sns.Topic(this, 'TopicParameter', { topicName: new cdk.CfnParameter(this, 'TopicNameParam').value.toString() });

要提供参数值 parameterized,请运行以下命令:

$ cdk deploy --parameters "MyStackName:TopicNameParam=parameterized"

您可以使用 --force 选项来覆盖参数值。以下是覆盖以前部署中主题名称的示例:

$ cdk deploy --parameters "MyStackName:TopicNameParam=parameterName" --force

部署后将堆栈输出写入文件

在 CDK 堆栈文件中定义输出。以下是为函数 ARN 创建输出的示例:

const fn = new lambda.Function(this, "fn", { handler: "index.handler", code: lambda.Code.fromInline(`exports.handler = \${handler.toString()}`), runtime: lambda.Runtime.NODEJS_LATEST }); new cdk.CfnOutput(this, 'FunctionArn', { value: fn.functionArn, });

部署堆栈并将输出写入 outputs.json:

$ cdk deploy --outputs-file outputs.json

以下是部署后 outputs.json 的示例:

{ "MyStack": { "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MyStack-fn5FF616E3-G632ITHSP5HK" } }

在此示例中,键 FunctionArn 对应于 CfnOutput 实例的逻辑 ID。

以下是部署多个堆栈时,部署后的 outputs.json 示例:

{ "MyStack": { "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MyStack-fn5FF616E3-G632ITHSP5HK" }, "AnotherStack": { "VPCId": "vpc-z0mg270fee16693f" } }

修改部署方法

要在不使用更改集的情况下更快地部署,请使用 --method='direct':

$ cdk deploy --method='direct'

要创建更改集但不进行部署,请使用 --method='prepare-change-set'。默认情况下,将创建一个名为 cdk-deploy-change-set 的更改集。如果先前存使用此名称的更改集,则将覆盖该更改集。如果未检测到任何更改,仍会创建一个空的更改集。

您也可以为更改集命名。以下是示例:

$ cdk deploy --method='prepare-change-set' --change-set-name='MyChangeSetName'