は何ですか AWS CDK? - AWS Cloud Development Kit (AWS CDK) v2

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

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

は何ですか AWS CDK?

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

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

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

  • AWS CDK Toolkit — CDK アプリを操作するためのコマンドラインツールです。 AWS CDK Toolkit を使用してプロジェクトを作成、管理、デプロイします。 AWS CDK

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

の利点 AWS CDK

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

インフラストラクチャー・アズ・コード (IaC) の開発と管理

インフラストラクチャー・アズ・コードを実践して、プログラム的、記述的、宣言的な方法でインフラストラクチャーを作成、デプロイ、保守しましょう。IaC では、開発者がコードを扱うのと同じようにインフラストラクチャーを扱うことができます。その結果、スケーラブルで構造化されたアプローチでインフラストラクチャーを管理できるようになります。IaC について詳しくは、 AWS ホワイトペーパーの「イントロダクション」の「コードとしてのインフラストラクチャ」を参照してください。 DevOps

を使用すると AWS CDK、インフラストラクチャ、アプリケーションコード、および設定を 1 か所にまとめることができるため、あらゆるマイルストーンでクラウドに導入可能な完全なシステムを構築できます。コードレビュー、単体テスト、ソース管理などのソフトウェアエンジニアリングのベストプラクティスを採用して、インフラストラクチャーをより強固なものにしましょう。

汎用プログラミング言語を使用してクラウド・インフラストラクチャーを定義してください。

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

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

シンタックスハイライトやインテリジェントなコード補完など、お好みの IDE (統合開発環境) でインフラストラクチャーを開発するメリットが得られます。

以下の方法でインフラストラクチャをデプロイできます。 AWS CloudFormation

AWS CDK AWS CloudFormation と統合して、インフラストラクチャをデプロイおよびプロビジョニングします。 AWS AWS CloudFormation は、 AWS のサービス にサービスをプロビジョニングするためのリソースとプロパティの設定を幅広くサポートするマネージャーです。 AWSを使用すると AWS CloudFormation、インフラストラクチャのデプロイを予測どおりに繰り返し実行でき、エラー発生時にロールバックできます。すでに使い慣れている場合は AWS CloudFormation、IaC 管理サービスを使い始めるときに新しい 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 }

このクラスは 500 AWS CloudFormation 行を超えるテンプレートを生成します。 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 コンストラクトを追加するための API が用意されています。詳細については、「 APIリファレンスAWS CDK」を参照してください。

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

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

コンストラクトハブ

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