AWS CDK 項目 - AWS Cloud Development Kit (AWS CDK) V2

這是 AWS CDK v2 開發人員指南。較舊的 CDK 第 1 版已於 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
. N 米格諾

指定將套件發佈至npm登錄時要忽略哪些檔案和資料夾的檔案。此檔案類似於.gitignore,但是特定於npm套件。

斌 my-cdk-ts-project

應用程式檔案會定義您的 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。 Jest是一種流行的JavaScript測試框架。

庫堆棧 my-cdk-ts-project

堆疊檔案會定義您的 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 } }
節點模組 (_I)

專案中包含Node.js專案相依性的通用資料夾。

包-鎖定 .json

與檔案搭配使用以管理相依性版本的中繼資料package.json檔案。

包裝

專案中常用的中繼資料檔Node.js案。此檔案包含 CDK 專案的相關資訊,例如專案名稱、指令碼定義、相依性以及其他匯入專案層級資訊。

測試 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
. N 米格諾

指定將套件發佈至npm登錄時要忽略哪些檔案和資料夾的檔案。此檔案類似於.gitignore,但是特定於npm套件。

垃圾桶 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。 Jest是一種流行的JavaScript測試框架。

版本庫 my-cdk-js-project-stack.js

堆疊檔案會定義您的 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 }
節點模組 (_I)

專案中包含Node.js專案相依性的通用資料夾。

包-鎖定 .json

與檔案搭配使用以管理相依性版本的中繼資料package.json檔案。

包裝

專案中常用的中繼資料檔Node.js案。此檔案包含 CDK 專案的相關資訊,例如專案名稱、指令碼定義、相依性以及其他匯入專案層級資訊。

測試 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()
我的 CDK 項目

包含堆疊檔案的目錄。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

用於設置Python虛擬環境的 Batch 文件。Windows

測試

包含 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 /主要

包含應用程式和堆疊檔案的目錄。

以下是應用程式檔案範例:

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 /測試

包含測試檔案的目錄。以下是範例:

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
資產管理系統/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項目的依賴關係和版本控制的文件。

my-cdk-go-project. 走

定義您的 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_ 測試

定義範例測試的檔案。

以下是範例:

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, }) }