AWS CDK 项目 - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK 项目

AWS Cloud Development Kit (AWS CDK) 项目代表包含您的 CDK 代码的文件和文件夹。内容将因您的编程语言而异。

您可以手动创建 AWS CDK 项目,也可以使用 AWS CDK 命令行界面 (AWS CDK CLI) cdk init 命令创建项目。在本主题中,我们将介绍 AWS CDK CLI 创建的文件和文件夹的项目结构和命名惯例。您可以自定义和组织 CDK 项目以满足您的需求。

注意

随着时间的推移,创建的项目结构 AWS CDK CLI可能会因版本而异。

通用文件和文件夹

.git

如果您已git安装,则会 AWS CDK CLI自动为项目初始化Git存储库。该.git目录包含有关存储库的信息。

.gitignore

用于指定Git要忽略的文件和文件夹的文本文件。

README.md

文本文件,为您提供管理 AWS CDK 项目的基本指导和重要信息。根据需要修改此文件以记录有关您的 CDK 项目的重要信息。

cdk.json

的配置文件 AWS CDK。此文件提供 AWS CDK CLI有关如何运行应用程序的说明。

特定语言的文件和文件夹

以下文件和文件夹是每种支持的编程语言所独有的。

TypeScript

以下是使用cdk init --language typescript命令在my-cdk-ts-project目录中创建的示例项目:

my-cdk-ts-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-ts-project.ts ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-ts-project-stack.ts ├── node_modules ├── package-lock.json ├── package.json ├── test │ └── my-cdk-ts-project.test.ts └── tsconfig.json
.npmignore

该文件指定在将包发布到npm注册表时要忽略哪些文件和文件夹。此文件与类似.gitignore,但特定于npm软件包。

bin/. my-cdk-ts-project ts

应用程序文件定义了您的 CDK 应用程序。CDK 项目可以包含一个或多个应用程序文件。应用程序文件存储在bin文件夹中。

以下是定义 CDK 应用程序的基本应用程序文件示例:

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { MyCdkTsProjectStack } from '../lib/my-cdk-ts-project-stack'; const app = new cdk.App(); new MyCdkTsProjectStack(app, 'MyCdkTsProjectStack');
jest.config.js

的配置文件Jest。 Jest是一个流行的JavaScript测试框架。

lib/ my-cdk-ts-project-stack.ts

堆栈文件定义了你的 CDK 堆栈。在堆栈中,您可以使用构造定义 AWS 资源和属性。

以下是定义 CDK 堆栈的基本堆栈文件示例:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class MyCdkTsProjectStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // code that defines your resources and properties go here } }
节点模块

包含项目依赖项的Node.js项目中的常用文件夹。

package-lock.j

与文件配合使用以管理依赖关系版本的元数据package.json文件。

package.j

Node.js项目中常用的元数据文件。此文件包含有关您的 CDK 项目的信息,例如项目名称、脚本定义、依赖关系和其他导入项目级信息。

test/ .test.ts my-cdk-ts-project

将创建一个测试文件夹,用于组织您的 CDK 项目的测试。还创建了一个示例测试文件。

在运行测试之前,您可以在中编写测试TypeScript并使用Jest来编译TypeScript代码。

tsconfig.json

TypeScript项目中使用的配置文件,用于指定编译器选项和项目设置。

JavaScript

以下是使用cdk init --language javascript命令在my-cdk-js-project目录中创建的示例项目:

my-cdk-js-project ├── .git ├── .gitignore ├── .npmignore ├── README.md ├── bin │ └── my-cdk-js-project.js ├── cdk.json ├── jest.config.js ├── lib │ └── my-cdk-js-project-stack.js ├── node_modules ├── package-lock.json ├── package.json └── test └── my-cdk-js-project.test.js
.npmignore

该文件指定在将包发布到npm注册表时要忽略哪些文件和文件夹。此文件与类似.gitignore,但特定于npm软件包。

bin/ .js my-cdk-js-project

应用程序文件定义了您的 CDK 应用程序。CDK 项目可以包含一个或多个应用程序文件。应用程序文件存储在bin文件夹中。

以下是定义 CDK 应用程序的基本应用程序文件示例:

#!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { MyCdkJsProjectStack } = require('../lib/my-cdk-js-project-stack'); const app = new cdk.App(); new MyCdkJsProjectStack(app, 'MyCdkJsProjectStack');
jest.config.js

的配置文件Jest。 Jest是一个流行的JavaScript测试框架。

lib/-stack.js my-cdk-js-project

堆栈文件定义了你的 CDK 堆栈。在堆栈中,您可以使用构造定义 AWS 资源和属性。

以下是定义 CDK 堆栈的基本堆栈文件示例:

const { Stack, Duration } = require('aws-cdk-lib'); class MyCdkJsProjectStack extends Stack { constructor(scope, id, props) { super(scope, id, props); // code that defines your resources and properties go here } } module.exports = { MyCdkJsProjectStack }
节点模块

包含项目依赖项的Node.js项目中的常用文件夹。

package-lock.j

与文件配合使用以管理依赖关系版本的元数据package.json文件。

package.j

Node.js项目中常用的元数据文件。此文件包含有关您的 CDK 项目的信息,例如项目名称、脚本定义、依赖关系和其他导入项目级信息。

test/ .test.js my-cdk-js-project

将创建一个测试文件夹,用于组织您的 CDK 项目的测试。还创建了一个示例测试文件。

在运行测试之前,您可以在中编写测试JavaScript并使用Jest来编译JavaScript代码。

Python

以下是使用cdk init --language python命令在my-cdk-py-project目录中创建的示例项目:

my-cdk-py-project ├── .git ├── .gitignore ├── .venv ├── README.md ├── app.py ├── cdk.json ├── my_cdk_py_project │ ├── __init__.py │ └── my_cdk_py_project_stack.py ├── requirements-dev.txt ├── requirements.txt ├── source.bat └── tests ├── __init__.py └── unit
.venv

CDK CLI 会自动为您的项目创建虚拟环境。该.venv目录指的是这个虚拟环境。

app.py

应用程序文件定义了您的 CDK 应用程序。CDK 项目可以包含一个或多个应用程序文件。

以下是定义 CDK 应用程序的基本应用程序文件示例:

#!/usr/bin/env python3 import os import aws_cdk as cdk from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack app = cdk.App() MyCdkPyProjectStack(app, "MyCdkPyProjectStack") app.synth()
my_cdk_py_project

包含您的堆栈文件的目录。CDK 在此处CLI创建以下内容:

  • __init__.py — 一个空的Python包定义文件。

  • my_cdk_py_project— 定义您的 CDK 堆栈的文件。然后,您可以使用构造定义堆栈中的 AWS 资源和属性。

以下是堆栈文件的示例:

from aws_cdk import Stack from constructs import Construct class MyCdkPyProjectStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # code that defines your resources and properties go here
requirements-dev.txt

文件类似于requirements.txt,但用于管理专门用于开发目的而不是生产目的的依赖关系。

requirements.txt

Python项目中用于指定和管理项目依赖关系的常用文件。

source.bat

Batch 文件用于Windows设置Python虚拟环境。

测试

包含您的 CDK 项目测试的目录。

以下是单元测试的示例:

import aws_cdk as core import aws_cdk.assertions as assertions from my_cdk_py_project.my_cdk_py_project_stack import MyCdkPyProjectStack def test_sqs_queue_created(): app = core.App() stack = MyCdkPyProjectStack(app, "my-cdk-py-project") template = assertions.Template.from_stack(stack) template.has_resource_properties("AWS::SQS::Queue", { "VisibilityTimeout": 300 })
Java

以下是使用cdk init --language java命令在my-cdk-java-project目录中创建的示例项目:

my-cdk-java-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── pom.xml └── src ├── main └── test
pom.xml

包含有关您的 CDK 项目的配置信息和元数据的文件。此文件是其中的一部分Maven。

src/main

包含您的应用程序堆栈文件的目录。

以下是示例应用程序文件:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; import java.util.Arrays; public class MyCdkJavaProjectApp { public static void main(final String[] args) { App app = new App(); new MyCdkJavaProjectStack(app, "MyCdkJavaProjectStack", StackProps.builder() .build()); app.synth(); } }

以下是示例堆栈文件:

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; public class MyCdkJavaProjectStack extends Stack { public MyCdkJavaProjectStack(final Construct scope, final String id) { this(scope, id, null); } public MyCdkJavaProjectStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); // code that defines your resources and properties go here } }
src/test

包含您的测试文件的目录。以下是 示例:

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.assertions.Template; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Test; public class MyCdkJavaProjectTest { @Test public void testStack() throws IOException { App app = new App(); MyCdkJavaProjectStack stack = new MyCdkJavaProjectStack(app, "test"); Template template = Template.fromStack(stack); template.hasResourceProperties("AWS::SQS::Queue", new HashMap<String, Number>() {{ put("VisibilityTimeout", 300); }}); } }
C#

以下是使用cdk init --language csharp命令在my-cdk-csharp-project目录中创建的示例项目:

my-cdk-csharp-project ├── .git ├── .gitignore ├── README.md ├── cdk.json └── src ├── MyCdkCsharpProject └── MyCdkCsharpProject.sln
src/ MyCdkCsharpProject

包含您的应用程序堆栈文件的目录。

以下是示例应用程序文件:

using Amazon.CDK; using System; using System.Collections.Generic; using System.Linq; namespace MyCdkCsharpProject { sealed class Program { public static void Main(string[] args) { var app = new App(); new MyCdkCsharpProjectStack(app, "MyCdkCsharpProjectStack", new StackProps{}); app.Synth(); } } }

以下是示例堆栈文件:

using Amazon.CDK; using Constructs; namespace MyCdkCsharpProject { public class MyCdkCsharpProjectStack : Stack { internal MyCdkCsharpProjectStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { // code that defines your resources and properties go here } } }

此目录还包含以下内容:

  • GlobalSuppressions.cs— 用于抑制项目中特定的编译器警告或错误的文件。

  • .csproj— 基于 XML 的文件,用于定义项目设置、依赖关系和生成配置。

src/ .sln MyCdkCsharpProject

Microsoft Visual Studio Solution File用于组织和管理相关项目。

Go

以下是使用cdk init --language go命令在my-cdk-go-project目录中创建的示例项目:

my-cdk-go-project ├── .git ├── .gitignore ├── README.md ├── cdk.json ├── go.mod ├── my-cdk-go-project.go └── my-cdk-go-project_test.go
go.mod

包含模块信息的文件,用于管理Go项目的依赖关系和版本控制。

my-cdk-go-project.go

定义您的 CDK 应用程序和堆栈的文件。

以下是 示例:

package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/constructs-go/constructs/v10" "github.com/aws/jsii-runtime-go" ) type MyCdkGoProjectStackProps struct { awscdk.StackProps } func NewMyCdkGoProjectStack(scope constructs.Construct, id string, props *MyCdkGoProjectStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) // The code that defines your resources and properties go here return stack } func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewMyCdkGoProjectStack(app, "MyCdkGoProjectStack", &MyCdkGoProjectStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } func env() *awscdk.Environment { return nil }
my-cdk-go-project_test.go

定义示例测试的文件。

以下是 示例:

package main import ( "testing" "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/aws-cdk-go/awscdk/v2/assertions" "github.com/aws/jsii-runtime-go" ) func TestMyCdkGoProjectStack(t *testing.T) { // GIVEN app := awscdk.NewApp(nil) // WHEN stack := NewMyCdkGoProjectStack(app, "MyStack", nil) // THEN template := assertions.Template_FromStack(stack, nil) template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{ "VisibilityTimeout": 300, }) }