とは AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

これは AWS CDK v2 デベロッパーガイドです。古い CDKv1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

とは AWS CDK

AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、 を通じてプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです AWS CloudFormation。

AWS CDK は、主に 2 つの部分で構成されています。

  • AWS CDK コンストラクトライブラリ — コンストラクトと呼ばれる、事前に記述されたモジュール式で再利用可能なコードのコレクションで、インフラストラクチャを迅速に開発するために使用、変更、統合できます。構築ライブラリの目的は、 AWS CDK でアプリケーションを構築するときに AWS サービスを定義して統合するために必要な複雑さを減らすことです AWS。

  • AWS CDK コマンドラインインターフェイス (AWS CDKCLI) — CDKアプリケーションを操作するためのコマンドラインツール。CDK CLI を使用して、 AWS CDK プロジェクトを作成、管理、デプロイします。CDK CLI は CDK Toolkit とも呼ばれます。

は、TypeScript、、JavaScript、Python、Java、C#/.Netおよび AWS CDK をサポートしますGo。これらのサポートされているプログラミング言語のいずれかを使用して、コンストラクト と呼ばれる再利用可能なクラウドコンポーネントを定義できます。これらをスタックとアプリケーションまとめて構成します。次に、CDKアプリケーションを にデプロイ AWS CloudFormation して、 リソースをプロビジョニングまたは更新します。

AWS CDK app structure with stacks, constructs, and deployment to CloudFormation.

の利点 AWS CDK

を使用して、プログラミング言語のかなりの表現力を備えた、信頼性が高く、スケーラブルで、費用対効果の高いアプリケーションをクラウドで AWS CDK 開発します。このアプローチには、次のような多くの利点があります。

Infrastructure as Code (IaC) の開発と管理

Infrastructure as Code を実践して、プログラム、説明、宣言的な方法でインフラストラクチャを作成、デプロイ、維持します。IaC では、開発者がコードを処理するのと同じ方法でインフラストラクチャを扱います。これにより、インフラストラクチャを管理するためのスケーラブルで構造化されたアプローチがもたらされます。IaC の詳細については、 AWS ホワイトペーパー DevOps の「 入門」の「コードとしてのインフラストラクチャ」を参照してください。

を使用すると AWS CDK、インフラストラクチャ、アプリケーションコード、および設定をすべて 1 か所に配置し、すべてのマイルストーンでクラウドにデプロイ可能な完全なシステムを確保できます。コードレビュー、ユニットテスト、出典管理などのソフトウェアエンジニアリングのベストプラクティスを採用して、インフラストラクチャをより堅牢にします。

汎用プログラミング言語を使用してクラウドインフラストラクチャを定義する

では AWS CDK、次のプログラミング言語のいずれかを使用して、クラウドインフラストラクチャを定義できます: TypeScript、JavaScript、Python、Java、C#/.Net、および Go。任意の言語を選択し、パラメータ、条件、ループ、構成、継承などのプログラミング要素を使用して、インフラストラクチャの望ましい結果を定義します。

同じプログラミング言語を使用して、インフラストラクチャとアプリケーションロジックを定義します。

構文の強調表示やインテリジェントなコード補完など、任意の IDE (統合開発環境) でインフラストラクチャを開発する利点が得られます。

Code snippet showing AWS CDK setup for ECS クラスター with VPC and Fargate service configuration.
によるインフラストラクチャのデプロイ AWS CloudFormation

AWS CDK は と統合 AWS CloudFormation して、 にインフラストラクチャをデプロイしてプロビジョニングします AWS。 AWS CloudFormation は、 でサービスをプロビジョニングするためのリソースとプロパティ設定を広範囲にサポート AWS のサービス するマネージド です AWS。を使用すると AWS CloudFormation、エラー時にロールバックして、インフラストラクチャのデプロイを予測どおりに繰り返し実行できます。に既に慣れている場合は AWS CloudFormation、 の使用を開始するときに新しい IaC 管理サービスを学ぶ必要はありません AWS CDK。

コンストラクトを使用してアプリケーションの開発をすばやく開始する

コンストラクトと呼ばれる再利用可能なコンポーネントを使用して共有することで、開発を高速化します。低レベルのコンストラクトを使用して、個々の AWS CloudFormation リソースとそのプロパティを定義します。高レベルのコンストラクトを使用して、アプリケーションのより大きなコンポーネントをすばやく定義し、 AWS リソースの適切で安全なデフォルトを使用して、より少ないコードでより多くのインフラストラクチャを定義します。

独自のユースケースに合わせてカスタマイズされた独自のコンストラクトを作成し、組織全体または一般ユーザーと共有します。

の例 AWS CDK

以下は、 AWS CDK コンストラクトライブラリを使用して AWS Fargate (Fargate) 、起動タイプで Amazon Elastic Container Service (Amazon ECS) サービスを作成する例です。この例の詳細については、「」を参照してください例: を使用して AWS Fargate サービスを作成する AWS CDK

TypeScript
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 }); } }
JavaScript
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 }
Python
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
Java
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(); } }
C#
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, }); } }
Go
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 }

このクラスは、 AWS CloudFormation 500 行以上のテンプレートを生成します。 AWS CDK アプリケーションをデプロイすると、次のタイプの 50 を超えるリソースが生成されます。

AWS CDK features

AWS CDKGitHub リポジトリ

公式 AWS CDK GitHubリポジトリについては、「aws-cdk」を参照してください。ここでは、問題の送信、ライセンスの表示、リリースの追跡などを行うことができます。

AWS CDK はオープンソースであるため、チームはさらに優れたツールになるように貢献することをお勧めします。詳細については、「 への寄稿 AWS Cloud Development Kit (AWS CDK)」を参照してください。

AWS CDK API リファレンス

AWS CDK コンストラクトライブラリは、CDKアプリケーションを定義し、アプリケーションにCDKコンストラクトを追加APIsするために を提供します。詳細については、「 AWS CDK APIリファレンス」を参照してください。

コンストラクトプログラミングモデル

プログラミングモデルの構築 (CPM) は、 の背後にある概念を追加のドメイン AWS CDK に拡張します。を使用するその他のツールCPMは次のとおりです。

Construct Hub

Construct Hub は、オープンソース AWS CDK ライブラリを検索、公開、共有できるオンラインレジストリです。

次のステップ

の使用を開始するには AWS CDK、「」を参照してくださいの開始方法 AWS CDK

詳細

について学習を続けるには AWS CDK、以下を参照してください。

に関連するトピックの詳細については AWS CDK、以下を参照してください。

  • AWS CloudFormation の概念 – AWS CDK は で動作するように構築されているため AWS CloudFormation、主要な AWS CloudFormation 概念を学習して理解することをお勧めします。

  • AWS 用語集 — 全体で使用される主要な用語の定義 AWS。

サーバーレスアプリケーションの開発とデプロイを簡素化するために使用できる AWS CDK に関連するツールの詳細については、以下を参照してください。

  • AWS Serverless Application Model – でサーバーレスアプリケーションを構築して実行するエクスペリエンスを簡素化および改善するオープンソースのデベロッパーツール AWS。

  • AWSChalice – でサーバーレスアプリケーションを記述するためのフレームワークPython。