これは v2 AWS CDK デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
この例では、Amazon ECR のイメージからインターネット向け Application Load Balancer が前面にある Amazon Elastic Container Service (Amazon ECS) クラスターで実行されている AWS Fargate サービスを作成する方法を示します。
Amazon ECS は、クラスターで Docker コンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。Amazon ECS が管理するサーバーレスインフラストラクチャにクラスターをホストするには、Fargate 起動タイプを使用してサービスまたはタスクを起動します。また、Amazon EC2 起動タイプを使用して、現在管理している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのクラスターにタスクをホストすることで、さらに強力な統制力を得ることができます。
この例では、Fargate 起動タイプを使用していくつかのサービスを起動します。を使用して Fargate サービス AWS Management Console を作成したことがある場合は、そのタスクを実行するための多くのステップがあることがわかります。 AWS には、Fargate サービスの作成を順を追って説明するチュートリアルとドキュメントのトピックがいくつかあります。
この例では、 AWS CDKを使用して同様の Fargate サービスを作成します。
この例で使用されている Amazon ECS コンストラクトは、以下の利点を提供することで AWS サービスの使用に役立ちます。
-
ロードバランサーを自動的に設定します。
-
ロードバランサー用のセキュリティグループを自動的に開きます。これにより、ロードバランサーは、セキュリティグループを明示的に作成しなくてもインスタンスと通信できるようになります。
-
ターゲットグループにアタッチされているサービスとロードバランサー間の依存関係を自動的に順序付けます。この場合、 AWS CDK は、インスタンスの作成より先にリスナーを作成するという正しい順序を強制します。
-
自動的にスケールするグループのユーザーデータを自動的に設定します。これにより、クラスターを AMI に関連付けるための正しい設定が作成されます。
-
パラメータの組み合わせを早期に検証します。これにより、 AWS CloudFormation 問題が早期に明らかになり、デプロイ時間を節約できます。たとえば、作業によっては、メモリ設定の不適切な設定は容易に起こりえます。以前は、アプリをデプロイするまでエラーを発見できませんでした。しかし、 AWS CDK は設定ミスを検出し、アプリを合成するときにエラーを出力できるようになりました。
-
Amazon ECR からのイメージを使用する場合、Amazon Elastic Container Registry (Amazon ECR) のアクセス許可を自動的に追加します。
-
自動的にスケールします。 AWS CDK には、Amazon EC2 クラスターを使用するときにインスタンスを自動スケーリングするためのメソッドが用意されています。Fargate クラスターでインスタンスを使用する場合、これは自動的に行われます。
さらに、 は、自動スケーリングがインスタンスを停止しようとしても、タスクが実行されているか、そのインスタンスでスケジュールされている場合に、インスタンスが削除され AWS CDK ないようにします。
以前は、この機能を実現するためには Lambda 関数を作成する必要がありました。
-
アセットサポートを提供します。これにより、マシンから Amazon ECS にソースをワンステップでデプロイできるようになります。以前は、アプリケーションソースを使用するには、Amazon ECR へのアップロードや Docker イメージの作成など、複数の手順を手動で実行する必要がありました。
重要
使用するApplicationLoadBalancedFargateService
コンストラクトには多数の AWS コンポーネントが含まれており、その中には、使用していない場合でも、 AWS アカウントにプロビジョニングされたままにしておくと、犠牲にならないコストがかかるものもあります。この例に従って作業する場合は、必ずクリーンアップ (cdk destroy) を実行してください。
CDK プロジェクトを作成する
まず、CDK プロジェクトを作成します。これは、CDK アプリを含む AWS CDK コードを保存するディレクトリです。
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language typescript
次に、アプリケーションを実行し、空のスタックが作成されていることを確認します。
cdk synth
Fargate サービスを作成する
Amazon ECS でコンテナタスクを実行するには、以下の 2 つの方法があります。
-
Fargate
の起動タイプを使用する。この場合、コンテナが実行される物理マシンを Amazon ECS が管理します。 -
EC2
の起動タイプを使用する。この場合、自動スケーリングの指定などの管理は自分で行います。
この例では、インターネット向け Application Load Balancer をフロントとする Amazon ECS クラスターで実行されている Fargate サービスを作成します。
次の AWS コンストラクトライブラリモジュールのインポートをスタックファイルに追加します。
ファイル: lib/my_ecs_construct-stack.ts
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as ecs_patterns from "aws-cdk-lib/aws-ecs-patterns";
スタック内に、以下のコードを追加します。
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 true
});
次に、以下の操作を実行してコードを検証し、スタックを合成します。
cdk synth
このスタックは数百行あるため、ここには表示しません。スタックには、1 つのデフォルトインスタンス、3 つのアベイラビリティーゾーンのプライベートサブネットとパブリックサブネット、およびセキュリティグループが含まれている必要があります。
以下を実行して、スタックをデプロイします。
cdk deploy
AWS CloudFormation は、アプリをデプロイする際に実行する数十のステップに関する情報を表示します。
デプロイが完了すると、Fargate を使用した Amazon ECS サービスが作成され、Docker イメージを実行できるようになります。
クリーンアップ
一般的なメンテナンスのベストプラクティスとして、また不要なコストを最小限に抑えるために、完了したスタックは削除します。
cdk destroy