“AWS CDK 部署” 操作 YAML - Amazon CodeCatalyst

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

“AWS CDK 部署” 操作 YAML

以下是AWS CDK 部署操作的YAML定义。要了解如何使用此操作,请参阅使用工作流程部署 AWS CDK 应用程序

此操作定义作为一个部分存在于更广泛的工作流程定义文件中。有关此文件的更多信息,请参阅 工作流程YAML定义

注意

接下来的大多数YAML属性在可视化编辑器中都有相应的用户界面元素。要查找用户界面元素,请使用 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

对应的用户界面:工作流程图/ 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 Bootstrap 操作,则在运行部署操作之前,必须找到另一种部署 AWS CDK 引导堆栈的方法AWS CDK 。有关更多信息,请参阅使用工作流程部署 AWS CDK 应用程序中的添加 “AWS CDK 部署” 操作

有关 “依赖” 功能的更多信息,请参阅。排序动作

对应的用户界面:“输入” 选项卡/ 依赖- 可选

Compute

(CDKDeploy/Compute)

(可选)

用于运行工作流程操作的计算引擎。您可以在工作流程级别或操作级别指定计算,但不能同时指定两者。在工作流级别指定时,计算配置将应用于工作流中定义的所有操作。在工作流程级别,您还可以在同一个实例上运行多个操作。有关更多信息,请参阅 跨操作共享计算

对应的用户界面:

Type

(CDKDeploy/Compute/Type)

(如果包含Compute,则为必填项)

计算引擎的类型。您可以使用以下值之一:

  • EC2(可视化编辑器)或EC2(YAML编辑器)

    针对动作运行期间的灵活性进行了优化。

  • Lambda(可视化编辑器)或Lambda(YAML编辑器)

    优化了动作启动速度。

有关计算类型的更多信息,请参阅计算类型

相应的 UI:“配置” 选项卡/高级-可选/计算类型

Fleet

(CDKDeploy/Compute/Fleet)

(可选)

指定将运行您的工作流程或工作流程操作的计算机或机群。对于按需队列,当操作开始时,工作流程会配置所需的资源,操作完成后计算机就会被销毁。按需车队示例:Linux.x86-64.LargeLinux.x86-64.XLarge。有关按需队列的更多信息,请参阅按需车队房产

使用已配置的队列,您可以配置一组专用计算机来运行您的工作流程操作。这些计算机处于闲置状态,可以立即处理操作。有关已配置队列的更多信息,请参阅。已配置的舰队属性

如果省略,Fleet则默认为Linux.x86-64.Large

相应的 UI:“配置” 选项卡/高级-可选/计算舰队

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。如果您未指定构件,则该操作会合成模板,但不会将其保存在构件中。考虑将合成后的模板保存在工件中,以保留其记录,用于测试或故障排除。

对应的用户界面:输出选项卡/构件/添加构件/构建构件名称

Files

(CDKDeploy/Outputs/Artifacts/Files)

(如果包含Artifacts - output,则为必填项)

指定要包含在构件中的文件。您"cdk.out/**/*"必须指定包含 AWS CDK 应用程序的合成 AWS CloudFormation 模板。

注意

cdk.out是保存合成文件的默认目录。如果您指定的输出目录不是在cdk.json文件cdk.out中,请在此处指定该目录,而不是cdk.out

相应的用户界面:输出选项卡/构件/添加工件/构建生成的文件

Environment

(CDKDeploy/Environment)

(必需)

指定要用于操作的 CodeCatalyst 环境。该操作关联到在所选环境中VPC指定的 AWS 账户 和可选的 Amazon。该操作使用在环境中指定的默认IAM角色连接到 AWS 账户,并使用在亚马逊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定义文档中对角色属性的描述。

有关账户关联的更多信息,请参阅允许在已连接的情况下访问 AWS 资源 AWS 账户。有关向环境添加账户连接的信息,请参阅创建环境

相应的 UI:根据操作版本的不同,以下用户界面之一:

  • (新版本)“配置” 选项卡/环境/内容 my-environment/三点菜单/ 切换角色

  • (旧版本)“配置” 选项卡/'环境/账户/角色'/账户连接AWS

Name

(CDKDeploy/Environment/Connections/Name)

(如果包含Connections,则为必填项)

指定账户连接的名称。

相应的 UI:根据操作版本的不同,以下用户界面之一:

  • (新版本)“配置” 选项卡/环境/内容 my-environment/三点菜单/ 切换角色

  • (旧版本)“配置” 选项卡/'环境/账户/角色'/账户连接AWS

Role

(CDKDeploy/Environment/Connections/Role)

(如果包含Connections,则为必填项)

指定账户连接的名称。

指定AWS CDK 部署操作用于访问 AWS 和部署 AWS CDK 应用程序堆栈的IAM角色的名称。请确保您已将该角色添加到您的 CodeCatalyst 空间,并且该角色包含以下策略。

如果您未指定IAM角色,则该操作将使用 CodeCatalyst 控制台中环境中列出的默认IAM角色。如果您在环境中使用默认角色,请确保其具有以下策略。

  • 以下权限策略:

    警告

    将权限限制为以下策略中显示的权限。使用具有更广泛权限的角色可能会带来安全风险。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "cloudformation:DescribeStackEvents", "cloudformation:DescribeChangeSet", "cloudformation:DescribeStacks", "cloudformation:ListStackResources" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::aws-account:role/cdk-*" } ] }
  • 以下自定义信任策略:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
注意

如果您愿意,可以在此操作中使用该CodeCatalystWorkflowDevelopmentRole-spaceName角色。有关该角色的更多信息,请参阅 为您的账户和空间创建CodeCatalystWorkflowDevelopmentRole-spaceName角色。了解该CodeCatalystWorkflowDevelopmentRole-spaceName角色具有完全访问权限,这可能会带来安全风险。我们建议您仅在教程和安全性较低的场景中使用此角色。

相应的 UI:根据操作版本的不同,以下用户界面之一:

  • (新版本)“配置” 选项卡/环境/内容 my-environment/三点菜单/ 切换角色

  • (旧版本)“配置” 选项卡/'环境/帐户/角色'/角色

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

您只能指定一个堆栈。

提示

如果您有多个堆栈,则可以创建带有嵌套堆栈的父堆栈。然后,您可以在此操作中指定父堆栈来部署所有堆栈。

对应的用户界面:配置选项卡/ 堆栈名称

Region

(CDKDeploy/Configuration/Region)

(可选)

指定要 AWS 区域 将 AWS CDK 应用程序堆栈部署到哪里。有关区域代码的列表,请参阅区域端点

如果您未指定区域,则AWS CDK 部署操作将部署到您的 AWS CDK 代码中指定的区域。有关更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的环境

对应的 UI:“配置” 选项卡/ 区域

Tags

(CDKDeploy/Configuration/Tags)

(可选)

指定要应用于 AWS CDK 应用程序堆栈中 AWS 资源的标签。标签适用于堆栈本身以及堆栈中的单个资源。有关标记的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的添加标签

对应的用户界面:配置选项卡/高级-可选/标签

Context

(CDKDeploy/Configuration/Context)

(可选)

以键值对的形式指定要与 AWS CDK 应用程序堆栈关联的上下文。有关上下文的更多信息,请参阅《AWS Cloud Development Kit (AWS CDK) 开发人员指南》中的运行时上下文

对应的用户界面:配置选项卡/高级-可选/上下文

CdkCliVersion

(CDKDeploy/Configuration/CdkCliVersion)

(可选)

此属性适用于AWS CDK 部署操作的 1.0.13 或更高版本,以及引导操作的 1.0.8 或更高版本。AWS CDK

指定下列项之一:

  • 您希望此操作使用的 AWS Cloud Development Kit (AWS CDK) 命令行界面 (CLI)(也称为 AWS CDK Toolkit)的完整版本。示例:2.102.1。在构建和部署应用程序时,请考虑指定完整版本以确保一致性和稳定性。

    Or

  • latest。 请考虑指定latest以利用的最新功能和修复程序CDKCLI。

该操作会将的指定版本(或最新版本)下载 AWS CDK CLI到 CodeCatalyst 构建映像,然后使用此版本运行部署CDK应用程序或引导 AWS 环境所需的命令。

有关您可以使用的支持CDKCLI版本的列表,请参阅AWS CDK 版本

如果省略此属性,则该操作将使用以下主题之一中描述的默认 AWS CDK CLI版本:

对应的用户界面:配置选项卡/版本AWS CDK CLI

CdkRootPath

(CDKDeploy/Configuration/CdkRootPath)

(可选)

包含 AWS CDK 项目cdk.json文件的目录的路径。AWS CDK 部署操作从该文件夹运行,该操作创建的所有输出都将添加到此目录中。如果未指定,则AWS CDK 部署操作假定该cdk.json文件位于 AWS CDK 项目的根目录中。

对应的用户界面:配置选项卡/ 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

bucket.bucketName

tableName

table.tableName

然后,您可以在后续操作中引用bucketNametableName变量。要了解如何在后续操作中引用工作流输出变量,请参阅引用预定义变量

如果您未在CfnOutputVariables属性中指定任何CfnOutput构造,则该操作会将其找到的前四个(或更少) CloudFormation输出变量显示为工作流输出变量。有关更多信息,请参阅 “AWS CDK 部署” 变量

提示

要获取操作生成的所有 CloudFormation 输出变量的列表,请运行一次包含AWS CDK 部署操作的工作流,然后查看该操作的 “日志” 选项卡。日志包含与您的 AWS CDK 应用程序关联的所有 CloudFormation 输出变量的列表。知道所有 CloudFormation 变量是什么之后,就可以使用CfnOutputVariables属性指定要将哪些变量转换为工作流程输出变量。

有关 AWS CloudFormation 输出变量的更多信息,请参阅该CfnOutput构造的文档,该文档可在AWS Cloud Development Kit (AWS CDK) API参考文献中的类 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 deploycdk synth命令以及--app选项的信息,请参阅《开发人员指南》中的部署堆栈合成堆栈跳过合成。AWS Cloud Development Kit (AWS CDK)

有关云组件的信息,请参阅《AWS Cloud Development Kit (AWS CDK) API参考资料》中的 “云组件”。

对应的 UI:“配置” 选项卡/ 云端装配目录路径