を使用した AWS Fargate サービスの作成 AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

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

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

を使用した AWS Fargate サービスの作成 AWS CDK

この例では、Amazon ECR のイメージからインターネット向け Application Load Balancer が前面にある Amazon Elastic Container Service (Amazon ECS) クラスターで実行されている AWS Fargate サービスを作成する方法について説明します。

Amazon ECS は、クラスターで Docker コンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。Fargate 起動タイプを使用してサービスまたはタスクを起動することで、Amazon ECS によって管理されるサーバーレスインフラストラクチャでクラスターをホストできます。より詳細に制御するには、Amazon EC2 起動タイプを使用して管理する Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのクラスターでタスクをホストできます。

このチュートリアルでは、Fargate 起動タイプを使用して一部のサービスを起動する方法を示します。を使用して Fargate サービス AWS Management Console を作成したことがある場合は、そのタスクを実行するための多くのステップがあります。 AWS Fargate サービスの作成手順には、次のようなチュートリアルとドキュメントのトピックがあります。

この例では、同様の Fargate サービスを AWS CDK コード内に作成します。

このチュートリアルで使用する Amazon ECS コンストラクトは、次の利点を提供することで AWS のサービスを使用するのに役立ちます。

  • ロードバランサーを自動的に設定します。

  • ロードバランサーのセキュリティグループを自動的に開きます。これにより、ロードバランサーは、明示的にセキュリティグループを作成しなくてもインスタンスと通信できます。

  • ターゲットグループにアタッチされているサービスとロードバランサー間の依存関係を自動的に順序付けます。この場合、 はインスタンスが作成される前にリスナーを作成する正しい順序 AWS CDK を適用します。

  • グループを自動的にスケーリングするようにユーザーデータを自動的に設定します。これにより、クラスターを AMIs に関連付けるための正しい設定が作成されます。

  • パラメータの組み合わせを早期に検証します。これにより AWS CloudFormation 、問題が早期に発生し、デプロイ時間を節約できます。例えば、タスクによっては、メモリ設定を誤って設定するのは簡単です。以前は、アプリケーションをデプロイするまでエラーは発生しません。ただし AWS CDK 、 は設定ミスを検出し、アプリを合成するときにエラーを出力できるようになりました。

  • Amazon ECR のイメージを使用すると、Amazon Elastic Container Registry (Amazon ECR) のアクセス許可が自動的に追加されます。

  • 自動的にスケーリングします。 AWS CDK には、Amazon EC2 クラスターを使用するときに自動スケーリングインスタンスを使用できるようにするメソッドが用意されています。これは、Fargate クラスターでインスタンスを使用する場合に自動的に行われます。

    さらに、 は、自動スケーリングがインスタンスを強制終了しようとしても、タスクが実行中であるか、そのインスタンスでスケジュールされている場合に、インスタンスが削除される AWS CDK のを防ぎます。

    以前は、この機能を使用するには Lambda 関数を作成する必要がありました。

  • アセットサポートを提供するため、1 回のステップでマシンから Amazon ECS にソースをデプロイできます。以前は、アプリケーションソースを使用するには、Amazon ECR へのアップロードや Docker イメージの作成など、いくつかの手動ステップを実行する必要がありました。

詳細については、「ECS」を参照してください。

重要

使用するApplicationLoadBalancedFargateServiceコンストラクトには多数の AWS コンポーネントが含まれており、その中には、 AWS アカウントでプロビジョニングされたままにしておいた場合、それらを使用しなくても、煩雑ではないコストが発生するものもあります。この例を完了したら、必ず (cdk destroy) をクリーンアップしてください。

ディレクトリの作成と の初期化 AWS CDK

まず、 AWS CDK コードを保持するディレクトリを作成し、次にそのディレクトリに AWS CDK アプリケーションを作成します。

TypeScript
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language typescript
JavaScript
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language javascript
Python
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language python source .venv/bin/activate pip install -r requirements.txt
Java
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language java

これで、Maven プロジェクトを IDE にインポートできます。

C#
mkdir MyEcsConstruct cd MyEcsConstruct cdk init --language csharp

これで、Visual Studio src/MyEcsConstruct.slnで を開くことができます。

アプリケーションを実行し、空のスタックが作成されていることを確認します。

cdk synth

Fargate サービスを作成する

Amazon ECS でコンテナタスクを実行するには、2 つの異なる方法があります。

  • Amazon ECS がコンテナが実行されている物理マシンを管理する Fargate起動タイプを使用します。

  • 自動スケーリングの指定など、管理を行う場所で EC2起動タイプを使用します。

この例では、インターネット向け Application Load Balancer が前面にある ECS クラスターで実行されている Fargate サービスを作成します。

次の AWS 構成ライブラリモジュールのインポートを、示された ファイルに追加します。

TypeScript

ファイル: 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";
JavaScript

ファイル: lib/my_ecs_construct-stack.js

const ec2 = require("aws-cdk-lib/aws-ec2"); const ecs = require("aws-cdk-lib/aws-ecs"); const ecs_patterns = require("aws-cdk-lib/aws-ecs-patterns");
Python

ファイル: my_ecs_construct/my_ecs_construct_stack.py

from aws_cdk import (aws_ec2 as ec2, aws_ecs as ecs, aws_ecs_patterns as ecs_patterns)
Java

ファイル: src/main/java/com/myorg/MyEcsConstructStack.java

import software.amazon.awscdk.services.ec2.*; import software.amazon.awscdk.services.ecs.*; import software.amazon.awscdk.services.ecs.patterns.*;
C#

ファイル: src/MyEcsConstruct/MyEcsConstructStack.cs

using Amazon.CDK.AWS.EC2; using Amazon.CDK.AWS.ECS; using Amazon.CDK.AWS.ECS.Patterns;

コンストラクターの末尾にあるコメントを次のコードに置き換えます。

TypeScript
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 });
JavaScript
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 });
Python
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 True
Java
Vpc vpc = Vpc.Builder.create(this, "MyVpc") .maxAzs(3) // Default is all AZs in region .build(); Cluster cluster = Cluster.Builder.create(this, "MyCluster") .vpc(vpc).build(); // Create a load-balanced Fargate service and make it public ApplicationLoadBalancedFargateService.Builder.create(this, "MyFargateService") .cluster(cluster) // Required .cpu(512) // Default is 256 .desiredCount(6) // Default is 1 .taskImageOptions( ApplicationLoadBalancedTaskImageOptions.builder() .image(ContainerImage.fromRegistry("amazon/amazon-ecs-sample")) .build()) .memoryLimitMiB(2048) // Default is 512 .publicLoadBalancer(true) // Default is true .build();
C#
var vpc = new Vpc(this, "MyVpc", new VpcProps { MaxAzs = 3 // Default is all AZs in region }); var cluster = new Cluster(this, "MyCluster", new ClusterProps { Vpc = vpc }); // Create a load-balanced Fargate service and make it public new ApplicationLoadBalancedFargateService(this, "MyFargateService", new ApplicationLoadBalancedFargateServiceProps { Cluster = cluster, // Required DesiredCount = 6, // Default is 1 TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions { Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample") }, MemoryLimitMiB = 2048, // Default is 256 PublicLoadBalancer = true // Default is true } );

保存し、実行されてスタックが作成されていることを確認します。

cdk synth

スタックは数百行あるため、ここでは表示しません。スタックには、1 つのデフォルトインスタンス、3 つのアベイラビリティーゾーンのプライベートサブネットとパブリックサブネット、およびセキュリティグループが含まれている必要があります。

スタックをデプロイします。

cdk deploy

AWS CloudFormation は、アプリケーションをデプロイするときに実行する数十のステップに関する情報を表示します。

これにより、Fargate 搭載の Amazon ECS サービスを作成して Docker イメージを簡単に実行できます。

クリーンアップ

予期しない AWS 料金が発生しないように、この演習を完了したら AWS CDK スタックを破棄してください。

cdk destroy