這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS CDK 專案
AWS 雲端開發套件 (AWS CDK) 專案代表包含 CDK 程式碼的檔案和資料夾。內容會根據您的程式設計語言而有所不同。
您可以手動或使用 AWS CDK 命令列界面 (AWS CDK CLI) cdk init
命令建立 AWS CDK 專案。在本主題中,我們將參考由 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_modules
-
Node.js 專案中的常見資料夾,其中包含專案的相依性。
-
package-lock.json
-
與 檔案搭配使用以管理相依性版本的中繼資料
package.json
檔案。 -
package.json
-
Node.js 專案中常用的中繼資料檔案。此檔案包含 CDK 專案的相關資訊,例如專案名稱、指令碼定義、相依性和其他匯入專案層級資訊。
-
test/my-cdk-ts-project.test.ts
-
會建立測試資料夾來組織 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/my-cdk-js-project.js
-
應用程式檔案會定義您的 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/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 }
-
node_modules
-
Node.js 專案中的常見資料夾,其中包含專案的相依性。
-
package-lock.json
-
與 檔案搭配使用以管理相依性版本的中繼資料
package.json
檔案。 -
package.json
-
Node.js 專案中常用的中繼資料檔案。此檔案包含 CDK 專案的相關資訊,例如專案名稱、指令碼定義、相依性和其他匯入專案層級資訊。
-
test/my-cdk-js-project.test.js
-
會建立測試資料夾來組織 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
-
用於設定 Python 虛擬環境Windows的 批次檔案。
-
tests
-
包含 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/MyCdkCsharpProject.sln
-
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, }) }
-