本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
“AWS CDK 部署”操作 YAML
下面是 AWS CDK 部署操作的 YAML 定义。要了解如何使用此操作,请参阅使用工作流程部署 AWS CDK 应用程序。
此操作定义部分包含在更广泛的工作流定义文件中。有关此文件的更多信息,请参阅工作流 YAML 定义。
注意
接下来的大多数 YAML 属性在可视化编辑器中都有对应的 UI 元素。要查找 UI 元素,请使用 Ctrl+F。该元素将与其关联的 YAML 属性一起列出。
# The workflow definition starts here.
# See 顶级属性 for details.
Name: MyWorkflow
SchemaVersion: 1.0
Actions:
# The action definition starts here.
CDKDeploy_nn:
Identifier: aws/cdk-deploy@v2
DependsOn:
- CDKBootstrap
Compute:
Type: EC2 | Lambda
Fleet: fleet-name
Timeout: timeout-minutes
Inputs:
# Specify a source or an artifact, but not both.
Sources:
- source-name-1
Artifacts:
- artifact-name
Outputs:
Artifacts:
- Name: cdk_artifact
Files:
- "cdk.out/**/*"
Environment:
Name: environment-name
Connections:
- Name: account-connection-name
Role: iam-role-name
Configuration:
StackName: my-cdk-stack
Region: us-west-2
Tags: '{"key1": "value1", "key2": "value2"}'
Context: '{"key1": "value1", "key2": "value2"}'
CdkCliVersion: version
CdkRootPath: directory-containing-cdk.json-file
CfnOutputVariables: '["CnfOutputKey1","CfnOutputKey2","CfnOutputKey3"]'
CloudAssemblyRootPath: path-to-cdk.out
CDKDeploy
(必需)
指定操作的名称。工作流中的所有操作名称都必须是唯一的。操作名称仅限于字母数字字符(a-z、A-Z、0-9)、连字符(-)和下划线(_)。不允许使用空格。不能使用引号在操作名称中包含特殊字符和空格。
默认值:CDKDeploy_nn。
对应的 UI:“配置”选项卡/操作名称
Identifier
(CDKDeploy/Identifier)
(必需)
标识操作。除非您要更改版本,否则不要更改此属性。有关更多信息,请参阅 指定要使用的操作版本。
注意
指定 aws/cdk-deploy@v2 可以让操作在 2024 年 3 月版映像上运行,其中包括较新的工具,例如 Node.js 18。指定 aws/cdk-deploy@v1 可以让操作在 2022 年 11 月版映像上运行,其中包括较旧的工具,例如 Node.js 16。
默认值:aws/cdk-deploy@v2。
对应的 UI:工作流图表/CDKDeploy_nn/aws/cdk-deploy@v2 标签
DependsOn
(CDKDeploy/DependsOn)
(可选)
指定必须成功运行才能使 AWS CDK 部署操作运行的操作或操作组。我们建议在 DependsOn 属性中指定 AWS CDK 引导操作,如下所示:
CDKDeploy: Identifier: aws/cdk-deploy@v2 DependsOn: - CDKBootstrap
注意
引导是部署应用程序的必备先决条件。 AWS CDK 如果您未在工作流中包含 AWS CDK 引导操作,则在运行 AWS CDK 部署操作之前,必须找到另一种用于部署 AWS CDK 引导堆栈的方法。有关更多信息,请参阅使用工作流程部署 AWS CDK 应用程序中的添加 “AWS CDK 部署” 操作。
有关“依赖于”功能的更多信息,请参阅顺序操作。
对应的 UI:“输入”选项卡/依赖于 – 可选
Compute
(CDKDeploy/Compute)
(可选)
用于运行工作流操作的计算引擎。您可以在工作流级别或操作级别指定计算,但不能同时在这两个级别指定计算。在工作流级别指定计算时,计算配置将应用于工作流中定义的所有操作。在工作流级别,您还可以在同一个实例上运行多个操作。有关更多信息,请参阅跨操作共享计算。
对应的 UI:无
Type
(CDKDeploy/Compute/Type)
(如果包含 Compute,则为必需)
计算引擎的类型。可以使用下列值之一:
-
EC2(可视化编辑器)或
EC2(YAML 编辑器)已经过优化,提高了操作运行期间的灵活性。
-
Lambda(可视化编辑器)或
Lambda(YAML 编辑器)优化了操作启动速度。
有关计算类型的更多信息,请参阅计算类型。
相应的 UI:配置 tab/Advanced -可选/计算类型
Fleet
(CDKDeploy/Compute/Fleet)
(可选)
指定将运行您的工作流或工作流操作的计算机或实例集。对于按需实例集,当操作开始时,工作流会预置操作所需的资源,操作完成后计算机就会被销毁。按需实例集的示例:Linux.x86-64.Large、Linux.x86-64.XLarge。有关按需实例集的更多信息,请参阅按需实例集属性。
使用预置的实例集,您可以配置一组专用计算机来运行工作流操作。这些计算机保持空闲状态,可随时开始立即处理操作。有关预置实例集的更多信息,请参阅预置实例集属性。
如果省略 Fleet,则默认值为 Linux.x86-64.Large。
相应的 UI:配置 tab/Advanced -可选/计算舰队
Timeout
(CDKDeploy/Timeout)
(必需)
指定操作在 CodeCatalyst 结束操作之前可以运行的时间(以分钟(YAML 编辑器)或小时和分钟(可视化编辑器)为单位。最小值为 5 分钟,最大值如 中的工作流程配额 CodeCatalyst 中描述。默认超时值与最大超时值相同。
对应的 UI:“配置”选项卡/超时 – 可选
Inputs
(CDKDeploy/Inputs)
(可选)
Inputs 部分中定义了工作流运行期间 CDKDeploy 所需的数据。
注意
每个 AWS CDK 部署操作只能有一个输入(可以是源或构件)。
对应的 UI:输入选项卡
Sources
(CDKDeploy/Inputs/Sources)
(如果您要部署的 AWS CDK 应用程序存储在源存储库中,则为必填项)
如果您的 AWS CDK 应用程序存储在源存储库中,请指定该源存储库的标签。在启动部署过程之前,AWS CDK 部署操作会合成此存储库中的应用程序。目前,唯一支持的标签是 WorkflowSource。
如果您的 AWS CDK 应用程序不包含在源存储库中,则它必须位于另一个操作生成的构件中。
有关来源的更多信息,请参阅将源存储库连接到工作流。
对应的 UI:“输入”选项卡/来源 – 可选
Artifacts - input
(CDKDeploy/Inputs/Artifacts)
(如果您要部署的 AWS CDK 应用程序存储在先前操作的输出项目中,则为必填项)
如果您的 AWS CDK 应用程序包含在先前操作生成的构件中,请在此处指定该构件。在开始AWS CDK 部署过程之前,部署操作会将指定构件中的应用程序合成到 CloudFormation模板中。如果您的 AWS CDK 应用程序不包含在工件中,则它必须位于您的源存储库中。
有关构件的更多信息(包括示例),请参阅在操作之间共享构件和文件。
对应的 UI:“输入”选项卡/构件 – 可选
Outputs
(CDKDeploy/Outputs)
(可选)
定义在工作流运行期间操作输出的数据。
对应的 UI:输出选项卡
Artifacts - output
(CDKDeploy/Outputs/Artifacts
(可选)
指定操作生成的构件。您可以在其他操作中将这些构件作为输入来引用。
有关构件的更多信息(包括示例),请参阅在操作之间共享构件和文件。
对应的 UI:“输出”选项卡/构件
Name
(CDKDeploy/Outputs/Artifacts/Name)
(如果包含 Artifacts - output,则为必需)
指定将包含在运行时由AWS CDK 部署操作合成的 AWS CloudFormation 模板的对象的名称。默认值为 cdk_artifact。如果您未指定构件,则该操作会合成模板,但不会将模板保存在构件中。考虑将合成的模板保存在构件中,以便保留其记录,供测试或故障排除之用。
对应的用户界面:输出tab/Artifacts/Add构件/构建构件名称
Files
(CDKDeploy/Outputs/Artifacts/Files)
(如果包含 Artifacts - output,则为必需)
指定要包含在构件中的文件。您"cdk.out/**/*"必须指定包含 AWS CDK 应用程序的合成 AWS CloudFormation 模板。
注意
cdk.out 是保存已合成文件的默认目录。如果您指定了输出目录,而不是 cdk.json 文件中的 cdk.out,请在此处指定该目录,而不是 cdk.out。
相应的 UI:输出tab/Artifacts/Add构件/编译生成的文件
Environment
(CDKDeploy/Environment)
(必需)
指定要用于操作的 CodeCatalyst 环境。该操作连接到在所选环境中指定的 AWS 账户 和可选的 Amazon VPC。该操作使用环境中指定的默认 IAM 角色连接到 AWS 账户,并使用在 A mazon VPC 连接中指定的 IAM 角色连接到亚马逊 VPC。
注意
如果默认 IAM 角色不具有操作所需的权限,则可以将操作配置为使用其他角色。有关更多信息,请参阅更改操作的 IAM 角色。
有关环境的更多信息,请参阅部署到 AWS 账户 和 VPCs和创建环境。
对应的 UI:“配置”选项卡/环境
Name
(CDKDeploy/Environment/Name)
(如果包含 Environment,则为必需)
指定要与操作关联的现有环境的名称。
对应的 UI:“配置”选项卡/环境
Connections
(CDKDeploy/Environment/Connections)
(在新版本的操作中为可选;在旧版本中为必需)
指定要与操作关联的账户连接。您在 Environment 下最多只能指定一个账户连接。
如果您不指定账户连接:
-
该操作使用 CodeCatalyst 控制台中环境中指定的 AWS 账户 连接和默认 IAM 角色。有关向环境添加账户连接和默认 IAM 角色的信息,请参阅创建环境。
-
默认 IAM 角色必须包含操作所需的策略和权限。要具体确定这些策略和权限,请参阅操作的 YAML 定义文档中 Role 属性的描述。
有关账户连接的更多信息,请参阅允许在已连接的情况下访问 AWS 资源 AWS 账户。有关向环境添加账户连接的信息,请参阅创建环境。
对应的 UI:根据操作版本的不同,为下列项之一:
-
(新版本)配置tab/Environment/What在
my-environment吗? /三点菜单/ 切换角色 -
(旧版本)配置选项卡/ Environment/account/role ''/账户连接AWS
Name
(CDKDeploy/Environment/Connections/Name)
(如果包含 Connections,则为必需)
指定账户连接的名称。
对应的 UI:根据操作版本的不同,为下列项之一:
-
(新版本)配置tab/Environment/What在
my-environment吗? /三点菜单/ 切换角色 -
(旧版本)配置选项卡/ Environment/account/role ''/账户连接AWS
Role
(CDKDeploy/Environment/Connections/Role)
(如果包含 Connections,则为必需)
指定账户连接的名称。
指定AWS CDK 部署操作用于访问 AWS 和部署 AWS CDK 应用程序堆栈的 IAM 角色的名称。请确保您已将该角色添加到您的 CodeCatalyst 空间,并且该角色包含以下策略。
如果您未指定 IAM 角色,则该操作将使用 CodeCatalyst 控制台中环境中列出的默认 IAM 角色。如果您使用此环境中的默认角色,请确保该角色具有以下策略。
-
以下权限策略:
警告
将权限限制在以下策略所示的范围内。使用具有更广泛权限的角色可能会带来安全风险。
以下自定义信任策略:
注意
如果需要,可以在此操作中使用 CodeCatalystWorkflowDevelopmentRole- 角色。有关该角色的更多信息,请参阅为您的账户和空间创建 CodeCatalystWorkflowDevelopmentRole-spaceName 角色。了解 spaceNameCodeCatalystWorkflowDevelopmentRole- 角色具有完全访问权限可能会带来安全风险。我们建议您仅在教程和安全要求较低的场景中使用此角色。spaceName
对应的 UI:根据操作版本的不同,为下列项之一:
-
(新版本)配置tab/Environment/What在
my-environment吗? /三点菜单/ 切换角色 -
(旧版本)“配置” 选项卡/' '/ 角色 Environment/account/role
Configuration
(CDKDeploy/Configuration)
(必需)
可在其中定义操作的配置属性的部分。
对应的 UI:配置选项卡
StackName
(CDKDeploy/Configuration/StackName)
(必需)
AWS CDK 应用程序堆栈的名称,显示在 AWS CDK 应用程序目录的入口点文件中。bin以下示例显示了 TypeScript入口点文件的内容,其中突出显示了堆栈名称。red italics如果您的入口点文件使用的是不同语言,该文件看起来会很相似。
import * as cdk from 'aws-cdk-lib';
import { CdkWorksopTypescriptStack } from '../lib/cdk_workshop_typescript-stack';
const app = new cdk.App();
new CdkWorkshopTypescriptStack(app, 'CdkWorkshopTypescriptStack');
您只能指定一个堆栈。
提示
如果您具有多个堆栈,则可以创建带有嵌套堆栈的父堆栈。然后,您可以在此操作中指定父堆栈,以便部署所有堆栈。
对应的 UI:“配置”选项卡/堆栈名称
Region
(CDKDeploy/Configuration/Region)
(可选)
指定要 AWS 区域 将 AWS CDK 应用程序堆栈部署到哪里。有关区域代码的列表,请参阅区域端点。
如果您未指定区域,则AWS CDK 部署操作将部署到您的 AWS CDK 代码中指定的区域。有关更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) Developer Guide》中的 Environments。
对应的 UI:“配置”选项卡/区域
Tags
(CDKDeploy/Configuration/Tags)
(可选)
指定要应用于 AWS CDK 应用程序堆栈中 AWS 资源的标签。标签应用于堆栈自身以及堆栈中的各个资源。有关标记的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) Developer Guide》中的 Tagging。
对应的用户界面:配置 tab/Advanced -可选/标签
Context
(CDKDeploy/Configuration/Context)
(可选)
以键值对的形式指定要与 AWS CDK 应用程序堆栈关联的上下文。有关上下文的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) Developer Guide》中的 Runtime contexts。
相应的 UI:配置 tab/Advanced -可选/上下文
CdkCliVersion
(CDKDeploy/Configuration/CdkCliVersion)
(可选)
此属性适用于 AWS CDK 部署操作的 1.0.13 或更高版本,以及 AWS CDK 引导操作的 1.0.8 或更高版本。
指定下列项之一:
-
您希望此操作使用的 AWS Cloud Development Kit (AWS CDK) 命令行界面 (CLI)(也称为 AWS CDK 工具包)的完整版本。示例:
2.102.1。在构建和部署您的应用程序时,请考虑指定完整版本,从而确保一致性和稳定性。或
-
latest。请考虑指定latest,从而利用 CDK CLI 的最新功能和修复。
该操作会将指定版本(或最新版本)的 AWS CDK CLI 下载到 CodeCatalyst 构建映像,然后使用此版本运行部署 CDK 应用程序或引导环境所需的命令。 AWS
有关可使用的受支持 CDK CLI 版本的列表,请参阅 AWS CDK 版本。
如果省略此属性,则该操作将使用以下主题之一中描述的默认 AWS CDK CLI 版本:
对应的 UI:“配置” 选项卡/ AWS CDK CLI 版本
CdkRootPath
(CDKDeploy/Configuration/CdkRootPath)
(可选)
包含 AWS CDK 项目cdk.json文件的目录的路径。AWS CDK 部署操作从该文件夹运行,并且该操作创建的所有输出都将添加到此目录中。如果未指定,则AWS CDK 部署操作假定该cdk.json文件位于 AWS CDK 项目的根目录中。
对应的 UI:“配置选项卡”/cdk.json 所在的目录
CfnOutputVariables
(CDKDeploy/Configuration/CfnOutputVariables)
(可选)
指定要在 AWS CDK 应用程序代码中将哪些CfnOutput构造显示为工作流程输出变量。然后,您可以在工作流的后续操作中引用工作流输出变量。有关中变量的更多信息 CodeCatalyst,请参阅在工作流中使用变量。
例如,如果您的 AWS CDK 应用程序代码如下所示:
import { Duration, Stack, StackProps, CfnOutput, RemovalPolicy} from 'aws-cdk-lib';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { Construct } from 'constructs';
import * as cdk from 'aws-cdk-lib';
export class HelloCdkStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
removalPolicy: RemovalPolicy.DESTROY,
});
new CfnOutput(this, 'bucketName', {
value: bucket.bucketName,
description: 'The name of the s3 bucket',
exportName: 'amzn-s3-demo-bucket',
});
const table = new dynamodb.Table(this, 'todos-table', {
partitionKey: {name: 'todoId', type: dynamodb.AttributeType.NUMBER},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
removalPolicy: RemovalPolicy.DESTROY,
})
new CfnOutput(this, 'tableName', {
value: table.tableName,
description: 'The name of the dynamodb table',
exportName: 'myDynamoDbTable',
});
...
}
}
... 并且您的 CfnOutputVariables 属性如下:
Configuration:
...
CfnOutputVariables: '["bucketName","tableName"]'
... 则该操作会生成以下工作流输出变量:
| 键 | 值 |
|---|---|
|
bucketName |
|
|
tableName |
|
然后,您可以在后续操作中引用 bucketName 和 tableName 变量。要了解如何在后续操作中引用工作流输出变量,请参阅 引用预定义变量。
如果您未在CfnOutputVariables属性中指定任何CfnOutput构造,则该操作会将其找到的前四个(或更少) CloudFormation输出变量显示为工作流输出变量。有关更多信息,请参阅 “AWS CDK 部署”变量。
提示
要获取操作生成的所有 CloudFormation 输出变量的列表,请运行一次包含AWS CDK 部署操作的工作流,然后查看该操作的 “日志” 选项卡。日志包含与您的 AWS CDK 应用程序关联的所有 CloudFormation 输出变量的列表。知道所有 CloudFormation 变量是什么之后,就可以使用CfnOutputVariables属性指定要将哪些变量转换为工作流程输出变量。
有关 AWS CloudFormation 输出变量的更多信息,请参阅 AWS Cloud Development Kit (AWS CDK) API 参考中的CfnOutput类 CfnOutput (构造)中提供的构造文档。
相应的 UI:配置选项卡/ AWS CloudFormation 输出变量
CloudAssemblyRootPath
(CDKDeploy/Configuration/CloudAssemblyRootPath)
(可选)
如果您已经将 AWS CDK 应用程序的堆栈合成到云程序集中(使用cdk synth操作),请指定云程序集目录的根路径(cdk.out)。位于指定云程序集目录中的 AWS CloudFormation 模板将通过AWS CDK 部署操作 AWS 账户 使用cdk deploy --app命令部署到您的中。当存在 --app 选项时,不会发生 cdk synth 操作。
如果您未指定云程序集目录,则 AWS CDK 部署操作将运行不带 --app 选项的 cdk deploy 命令。如果没有该--app选项,则该cdk deploy操作既会合成 (cdk synth),又会将您的 AWS CDK 应用程序部署到您的 AWS 账户。
当 “AWS CDK 部署” 操作可以在运行时进行合成时,我为什么要指定现有的合成云组件?
您可能需要将现有的合成云程序集指定为:
-
确保每次运行 “部署” 操作时AWS CDK 部署完全相同的资源集
如果您未指定云程序集,则 AWS CDK 部署操作可能会根据运行时间合成和部署不同的文件。例如,AWS CDK 部署操作可能会在测试阶段合成具有一组依赖项的云程序集,而在生产阶段使用另一组依赖项(如果这些依赖项在各个阶段之间发生了变化)。为了确保测试的内容和部署的内容之间完全对等,我们建议合成一次,然后使用云程序集目录路径字段(可视化编辑器)或
CloudAssemblyRootPath属性(YAML 编辑器),指定已合成的云程序集。 -
将非标准的软件包管理器和工具与 AWS CDK 应用程序结合使用
在
synth操作期间,AWS CDK 部署操作会尝试使用 npm 或 pip 等标准工具运行您的应用程序。如果操作未能使用这些工具成功运行您的应用程序,则合成将不会执行,操作将失败。要解决此问题,您可以在应用程序cdk.json的文件中指定成功运行应用程序所需的确切命令,然后使用不涉及AWS CDK 部署操作的方法合成应用程序。 AWS CDK 生成云程序集后,可以在 AWS CDK 部署操作的云程序集目录路径字段(可视化编辑器)或CloudAssemblyRootPath属性(YAML 编辑器)中指定该程序集。
有关配置cdk.json文件以包含用于安装和运行 AWS CDK 应用程序的命令的信息,请参阅指定应用程序命令。
有关 cdk deploy 和 cdk synth 命令以及 --app 选项的信息,请参阅《AWS Cloud Development Kit (AWS CDK) Developer Guide》中的 Deploying stacks、Synthesizing stacks 和 Skipping synthesis。
有关云程序集的信息,请参阅《AWS Cloud Development Kit (AWS CDK) API Reference》中的 Cloud Assembly。
对应的 UI:“配置”选项卡/云程序集目录路径