cdk deploy - AWS Cloud Development Kit (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。

类型:字符串

必需:否

Options

有关适用于所有 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

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

--force, -f BOOLEAN

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

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

默认值false

--help, -h BOOLEAN

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

--hotswap BOOLEAN

Hotswap 部署可加快开发速度。如果可能,此选项会尝试执行更快的 hotswap 部署。例如,如果您在 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 Step Functions 状态机的定义变更。

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

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

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

  • AWS AppSync 解析器和函数的 VTL 映射模板发生了变化。

  • AWS AppSync GraphQLAPI 的架构变更。

作为热交换部署的一部分,支持使用某些 CloudFormation 内部函数。其中包括:

  • Ref

  • Fn::GetAtt— 仅部分支持。有关支持的资源和属性,请参阅此实现

  • Fn::ImportValue

  • Fn::Join

  • Fn::Select

  • Fn::Split

  • Fn::Sub

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

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

  • 此选项被认为是实验性的,将来可能会有重大变化。

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

默认值false

--hotswap-fallback BOOLEAN

此选项类似于--hotswap。不同之处在于,如果检测到需要完全 CloudFormation 部署的更改,则--hotswap-fallback会回退到执行完整部署。

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

默认值false

--ignore-no-stacks BOOLEAN

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

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

默认值false

--logs BOOLEAN

在标准输出 (stdout) 中显示选定堆栈中所有资源的所有事件的 Amazon CloudWatch 日志。

此选项仅与兼容--watch

默认值true

--method, -m STRING

配置方法以执行部署。

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

  • direct— 不要创建更改集。相反,请立即应用更改。这通常比创建更改集要快,但会丢失进度信息。

  • prepare-change-set— 创建更改集但不执行部署。如果您有外部工具可以检查变更集,或者您有变更集的批准流程,则此功能非常有用。

有效值: change-set, direct, prepare-change-set

默认值change-set

--notification-arns ARRAY

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

--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" }

有效值barevents

默认值bar

--require-approval STRING

指定哪些对安全敏感的更改需要手动批准。

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

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

  • never— 不需要批准。

有效值: any-change, broadening, never

默认值broadening

--rollback BOOLEAN

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

指定false以停用此行为。如果资源创建或更新失败,CDK CLI 将保留在此之前所做的更改并返回。在快速迭代的开发环境中,这可能会有所帮助。

对于--rollback=false,你可以使用--no-rollback-R

注意

何时false,导致资源替换的部署将始终失败。您只能将此选项值用于更新或创建新资源的部署。

默认值true

--toolkit-stack-name STRING

现有 CDK 工具包堆栈的名称。

此选项仅适用于使用传统合成的 CDK 应用程序。

--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'