AWS CDK 工具包(cdk命令) - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK 工具包(cdk命令)

AWS CDK Toolkit(cdk即 CLI 命令)是与您的 AWS CDK 应用程序交互的主要工具。它执行您的应用程序,查询您定义的应用程序模型,并生成和部署由生成的 AWS CloudFormation 模板。 AWS CDK它还提供了其他可用于创建和处理 AWS CDK 项目的功能。本主题包含有关 CDK 工具包的常见用例的信息。

该 AWS CDK 工具包与 Node Package Manager 一起安装。在大多数情况下,我们建议在全球范围内进行安装。

npm install -g aws-cdk # install latest version npm install -g aws-cdk@X.YY.Z # install specific version
提示

如果您经常使用多个版本的 AWS CDK,请考虑在单个 CDK 项目中安装相应版本的 AWS CDK Toolkit。为此,npm install请在命令-g中省略。然后使用npx aws-cdk来调用它。如果存在本地版本,则运行本地版本;如果不存在,则回退到全局版本。

工具包命令

所有 CDK Toolkit 命令都以开头cdk,后面是子命令(listsynthesizedeploy、等)。有些子命令具有等效的较短版本(lssynth、等)。选项和参数按任意顺序跟在子命令之后。

有关所有子命令、选项和参数的说明,请参见AWS CDK CLI 命令参考

指定选项及其值

命令行选项以两个连字符 () -- 开头。一些常用的选项具有以单个连字符开头的单字母同义词(例如,--app具有同义词)。-a AWS CDK Toolkit 命令中选项的顺序并不重要。

所有选项都接受一个值,该值必须位于选项名称之后。该值可以用空格或等号=与名称分隔。以下两个选项是等效的。

--toolkit-stack-name MyBootstrapStack --toolkit-stack-name=MyBootstrapStack

有些选项是标志(布尔值)。您可以指定truefalse作为它们的值。如果您不提供值,则该值将被视为true。您也可以在选项名称前加上前缀no-以暗示false

# sets staging flag to true --staging --staging=true --staging true # sets staging flag to false --no-staging --staging=false --staging false

可以多次指定几个选项 --context --parameters--plugin--tags--trust、、和,以指定多个值。在 CDK Toolkit 帮助中注明这些内容是有[array]键入的。例如:

cdk bootstrap --tags costCenter=0123 --tags responsibleParty=jdoe

内置帮助

该 AWS CDK 工具包已集成帮助。您可以通过发出以下命令来查看有关该实用程序的一般帮助和所提供的子命令列表:

cdk --help

例如deploy,要查看特定子命令的帮助,请在--help标记之前指定该子命令。

cdk deploy --help

显示 AWS CDK 工具包版本的问题cdk version。在请求支持时提供此信息。

版本报告

为了深入了解 AWS CDK 是如何使用的, AWS CDK 应用程序使用的构造是通过使用标识为AWS::CDK::Metadata的资源来收集和报告的。此资源已添加到 AWS CloudFormation 模板中,可以轻松查看。这些信息还可用于使用存在已知安全性或可靠性问题的结构来识别堆栈。 AWS 它还可用于与用户联系以提供重要信息。

注意

在 1.93.0 版本之前, AWS CDK 报告的是合成过程中加载的模块的名称和版本,而不是堆栈中使用的构造。

默认情况下,它们会 AWS CDK 报告堆栈中使用的以下 NPM 模块中构造的使用情况:

  • AWS CDK 核心模块

  • AWS 构造库模块

  • AWS 解决方案构造模块

  • AWS 渲染农场部署套件模块

AWS::CDK::Metadata资源如下所示。

CDKMetadata:
  Type: "AWS::CDK::Metadata"
  Properties:
    Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="

Analytics属性是堆栈中构造的 gzip、base64 编码、前缀编码列表。

要选择退出版本报告,请使用以下方法之一:

  • 使用带有--no-version-reporting参数的cdk命令可以选择退出单个命令。

    cdk --no-version-reporting synth

    请记住, AWS CDK Toolkit 在部署之前会合成新的模板,因此您还应该在cdk deploy命令中--no-version-reporting添加新模板。

  • ./cdk.json或中设置versionReportingfalse ~/.cdk.json。除非您通过在单个命令--version-reporting上指定来选择加入,否则会选择退出。

    { "app": "...", "versionReporting": false }

使用进行身份验证 AWS

您可以通过不同的方式配置对 AWS 资源的编程访问权限,具体取决于环境和可用的 AWS 访问权限。

要选择您的身份验证方法并针对 CDK Toolkit 进行配置,请参阅 AWS SDK 和工具参考指南中的身份验证和访问权限

对于在本地开发的新用户,如果雇主没有向他们提供身份验证方法,推荐的方法是设置 AWS IAM Identity Center。此方法包括安装 AWS CLI 以便于配置和定期登录 AWS 访问门户。如果选择此方法,则在完成 AWS SDK 和工具参考指南中的 IAM Identity Center 身份验证程序后,您的环境应包含以下元素:

  • AWS CLI,用于在运行应用程序之前启动 AWS 访问门户会话。

  • 一种共享 AWSconfig文件,其[default]配置文件包含一组配置值,可以从中引用 AWS CDK。要查找此文件的位置,请参阅《AWS SDK 和工具参考指南》中的共享文件的位置

  • 共享 config 文件设置了 region 设置。这将设置 AWS 请求使用的默认 AWS 区域 AWS CDK 和 CDK 工具包。

  • CDK Toolkit 使用配置文件的 SSO 令牌提供程序配置来获取凭证,然后再向发送请求。 AWS该sso_role_name值是与 IAM Identity Center 权限集关联的 IAM 角色,应允许访问您的应用程序中 AWS 服务 使用的权限。

    以下示例 config 文件展示了使用 SSO 令牌提供程序配置来设置的默认配置文件。配置文件的 sso_session 设置是指所指定的 sso-session。该sso-session部分包含启动 AWS 访问门户会话的设置。

    [default] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole region = us-east-1 output = json [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://provided-domain.awsapps.com/start sso_registration_scopes = sso:account:access

启动 AWS 访问门户会话

在访问之前 AWS 服务,您需要对 CDK Toolkit 进行有效的 AWS 访问门户会话,才能使用 IAM Identity Center 身份验证来解析证书。根据您配置的会话时长,您的访问权限最终将过期,CDK Toolkit 将遇到身份验证错误。在中运行以下命令登录 AWS CLI AWS 访问门户。

aws sso login

如果您的 SSO 令牌提供程序配置使用命名配置文件而不是默认配置文件,则命令为aws sso login --profile NAME。使用--profile选项或AWS_PROFILE环境变量发出cdk命令时,也要指定此配置文件。

要测试是否已有活动会话,请运行以下 AWS CLI 命令。

aws sts get-caller-identity

对此命令的响应应该报告共享 config 文件中配置的 IAM Identity Center 账户和权限集。

注意

如果您已经有一个有效的 AWS 访问门户会话并且aws sso login正在运行,则无需提供凭据。

登录过程可能会提示您允许 AWS CLI 访问您的数据。由于 AWS CLI 是在适用于 Python 的 SDK 之上构建的,因此权限消息可能包含botocore名称的变体。

指定区域和其他配置

CDK Toolkit 需要知道您要部署到的 AWS 区域以及如何进行 AWS身份验证。这是部署操作和合成期间检索上下文值所必需的。您的账户和地区共同构成了环境

可以使用环境变量或在配置文件中指定区域。这些变量和文件与其他 AWS 工具(例如和各种 AWS SDK)使用的变量 AWS CLI 和文件相同。CDK 工具包按以下顺序查找此信息。

  • 环境变量 AWS_DEFAULT_REGION

  • 在标准 AWS config文件中定义的命名配置文件,并使用cdk命令上的--profile选项指定。

  • 标准 AWS config文件的[default]部分。

除了在该[default]部分中指定 AWS 身份验证和区域外,您还可以添加一个或多个[profile NAME]部分,其中 NAM E 是配置文件的名称。有关命名配置文件的更多信息,请参阅 AWS SDK 和工具参考指南中的共享配置和凭据文件

标准 AWS config文件位于 ~/.aws/config (macOS/Linux) 或 %USERPROFILE%\.aws\config (Windows)。有关详细信息和备用位置,请参阅 AWS SDK 和工具参考指南中的共享配置和凭据文件的位置

合成过程中会使用您在 AWS CDK 应用程序中使用堆栈的env属性指定的环境。它用于生成特定于环境的 AWS CloudFormation 模板,在部署期间,它会覆盖通过上述方法之一指定的账户或区域。有关更多信息,请参阅 环境

注意

AWS CDK 使用与其他 AWS 工具和软件开发工具包相同的源文件中的凭证,包括。AWS Command Line Interface但是,它们的行为 AWS CDK 可能与这些工具略有不同。它使用引擎盖 AWS SDK for JavaScript 下方。有关为设置凭据的完整详细信息 AWS SDK for JavaScript,请参阅设置凭据

您可以选择使用--role-arn(或-r)选项来指定应用于部署的 IAM 角色的 ARN。此角色必须由所使用的 AWS 账户担任。

指定应用程序命令

CDK Toolkit 的许多功能都需要合成一个或多个 AWS CloudFormation 模板,这反过来又需要运行您的应用程序。 AWS CDK 支持用多种语言编写的程序。因此,它使用配置选项来指定运行应用程序所需的确切命令。可以通过两种方式指定此选项。

首先,也是最常见的,可以使用文件中的app密钥进行指定cdk.json。它位于 AWS CDK 项目的主目录中。使用创建新项目时,CDK 工具包提供了相应的命令。cdk init例如,以下是cdk.json来自一个新 TypeScript 项目的内容。

{ "app": "npx ts-node bin/hello-cdk.ts" }

尝试运行您的应用程序时,CDK Toolkit 会在当前工作目录cdk.json中查找。因此,你可以在项目的主目录中打开一个 shell 来发出 CDK Toolkit 命令。

如果找不到应用程序密钥,CDK Toolkit 还会在~/.cdk.json(即您的主目录中)中./cdk.json查找该密钥。如果您通常使用相同语言的 CDK 代码,则在此处添加 app 命令会很有用。

如果您位于其他目录中,或者要使用中以外的命令运行应用程序cdk.json,请使用--app(或-a)选项进行指定。

cdk --app "npx ts-node bin/hello-cdk.ts" ls

部署时,您还可以将包含合成云程序集的目录(例如)指定为的值。cdk.out --app指定的堆栈是从此目录部署的;应用程序不是合成的。

指定堆栈

许多 CDK Toolkit 命令(例如cdk deploy)都适用于应用程序中定义的堆栈。如果您的应用程序仅包含一个堆栈,那么如果您没有明确指定堆栈,CDK Toolkit 会假设您的意思是那个堆栈。

否则,您必须指定要使用的堆栈。为此,可以在命令行中按 ID 单独指定所需的堆栈。回想一下,ID 是实例化堆栈时第二个参数指定的值。

cdk synth PipelineStack LambdaStack

您也可以使用通配符来指定与模式匹配的 ID。

  • ?匹配任何单个字符

  • *匹配任意数量的字符(*单独匹配所有堆栈)

  • **匹配层次结构中的所有内容

您也可以使用该--all选项来指定所有堆栈。

如果你的应用程序使用 CDK Pipelines,CDK 工具包会将你的堆栈和阶段理解为一个层次结构。此外,该--all选项和*通配符仅匹配顶级堆栈。要匹配所有堆栈,请使用**。也可以**用来表示特定层次结构下的所有堆栈。

使用通配符时,请用引号将模式括起来,或者使用转义通配符。\如果不这样做,你的 shell 可能会尝试将模式扩展为当前目录中的文件名。充其量,这不会达到你的预期;在最坏的情况下,你可以部署你本来不打算部署的堆栈。在 Windows 上,这并不是绝对必要的,因为这cmd.exe不会扩展通配符,但还是不错的做法。

cdk synth "*Stack" # PipelineStack, LambdaStack, etc. cdk synth 'Stack?' # StackA, StackB, Stack1, etc. cdk synth \* # All stacks in the app, or all top-level stacks in a CDK Pipelines app cdk synth '**' # All stacks in a CDK Pipelines app cdk synth 'PipelineStack/Prod/**' # All stacks in Prod stage in a CDK Pipelines app
注意

您指定堆栈的顺序不一定是堆栈的处理顺序。在决定堆栈的处理顺序时, AWS CDK Toolkit 会考虑堆栈之间的依赖关系。例如,假设一个堆栈使用另一个堆栈产生的值(例如第二个堆栈中定义的资源的 ARN)。在这种情况下,由于这种依赖关系,第二个堆栈在第一个堆栈之前合成。您可以使用堆栈的addDependency()方法在堆栈之间手动添加依赖关系。

引导您的环境 AWS

使用 CDK 部署堆栈需要配置特殊的专用 AWS CDK 资源。该cdk bootstrap命令会为您创建必要的资源。只有在部署需要这些专用资源的堆栈时,才需要引导。有关详细信息,请参阅 正在引导

cdk bootstrap

如果在没有参数的情况下发出(如图所示),则该cdk bootstrap命令将合成当前应用程序并启动其堆栈将部署到的环境。如果应用程序包含与环境无关的堆栈,而这些堆栈没有明确指定环境,则会引导默认账户和区域,或者使用指定的环境。--profile

在应用程序之外,您必须明确指定要引导的环境。您也可以这样做来引导未在您的应用程序或本地 AWS 配置文件中指定的环境。必须为指定的账户和地区配置证书(例如在~/.aws/credentials)。您可以指定包含所需凭据的配置文件。

cdk bootstrap ACCOUNT-NUMBER/REGION # e.g. cdk bootstrap 1111111111/us-east-1 cdk bootstrap --profile test 1111111111/us-east-1
重要

部署此类堆栈的每个环境(账户/区域组合)都必须单独引导。

您可能会因为在引导资源中 AWS CDK 存储的内容而产生 AWS 费用。此外,如果您使用-bootstrap-customer-key,则会创建 AWS KMS 密钥,这也会对每个环境产生费用。

注意

默认情况下,早期版本的引导模板创建了 KMS 密钥。为避免收费,请使用重新启动。--no-bootstrap-customer-key

注意

CDK Toolkit v2 不支持 CDK v1 中默认使用的原始引导模板,该模板被称为旧版模板。

重要

现代引导模板可以有效地向--trust列表中的任何 AWS 账户授--cloudformation-execution-policies予隐含的权限。默认情况下,这会扩展对引导账户中任何资源的读取和写入权限。请务必使用您熟悉的策略和可信帐户来配置引导堆栈

创建新应用程序

要创建新应用程序,请为其创建一个目录,然后在目录内发出cdk init

mkdir my-cdk-app cd my-cdk-app cdk init TEMPLATE --language LANGUAGE

支持的语言(语言)有:

代码

Language

typescript

TypeScript

javascript

JavaScript

python

Python

java

Java

csharp

C#

模板是一个可选的模板。如果所需的模板是 app(默认),则可以省略它。可用的模板有:

模板

描述

app(默认)

创建一个空 AWS CDK 应用程序。

sample-app

使用包含亚马逊 SQS 队列和亚马逊 SNS 主题的堆栈创建 AWS CDK 应用程序。

模板使用项目文件夹的名称为新应用程序中的文件和类生成名称。

列出堆栈

要查看 AWS CDK 应用程序中堆栈的 ID 列表,请输入以下等效命令之一:

cdk list cdk ls

如果您的应用程序包含 CDK Pipelines 堆栈,CDK Toolkit 会根据堆栈名称在管道层次结构中的位置将堆栈名称显示为路径。(例如PipelineStackPipelineStack/Prod、和PipelineStack/Prod/MyService。)

如果您的应用程序包含许多堆栈,则可以指定要列出的堆栈的全部或部分堆栈 ID。有关更多信息,请参阅 指定堆栈

添加--long标志以查看有关堆栈的更多信息,包括堆栈名称及其环境(AWS 账户和区域)。

合成堆栈

cdk synthesize命令(几乎总是缩写synth)将应用程序中定义的堆栈合成一个 CloudFormation 模板。

cdk synth # if app contains only one stack cdk synth MyStack cdk synth Stack1 Stack2 cdk synth "*" # all stacks in app
注意

CDK Toolkit 实际上是在大多数操作(例如部署或比较堆栈时)之前运行您的应用程序并合成新的模板。默认情况下,这些模板存储在cdk.out目录中。该cdk synth命令仅打印一个或多个指定堆栈生成的模板。

cdk synth --help有关所有可用选项,请参阅。以下部分将介绍一些最常用的选项。

指定上下文值

使用--context-c选项将运行时上下文值传递给您的 CDK 应用程序。

# specify a single context value cdk synth --context key=value MyStack # specify multiple context values (any number) cdk synth --context key1=value1 --context key2=value2 MyStack

部署多个堆栈时,通常会将指定的上下文值传递给所有堆栈。如果需要,可以通过在上下文值前加上堆栈名称前缀来为每个堆栈指定不同的值。

# different context values for each stack cdk synth --context Stack1:key=value Stack2:key=value Stack1 Stack2

指定显示格式

默认情况下,合成后的模板以 YAML 格式显示。添加标--json志,改为以 JSON 格式显示它。

cdk synth --json MyStack

指定输出目录

添加 --output (-o) 选项,将合成后的模板写入除之外的cdk.out目录。

cdk synth --output=~/templates

部署堆栈

cdk deploy子命令将一个或多个指定的堆栈部署到您的账户。 AWS

cdk deploy # if app contains only one stack cdk deploy MyStack cdk deploy Stack1 Stack2 cdk deploy "*" # all stacks in app
注意

在部署任何内容之前,CDK Toolkit 会运行您的应用程序并合成新的 AWS CloudFormation 模板。因此,可以与一起使用的大多数命令行选项cdk synth(例如--context)也可以与一起使用cdk deploy

cdk deploy --help有关所有可用选项,请参阅。以下部分将介绍一些最有用的选项。

跳过合成

cdk deploy命令通常会在部署之前合成应用程序的堆栈,以确保部署反映应用程序的最新版本。如果您知道自上次代码以来没有更改过代码cdk synth,则可以在部署时取消冗余合成步骤。为此,请在--app选项中指定项目的cdk.out目录。

cdk deploy --app cdk.out StackOne StackTwo

禁用回滚

AWS CloudFormation 能够回滚更改,从而实现原子部署。这意味着它们要么成功,要么整体失败。 AWS CDK 继承了此功能,因为它可以合成和部署 AWS CloudFormation 模板。

Rollback 可确保您的资源始终处于一致状态,这对于生产堆栈至关重要。但是,当你仍在开发基础架构时,有些故障是不可避免的,而回滚失败的部署可能会减慢你的速度。

因此,CDK Toolkit 允许您通过在命令中添加--no-rollback来禁用回滚功能。cdk deploy使用此标志,失败的部署不会被回滚。相反,在出现故障的资源之前部署的资源会保留在原处,而下一次部署则从出现故障的资源开始。等待部署的时间将大大减少,而将更多的时间花在开发基础架构上。

热交换

使用带的--hotswap标志cdk deploy尝试直接更新您的 AWS 资源,而不是生成 AWS CloudFormation 更改集并进行部署。如果无法进行热交换,则 AWS CloudFormation 部署将回退到部署。

目前热交换支持 Lambda 函数、Step Functions 状态机和 Amazon ECS 容器镜像。该--hotswap标志还会禁用回滚(即暗示--no-rollback)。

重要

不建议在生产部署中使用热插拔。

观看模式

CDK Toolkit 的监视模式(cdk deploy --watchcdk watch简称)会持续监视您的 CDK 应用程序的源文件和资产是否有更改。当检测到更改时,它会立即部署指定的堆栈。

默认情况下,这些部署使用标志,该--hotswap标志可快速跟踪对 Lambda 函数的更改的部署。 AWS CloudFormation 如果您更改了基础架构配置,它还会回退到通过部署。要cdk watch始终执行完整 AWS CloudFormation 部署,请将--no-hotswap标志添加到cdk watch

cdk watch正在执行部署时所做的任何更改都将合并到一个部署中,该部署将在正在进行的部署完成后立即开始。

监视模式使用项目中的"watch"密钥cdk.json来确定要监视哪些文件。默认情况下,这些文件是您的应用程序文件和资产,但可以通过修改"watch"密钥中的"include""exclude"条目来更改这些文件和资产。以下cdk.json文件显示了这些条目的示例。

{ "app": "mvn -e -q compile exec:java", "watch": { "include": "src/main/**", "exclude": "target/*" } }

cdk watch在合成之前执行来自cdk.json"build"命令来构建您的应用程序。如果您的部署需要任何命令来构建或打包您的 Lambda 代码(或不在您的 CDK 应用程序中的任何其他内容),请将其添加到此处。

和键中可以使用 Git 风格的通配符**,包括*和。"watch" "build"每个路径都是相对于的父目录进行解释的cdk.json。的默认值include**/*,表示项目根目录中的所有文件和目录。 exclude是可选的。

重要

对于生产部署,建议不要使用监视模式。

指定 AWS CloudFormation 参数

该 AWS CDK 工具包支持在部署时指定 AWS CloudFormation 参数。你可以在命令行上的--parameters标志后面提供这些信息。

cdk deploy MyStack --parameters uploadBucketName=UploadBucket

要定义多个参数,请使用多个--parameters标志。

cdk deploy MyStack --parameters uploadBucketName=UpBucket --parameters downloadBucketName=DownBucket

如果要部署多个堆栈,则可以为每个堆栈的每个参数指定不同的值。为此,请在参数名称前加上堆栈名称和冒号。否则,将相同的值传递给所有堆栈。

cdk deploy MyStack YourStack --parameters MyStack:uploadBucketName=UploadBucket --parameters YourStack:uploadBucketName=UpBucket

默认情况下, AWS CDK 会保留先前部署中的参数值,如果未明确指定,则在以后的部署中使用这些值。使用该--no-previous-parameters标志要求指定所有参数。

指定输出文件

如果您的堆栈声明了 AWS CloudFormation 输出,则这些输出通常会在部署结束时显示在屏幕上。要将它们写入 JSON 格式的文件中,请使用标--outputs-file志。

cdk deploy --outputs-file outputs.json MyStack

与安全相关的更改

为了保护您免受影响安全状况的意外更改, AWS CDK Toolkit 会提示您在部署与安全相关的更改之前批准这些更改。您可以指定需要批准的更改级别:

cdk deploy --require-approval LEVEL

等级可以是以下之一:

租期

含义

never

从来不需要批准

any-change

任何 IAM 或 security-group-related 变更都需要获得批准

broadening(默认)

添加 IAM 声明或流量规则时需要批准;移除不需要批准

也可以在cdk.json文件中配置该设置。

{ "app": "...", "requireApproval": "never" }

比较堆栈

cdk diff命令将应用程序中定义的堆栈(及其依赖项)的当前版本与已部署的版本或已保存的 AWS CloudFormation 模板进行比较,并显示更改列表。

Stack HelloCdkStack
IAM Statement Changes
┌───┬──────────────────────────────┬────────┬──────────────────────────────┬──────────────────────────────┬───────────┐
│   │ Resource                     │ Effect │ Action                       │ Principal                    │ Condition │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${Custom::S3AutoDeleteObject │ Allow  │ sts:AssumeRole               │ Service:lambda.amazonaws.com │           │
│   │ sCustomResourceProvider/Role │        │                              │                              │           │
│   │ .Arn}                        │        │                              │                              │           │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${MyFirstBucket.Arn}         │ Allow  │ s3:DeleteObject*             │ AWS:${Custom::S3AutoDeleteOb │           │
│   │ ${MyFirstBucket.Arn}/*       │        │ s3:GetBucket*                │ jectsCustomResourceProvider/ │           │
│   │                              │        │ s3:GetObject*                │ Role.Arn}                    │           │
│   │                              │        │ s3:List*                     │                              │           │
└───┴──────────────────────────────┴────────┴──────────────────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│   │ Resource                                               │ Managed Policy ARN                                     │
├───┼────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ + │ ${Custom::S3AutoDeleteObjectsCustomResourceProvider/Ro │ {"Fn::Sub":"arn:${AWS::Partition}:iam::aws:policy/serv │
│   │ le}                                                    │ ice-role/AWSLambdaBasicExecutionRole"}                 │
└───┴────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Parameters
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3Bucket AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F: {"Type":"String","Description":"S3 bucket for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3VersionKey AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626: {"Type":"String","Description":"S3 key for asset version \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/ArtifactHash AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A: {"Type":"String","Description":"Artifact hash for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}

Resources
[+] AWS::S3::BucketPolicy MyFirstBucket/Policy MyFirstBucketPolicy3243DEFD
[+] Custom::S3AutoDeleteObjects MyFirstBucket/AutoDeleteObjectsCustomResource MyFirstBucketAutoDeleteObjectsCustomResourceC52FCF6E
[+] AWS::IAM::Role Custom::S3AutoDeleteObjectsCustomResourceProvider/Role CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092
[+] AWS::Lambda::Function Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F
[~] AWS::S3::Bucket MyFirstBucket MyFirstBucketB8884501
 ├─ [~] DeletionPolicy
 │   ├─ [-] Retain
 │   └─ [+] Delete
 └─ [~] UpdateReplacePolicy
     ├─ [-] Retain
     └─ [+] Delete

要将您的应用程序堆栈与现有部署进行比较,请执行以下操作:

cdk diff MyStack

要将应用的堆栈与已保存的 CloudFormation 模板进行比较,请执行以下操作:

cdk diff --template ~/stacks/MyStack.old MyStack

将现有的资源导入到堆栈

您可以使用cdk import命令将特定 AWS CDK 堆栈的资源置于 CloudFormation 的管理之下。如果您要迁移到堆栈 AWS CDK,或者要在堆栈之间移动资源或更改其逻辑 ID,则此功能非常有用。cdk import使用 CloudFormation 资源导入。请在此处查看可以导入的资源列表

要将现有资源导入 AWS CDK 堆栈,请执行以下步骤:

  • 确保资源当前未由任何其他 CloudFormation 堆栈管理。如果是,请先将移除策略设置为RemovalPolicy.RETAIN资源当前所在的堆栈中,然后执行部署。然后,从堆栈中移除资源并执行另一次部署。此过程将确保资源不再由管理, CloudFormation 但不会将其删除。

  • 运行 acdk diff,确保要将资源导入到的 AWS CDK 堆栈中没有待处理的更改。“导入” 操作中唯一允许的更改是添加要导入的新资源。

  • 为要导入堆栈的资源添加结构。例如,如果您想导入 Amazon S3 存储桶,请添加类似的内容new s3.Bucket(this, 'ImportedS3Bucket', {});。请勿对任何其他资源进行任何修改。

    您还必须确保将资源当前的状态精确地建模到定义中。以存储桶为例,请务必包含 AWS KMS 密钥、生命周期策略以及与存储桶相关的任何其他内容。否则,后续更新操作可能无法达到预期效果。

    您可以选择是否包含物理存储桶名称。我们通常建议不要在资源定义中包含 AWS CDK 资源名称,这样可以更轻松地多次部署资源。

  • 运行 cdk import STACKNAME

  • 如果您的模型中没有资源名称,CLI 将提示您传入要导入的资源的实际名称。之后,开始导入。

  • cdk import报告成功后,资源现在由 AWS CDK 和管理 CloudFormation。您随后对 AWS CDK 应用程序中的资源属性(构造配置)所做的任何更改都将应用于下一次部署。

  • 要确认 AWS CDK 应用程序中的资源定义是否与资源的当前状态相匹配,您可以启动CloudFormation 偏差检测操作

此功能目前不支持将资源导入嵌套堆栈。

配置 (cdk.json)

许多 CDK Toolkit 命令行标志的默认值可以存储在项目cdk.json.cdk.json文件中或用户目录的文件中。以下是按字母顺序对支持的配置设置的引用。

注意 CDK 工具包选项
app 执行 CDK 应用程序的命令。 --app
assetMetadata 如果是false,CDK 不会向使用资产的资源添加元数据。 --no-asset-metadata
bootstrapKmsKeyId 覆盖用于加密 Amazon S3 部署存储桶的密 AWS KMS 钥的 ID。 --bootstrap-kms-key-id
build 在合成之前编译或构建 CDK 应用程序的命令。不允许进入~/.cdk.json --build
browser 用于启动cdk docs子命令的 Web 浏览器的命令。 --browser
context 请参阅 运行时上下文。配置文件中的上下文值不会被删除。cdk context --clear(CDK 工具包将缓存的上下文值放入其中cdk.context.json。) --context
debug 如果是true,CDK Toolkit 会发出对调试有用的更多详细信息。 --debug
language 用于初始化新项目的语言。 --language
lookups 如果是false,则不允许进行上下文查找。如果需要执行任何上下文查找,则合成将失败。 --no-lookups
notices 如果false,则禁止显示有关安全漏洞、回归和不支持的版本的消息。 --no-notices
output 合成云程序集将发射到的目录的名称(默认"cdk.out")。 --output
outputsFile 将已部署堆栈的 AWS CloudFormation 输出写入的文件(采用 JSON 格式)。 --outputs-file
pathMetadata 如果是false,则不会将 CDK 路径元数据添加到合成模板中。 --no-path-metadata
plugin JSON 数组,用于指定扩展 CDK 的软件包名称或本地路径 --plugin
profile 用于指定区域和账户凭证的默认 AWS 配置文件的名称。 --profile
progress 如果设置为"events",CDK Toolkit 将显示部署期间的所有 AWS CloudFormation 事件,而不是进度条。 --progress
requireApproval 安全更改的默认批准级别。请参阅 与安全相关的更改 --require-approval
rollback 如果是false,则失败的部署不会被回滚。 --no-rollback
staging 如果是false,则不会将资源复制到输出目录(用于对源文件进行本地调试 AWS SAM)。 --no-staging
tags 包含堆栈标签(键值对)的 JSON 对象。 --tags
toolkitBucketName 用于部署 Lambda 函数和容器映像等资产的 Amazon S3 存储桶的名称(请参阅。引导您的环境 AWS --toolkit-bucket-name
toolkitStackName 引导堆栈的名称(请参阅引导您的环境 AWS --toolkit-stack-name
versionReporting 如果false是,则选择退出版本报告。 --no-version-reporting
watch JSON 对象包含"include"和用于指示哪些文件在更改时应该(或不应该)触发项目重建的"exclude"密钥。请参阅 观看模式 --watch