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

これはAWS CDK v2 開発者ガイドです。古いCDK v1は2022年6月1日にメンテナンスを開始し、今後は重大なバグ修正とセキュリティパッチのみが提供されます。新機能はCDK v2専用に開発されます。CDK v1 Support は、2023 年 6 月 1 日に完全に終了します。

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

AWS CDK とは

AWS Cloud Development Kit (AWS CDK) 開発者ガイドへようこそ。このドキュメントではAWS CDK、コードでクラウドインフラストラクチャを定義し、を通じてプロビジョニングするためのフレームワークについて説明しますAWS CloudFormation。

注記

CDK は v1 と v2 の 2 つのメジャーバージョンでリリースされています。これはAWS CDK v2 の開発者ガイドです。以前の CDK v1 は、2022 年 6 月 1 日にメンテナンスに入りました。CDK v1 Support は 2023 年 6 月 1 日に終了します。

AWS CDK を使用すると、プログラミング言語の優れた表現力を活かして、信頼性が高く、スケーラブルで、コスト効率の高いアプリケーションをクラウドで構築できます。このアプローチには、次のような多くのメリットがあります。

  • AWSリソースに適切で安全なデフォルトを自動的に提供する高レベルの構造を使用して構築し、より少ないコードでより多くのインフラストラクチャを定義できます。

  • パラメーター、条件、ループ、構成、継承などのプログラミングイディオムを使用して、AWSや他の人が提供するビルディングブロックからシステム設計をモデル化します。

  • インフラストラクチャ、アプリケーションコード、構成をすべて1か所にまとめることで、すべてのマイルストーンで完全なクラウド導入可能なシステムを確保できます。

  • コードレビュー、ユニットテスト、ソース管理などのソフトウェアエンジニアリング手法を採用して、インフラストラクチャをより堅牢にします。

  • シンプルかつインテント指向の API を使用して、AWSリソースを (スタック間でも) Connect し、権限を付与します。

  • AWS CloudFormation既存のテンプレートをインポートして、リソースに CDK API を提供します。

  • AWS CloudFormationの機能を活用して、インフラストラクチャのデプロイを予測どおりに繰り返し実行し、エラー発生時にロールバックすることも可能です。

  • インフラストラクチャの設計パターンを、組織内のチーム間または一般ユーザーと簡単に共有できます。

は TypeScript、、Python JavaScript、Java、C#/.Net、および GoAWS CDK をサポートしています。開発者は、サポートされているこれらのプログラミング言語のいずれかを使用して、と呼ばれる再利用可能なクラウドコンポーネントを定義できますコンストラクトスタックアプリケーションこれらを一緒におよびに構成します。

なぜ AWS CDK を使用するのですか?

説明するよりも見せるほうが簡単です!AWS Fargate起動タイプの Amazon ECS サービスを作成する CDK コードを次に示します (これはで使用するコードですを使用して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 }

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

そして、IDE またはエディタ内でのコード補完も忘れないようにしましょう。

による開発AWS CDK

初めての CDK アプリを簡単にセットアップして作成できます。このガイドでは、でサポートされているプログラミング言語(、、Python、Java TypeScript JavaScript、C#)AWS CDKの短いコード例を用意しています。 GitHubより長い例はリポジトリにあります

AWS CDKツールキットは、CDK アプリケーションを操作するためのコマンドラインツールです。AWS CDK開発者はツールキットを使用して、AWS CloudFormationテンプレートなどのアーティファクトを合成したり、AWS開発アカウントにスタックをデプロイしたりできます。diffデプロイされたスタックと照合して、コード変更の影響を理解することもできます。

AWSConstruct LibraryAWS には各サービスのコンストラクトが用意されており、その多くが高レベルの抽象化を提供する「豊富な」API を備えています。AWSConstruct Library の目的は、AWSさまざまなサービスを統合して目標を達成する際に必要となる複雑さとグルーロジックを軽減することですAWS。

注記

は無償で使用できますがAWS CDK、AWSAWS請求対象リソースの作成や使用には料金が これには、Amazon EC2 インスタンスの実行や Amazon S3 ストレージの使用が含まれる場合があります。AWS価格計算ツールを使用して、AWSさまざまなリソースの使用にかかる料金を見積もります。

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

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

Construct Hub は、などの CDKAWS CDK 用の構成ライブラリを検索して公開できるオンラインレジストリです。

その他のドキュメントとリソース

このガイドに加えて、AWS CDKユーザーには次のリソースが利用可能です。

CDK を使用したサーバーレスアプリのリソース

AWS CDKこれらのツールはと連携して、サーバーレスアプリケーションの開発と展開を簡素化できます。

への貢献AWS CDK

AWS CDKはオープンソースであるため、より優れたツールにするために貢献することをチームから奨励しています。詳細については、「寄稿」を参照してください。

アマゾン ウェブ サービスについて

Amazon Web Services (AWS) は、デベロッパーがアプリケーションの開発時に使用できるデジタルインフラストラクチャサービスの集合体です。サービスには、演算能力、ストレージ、データベース、アプリケーション同期(メッセージングとキューイング)があります。

AWS pay-as-you-go はサービスモデルを使用します。料金が発生するのは、ユーザー (すなわちユーザのアプリケーション) が実際に使用したサービスの分のみです。また、をプロトタイプと実験用のプラットフォームとして利用しやすくするためにAWS、AWSには無料利用枠も用意されています。枠では、サービスを利用しても一定のレベル以下であれば無料です。AWSのコストと無料利用枠の詳細については、「Test-DrivingAWS in the Free Usage Tier」(無料利用層でのテスト運用) を参照してください。

AWSアカウントを取得するには、aws.amazon.com にアクセスし、[AWSアカウントの作成] を選択します。