這是 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
指令建立專案。在本主題中,我們將參考檔案和資料夾所建立的專案結構和命名慣例AWSCDKCLI。您可以自定義和組織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
- . 多米尼奧
-
指定將套件發佈至npm登錄時要忽略哪些檔案和資料夾的檔案。此檔案類似於
.gitignore
,但是特定於npm套件。 - 斌 /.ts 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
檔案。 - 包裝. 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
- . 多米尼奧
-
指定將套件發佈至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
檔案。 - 包裝. 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
-
會CDKCLI自動為您的專案建立虛擬環境。目
.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 項目
-
包含堆疊檔案的目錄。在此處CDKCLI創建以下內容:
-
__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
- 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項目的依賴關係和版本控制的文件。
- 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, }) }