

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護，並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 什麼是 AWS CDK？
<a name="home"></a>

 AWS 雲端開發套件 (AWS CDK) 是一種開放原始碼軟體開發架構，可在程式碼中定義雲端基礎設施，並透過 AWS CloudFormation 佈建雲端基礎設施。

 AWS CDK 包含兩個主要部分：
+  ** [AWS CDK 建構程式庫](constructs.md) ** – 一組預先編寫的模組化和可重複使用的程式碼，稱為建構，您可以使用、修改和整合來快速開發您的基礎設施。 AWS CDK Construct Library 的目標是降低在建置應用程式時定義和整合 AWS 服務所需的複雜性 AWS。
+  AWS CDK Toolkit - 可用來管理和與 CDK 應用程式互動的工具，例如執行合成或部署。CDK Toolkit 包含命令列工具 ([CDK CLI](ref-cli-cmd.md)) 和程式設計程式庫 ([CDK Toolkit Library](toolkit-library.md))。

 AWS CDK 支援 TypeScript、JavaScript、Python、Java、C\#/。Net、 和 Go。您可以使用任何這些支援的程式設計語言來定義可重複使用的雲端元件，稱為[建構。](constructs.md)您可以將它們組合成[堆疊](stacks.md)和[應用程式](apps.md)。然後，您可以透過 AWS CloudFormation 部署 CDK 應用程式，以佈建或更新 資源。

![CDK 應用程式和程序概觀](http://docs.aws.amazon.com/zh_tw/cdk/v2/guide/images/AppStacks.png)


## AWS CDK 的優點
<a name="home-benefits"></a>

使用 AWS CDK 以程式設計語言的顯著表達能力，在雲端開發可靠、可擴展、經濟實惠的應用程式。這種方法產生許多好處，包括：<a name="home-benefits-iac"></a>

 **開發和管理基礎設施即程式碼 (IaC)**   
將*基礎設施練習為程式碼*，以程式設計、描述性和宣告方式建立、部署和維護基礎設施。使用 IaC，您會以開發人員處理程式碼的方式對待基礎設施。這會導致管理基礎設施的可擴展性和結構化方法。若要進一步了解 IaC，請參閱* AWS 白皮書上的 DevOps 簡介*中的[基礎設施即程式碼](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)。  
使用 AWS CDK，您可以將基礎設施、應用程式程式碼和組態全部放在一個位置，確保您在每個里程碑都擁有完整的雲端可部署系統。採用軟體工程最佳實務，例如程式碼檢閱、單元測試和來源控制，讓您的基礎設施更強大。<a name="home-benefits-languages"></a>

 **使用一般用途程式設計語言定義您的雲端基礎設施**   
透過 AWS CDK，您可以使用下列任何程式設計語言來定義雲端基礎設施：TypeScript、JavaScript、Python、Java、C\#/。Net、 和 Go。選擇您偏好的語言，並使用程式設計元素，例如參數、條件、迴圈、合成和繼承，來定義基礎設施的所需結果。  
使用相同的程式設計語言來定義您的基礎設施和應用程式邏輯。  
獲得在偏好的 IDE （整合式開發環境） 中開發基礎設施的優勢，例如語法反白和智慧型程式碼完成。  

![程式碼片段顯示具有 VPC 和 Fargate 服務組態之 ECS 叢集的 CDK 設定。](http://docs.aws.amazon.com/zh_tw/cdk/v2/guide/images/CodeCompletion.png)
<a name="home-benefits-cfn"></a>

 **透過 AWS CloudFormation 部署基礎設施**   
 AWS CDK 與 AWS CloudFormation 整合，以在 上部署和佈建您的基礎設施 AWS。 AWS CloudFormation 是一種受管 AWS 服務，可廣泛支援用於佈建服務的資源和屬性組態 AWS。透過 AWS CloudFormation，您可以預期且重複地執行基礎設施部署，並在發生錯誤時轉返。如果您已經熟悉 AWS CloudFormation，則不需要在開始使用 AWS CDK 時學習新的 IaC 管理服務。<a name="home-benefits-constructs"></a>

 **使用 建構模組快速開始開發您的應用程式**   
透過使用和共用稱為建構的可重複使用元件，加快開發速度。使用低階建構來定義 individual AWS CloudFormation 資源及其屬性。使用高階建構來快速定義應用程式的大型元件，為您的 AWS 資源設定明智且安全的預設值，以較少的程式碼定義更多基礎設施。  
建立針對您唯一使用案例自訂的專屬建構，並與您的組織或甚至是公眾共用。

## AWS CDK 的範例
<a name="home-example"></a>

以下是使用 AWS CDK Constructs Library 建立具有 AWS Fargate 啟動類型的 Amazon Elastic Container Service (Amazon ECS) 服務的範例。如需此範例的詳細資訊，請參閱[範例：使用 AWS CDK 建立 AWS Fargate 服務](ecs-example.md)。

**Example**  

```
export class MyEcsConstructStack extends Stack {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);

    const vpc = new ec2.Vpc(this, "MyVpc", {
      maxAzs: 3 // Default is all AZs in region
    });

    const cluster = new ecs.Cluster(this, "MyCluster", {
      vpc: vpc
    });

    // Create a load-balanced Fargate service and make it public
    new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", {
      cluster: cluster, // Required
      cpu: 512, // Default is 256
      desiredCount: 6, // Default is 1
      taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") },
      memoryLimitMiB: 2048, // Default is 512
      publicLoadBalancer: true // Default is false
    });
  }
}
```

```
class MyEcsConstructStack extends Stack {
  constructor(scope, id, props) {
    super(scope, id, props);

    const vpc = new ec2.Vpc(this, "MyVpc", {
      maxAzs: 3 // Default is all AZs in region
    });

    const cluster = new ecs.Cluster(this, "MyCluster", {
      vpc: vpc
    });

    // Create a load-balanced Fargate service and make it public
    new ecs_patterns.ApplicationLoadBalancedFargateService(this, "MyFargateService", {
      cluster: cluster, // Required
      cpu: 512, // Default is 256
      desiredCount: 6, // Default is 1
      taskImageOptions: { image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample") },
      memoryLimitMiB: 2048, // Default is 512
      publicLoadBalancer: true // Default is false
    });
  }
}

module.exports = { MyEcsConstructStack }
```

```
class MyEcsConstructStack(Stack):

  def __init__(self, scope: Construct, id: str, **kwargs) -> None:
    super().__init__(scope, id, **kwargs)

    vpc = ec2.Vpc(self, "MyVpc", max_azs=3)     # default is all AZs in region

    cluster = ecs.Cluster(self, "MyCluster", vpc=vpc)

    ecs_patterns.ApplicationLoadBalancedFargateService(self, "MyFargateService",
      cluster=cluster,            # Required
      cpu=512,                    # Default is 256
      desired_count=6,            # Default is 1
      task_image_options=ecs_patterns.ApplicationLoadBalancedTaskImageOptions(
          image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample")),
      memory_limit_mib=2048,      # Default is 512
      public_load_balancer=True)  # Default is False
```

```
public class MyEcsConstructStack extends Stack {

  public MyEcsConstructStack(final Construct scope, final String id) {
    this(scope, id, null);
  }

  public MyEcsConstructStack(final Construct scope, final String id,
      StackProps props) {
    super(scope, id, props);

    Vpc vpc = Vpc.Builder.create(this, "MyVpc").maxAzs(3).build();

    Cluster cluster = Cluster.Builder.create(this, "MyCluster")
            .vpc(vpc).build();

    ApplicationLoadBalancedFargateService.Builder.create(this, "MyFargateService")
            .cluster(cluster)
            .cpu(512)
            .desiredCount(6)
            .taskImageOptions(
                    ApplicationLoadBalancedTaskImageOptions.builder()
                            .image(ContainerImage
                                    .fromRegistry("amazon/amazon-ecs-sample"))
                            .build()).memoryLimitMiB(2048)
            .publicLoadBalancer(true).build();
  }
}
```

```
public class MyEcsConstructStack : Stack
{
    public MyEcsConstructStack(Construct scope, string id, IStackProps props=null) : base(scope, id, props)
    {
        var vpc = new Vpc(this, "MyVpc", new VpcProps
        {
            MaxAzs = 3
        });

        var cluster = new Cluster(this, "MyCluster", new ClusterProps
        {
            Vpc = vpc
        });

        new ApplicationLoadBalancedFargateService(this, "MyFargateService",
            new ApplicationLoadBalancedFargateServiceProps
        {
            Cluster = cluster,
            Cpu = 512,
            DesiredCount = 6,
            TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions
            {
                Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample")
            },
            MemoryLimitMiB = 2048,
            PublicLoadBalancer = true,
        });
    }
}
```

```
func NewMyEcsConstructStack(scope constructs.Construct, id string, props *MyEcsConstructStackProps) awscdk.Stack {

	var sprops awscdk.StackProps

	if props != nil {
		sprops = props.StackProps
	}

	stack := awscdk.NewStack(scope, &id, &sprops)

	vpc := awsec2.NewVpc(stack, jsii.String("MyVpc"), &awsec2.VpcProps{
		MaxAzs: jsii.Number(3), // Default is all AZs in region
	})

	cluster := awsecs.NewCluster(stack, jsii.String("MyCluster"), &awsecs.ClusterProps{
		Vpc: vpc,
	})

	awsecspatterns.NewApplicationLoadBalancedFargateService(stack, jsii.String("MyFargateService"),
		&awsecspatterns.ApplicationLoadBalancedFargateServiceProps{
			Cluster:        cluster,           // required
			Cpu:            jsii.Number(512),  // default is 256
			DesiredCount:   jsii.Number(5),    // default is 1
			MemoryLimitMiB: jsii.Number(2048), // Default is 512
			TaskImageOptions: &awsecspatterns.ApplicationLoadBalancedTaskImageOptions{
				Image: awsecs.ContainerImage_FromRegistry(jsii.String("amazon/amazon-ecs-sample"), nil),
			},
			PublicLoadBalancer: jsii.Bool(true), // Default is false
		})

	return stack

}
```

此類別會產生超過 500 行的 AWS CloudFormation 範本。部署 AWS CDK 應用程式會產生超過 50 種下列類型的資源：
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-eip.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routetable.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routetable.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-route-table-assoc.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet-route-table-assoc.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc-gateway-attachment.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html) 
+  [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html) 

## AWS CDK 功能
<a name="home-features"></a>

### AWS CDKGitHub 儲存庫
<a name="home-features-repo"></a>

如需官方 AWS CDK GitHub儲存庫，請參閱 [aws-cdk](https://github.com/aws/aws-cdk)。在這裡，您可以提交[問題](https://github.com/aws/aws-cdk/issues)、檢視我們的[授權](https://github.com/aws/aws-cdk/blob/main/LICENSE)、追蹤[版本](https://github.com/aws/aws-cdk/releases)等。

由於 AWS CDK 是開放原始碼，因此團隊鼓勵您做出貢獻，使其成為更好的工具。如需詳細資訊，請參閱[貢獻至 AWS 雲端開發套件 (AWS CDK)](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md)。

### AWS CDK API 參考
<a name="home-features-api"></a>

 AWS CDK 建構程式庫提供 APIs來定義您的 CDK 應用程式，並將 CDK 建構新增至應用程式。如需詳細資訊，請參閱 [AWS CDK API 參考](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)。

### 建構程式設計模型
<a name="home-features-cpm"></a>

建構程式設計模型 (CPM) 將 AWS CDK 背後的概念延伸到其他網域。其他使用 CPM 的工具包括：
+  適用於 [Terraform 的 CDK](https://www.terraform.io/docs/cdktf/index.html) (CDKtf)
+  [CDK for Kubernetes](https://cdk8s.io/) (CDK8s)
+  [Projen](https://github.com/projen/projen)，用於建置專案組態

### 建構中樞
<a name="home-features-hub"></a>

[Construct Hub](https://constructs.dev/) 是線上登錄檔，您可以在其中尋找、發佈和共用開放原始碼 AWS CDK 程式庫。

## 後續步驟
<a name="home-next"></a>

若要開始使用 AWS CDK，請參閱 [AWS CDK 入門](getting-started.md)。

## 進一步了解
<a name="home-learn"></a>

若要繼續了解 AWS CDK，請參閱以下內容：
+  ** [了解 AWS CDK 核心概念](core-concepts.md) ** – AWS CDK 的重要概念和術語。
+  ** [AWS CDK 研討會](https://cdkworkshop.com/) ** – 了解和使用 AWS CDK 的實作研討會。
+  ** [AWS CDK 模式](https://cdkpatterns.com/) ** – 無 AWS 伺服器架構模式的開放原始碼集合，由 AWS 專家為 AWS CDK 建置。
+  ** [AWS CDK 程式碼範例](https://github.com/aws-samples/aws-cdk-examples) ** – 範例 AWS CDK 專案的GitHub儲存庫。
+  ** [cdk.dev](https://cdk.dev/) ** – AWS CDK 的社群驅動中樞，包括社群Slack工作區。
+  ** [絕佳的 CDK](https://github.com/kalaiser/awesome-cdk) ** – 儲存GitHub庫包含 AWS CDK 開放原始碼專案、指南、部落格和其他資源的精選清單。
+  ** [AWS 解決方案建構 –](https://aws.amazon.com/solutions/constructs/) ** Vetted，組態基礎設施即程式碼 (IaC) 模式，可輕鬆組合到生產就緒的應用程式。
+  ** [AWS 開發人員工具部落格](https://aws.amazon.com/blogs/developer/category/developer-tools/aws-cloud-development-kit/) ** – 針對 AWS CDK 篩選的部落格文章。
+  ** [AWS 堆疊溢位上的 CDK](https://stackoverflow.com/questions/tagged/aws-cdk) ** – 在 上以 **aws-cdk** 標記的問題Stack Overflow。
+  適用於** [AWSAWS Cloud9 的 CDK 教學課程](https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-cdk.html) ** – 搭配 AWS Cloud9 開發環境使用 AWS CDK 的教學課程。

若要進一步了解 AWS CDK 的相關主題，請參閱以下內容：
+  ** [AWS CloudFormation 概念](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html) ** – 由於 AWS CDK 是為與 AWS CloudFormation 搭配使用而建置，因此建議您學習並了解 key AWS CloudFormation 概念。
+  ** [AWS 詞彙表](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html) ** – 跨 使用的關鍵術語定義 AWS。

若要進一步了解可用於簡化無伺服器應用程式開發和部署的 AWS CDK 相關工具，請參閱以下內容：
+  ** [AWS 無伺服器應用程式模型](https://aws.amazon.com/serverless/sam/) ** – 開放原始碼開發人員工具，可簡化並改善建置和執行無伺服器應用程式的體驗 AWS。
+  ** [AWS Chalice](https://github.com/aws/chalice) ** – 在 Python 中撰寫無伺服器應用程式的架構。