AWS CDK とは - AWS クラウド開発キット (AWS CDK) v2

これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 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 CDK CLI) — CDK アプリを操作するためのコマンドラインツールです。CDK CLI を使用して、 AWS CDK プロジェクトを作成、管理、デプロイします。CDK CLI は CDK Toolkit とも呼ばれます。

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

CDK アプリケーションとプロセスの概要

AWS CDK の利点

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

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

コードとしてのインフラストラクチャを実践し、プログラム的、説明的、宣言的な方法でインフラストラクチャを作成、デプロイ、維持します。IaC を使用すると、デベロッパーがコードを扱う方法と同じようにインフラストラクチャを扱います。インフラストラクチャの管理にスケーラブルで構造化されたアプローチが得られます。IaC の詳細については、ホワイトペーパーの「Introduction to DevOps on AWS DevOps」の「Infrastructure as code」を参照してください。

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

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

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

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

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

VPC および Fargate サービス設定を使用した ECS クラスターの CDK 設定を示すコードスニペット。
AWS CloudFormation によるインフラストラクチャのデプロイ

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

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

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

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

AWS CDK の例

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

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 }

このクラスは、500 行を超える AWS CloudFormation テンプレートを生成します。 https://github.com/awsdocs/aws-cdk-guide/blob/main/doc_source/my_ecs_construct-stack.yaml AWS CDK アプリケーションをデプロイすると、次のタイプの 50 を超えるリソースが生成されます。

AWS CDK の機能

AWS CDKGitHub リポジトリ

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

AWS CDK はオープンソースであるため、チームはさらに優れたツールになるように貢献することをお勧めします。詳細については、AWS 「 クラウド開発キット (AWS CDK) への貢献」を参照してください。

AWS CDK API リファレンス

AWS CDK コンストラクトライブラリにはAPIs が用意されています。詳細については、AWS CDK API リファレンスを参照してください。

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

コンストラクトプログラミングモデル (CPM) は、 AWS CDK の背後にある概念を追加のドメインに拡張します。CPM を使用するその他のツールには次のものが含まれます。

コンストラクトハブ

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

次のステップ

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

詳細はこちら

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

  • AWS CDK の主要な概念を学ぶ – AWS CDK の重要な概念と用語。

  • AWS CDK ワークショップ – AWS CDK を学習して使用する実践的なワークショップ。

  • AWS CDK パターン – AWS エキスパートによって AWS CDK 用に構築された AWS サーバーレスアーキテクチャパターンのオープンソースコレクション。

  • AWS CDK コード例 – AWS CDK プロジェクトの例のGitHubリポジトリ。

  • cdk.dev – コミュニティSlackワークスペースを含む、 AWS CDK のコミュニティ駆動型ハブ。

  • 優れた CDK – AWS CDK オープンソースプロジェクト、ガイド、ブログ、その他のリソースの厳選されたリストを含むGitHubリポジトリ。

  • AWS ソリューション構築 — 本番環境対応のアプリケーションに簡単にアセンブルできる、暗号化された設定Infrastructure as Code (IaC) パターン。

  • AWS デベロッパーツールブログ – AWS CDK 用にフィルタリングされたブログ投稿。

  • AWS CDK on Stack Overflow – の aws-cdk でタグ付けされた質問Stack Overflow。

  • CloudAWSAWS Cloud9 – Cloud AWS Cloud9 開発環境で AWS CDK を使用するためのチュートリアル。

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

  • AWS CloudFormation の概念 – AWS CDK は AWS CloudFormation と連携するように構築されているため、key AWS CloudFormation の概念を学習して理解することをお勧めします。

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

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

  • AWS サーバーレスアプリケーションモデル – サーバーレスアプリケーションの構築と実行のエクスペリエンスを簡素化および改善するオープンソースの開発者ツールです AWS。

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