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