AWS Fargate での Amazon ECS - Amazon Elastic Container Service

AWS Fargate での Amazon ECS

AWS Fargate Fargate はAmazon ECSで使用できるテクノロジーであり、サーバーやAmazon EC2インスタンスの クラスターを管理することなくコンテナを実行できます。AWS Fargate を使用すると、コンテナを実行するために仮想マシンのクラスターをプロビジョニング、設定、スケールする必要がありません。これにより、サーバータイプの選択、クラスターをスケールするタイミングの決定、クラスターのパッキングの最適化を行う必要がなくなります。

Fargate 起動タイプを使用してタスクやサービスを実行する場合、アプリケーションをコンテナにパッケージ化し、CPU とメモリ要件を指定して、ネットワークとIAM ポリシーを定義して、アプリケーションを起動します。各Fargate タスクは、独自の分離境界を持ち、基盤となるカーネル、CPU リソース、メモリリソース、Elastic Network Interface を別のタスクと共有しません。

Fargate は、Amazon Linux 2 および Microsoft Windows 2019 Server Full および Core エディション向けのプラットフォームバージョンを提供しています。特に明記されていない限り、このページの情報はすべての Fargate プラットフォームに適用されます。

このトピックでは、Fargate タスクおよびサービスのさまざまなコンポーネントを説明し、Amazon ECSでFargateを使用する際の特別な考慮事項について説明します。

Fargate で Linux コンテナをサポートするリージョンの情報については、「AWS Fargate の Linux コンテナをサポートしているリージョン」を参照してください。

Fargate で Windows コンテナをサポートするリージョンの情報については、「AWS Fargate の Windows コンテナをサポートしているリージョン」を参照してください。

タスク定義

AWS Fargate での Amazon ECS タスクは、使用可能なすべてのタスク定義パラメータをサポートしているわけではありません。一部のパラメータはまったくサポートされていません。また、その他のパラメータはFargateタスクでは異なる動作をします。

次のタスク定義パラメータは Fargateタスクでは無効です:

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • gpu

  • ipcMode

  • links

  • pidMode

  • placementConstraints

  • privileged

  • systemControls

以下のタスク定義パラメータはFargateタスクで有効ですが、注意すべき制限があります:

  • linuxParameters – コンテナに適用される Linux 固有のオプションを指定する場合、capabilities ではadd パラメータはサポートされません。devicessharedMemorySize、および tmpfs パラメータはサポートされません。詳細については、「Linux パラメータ」を参照してください。

  • volumes – Fargateタスクはバインドマウントのホストボリュームのみをサポートするため、dockerVolumeConfiguration パラメータはサポートされません。詳細については、「ボリューム」を参照してください。

  • cpu - AWS Fargate での Windows コンテナの場合、値は 1 vCPU 未満にすることはできません。

タスク定義が Fargateでの使用が有効であることを確認するために、タスク定義を登録する際に以下を指定できます:

  • AWS Management Console の [Requires Compatibilities (互換性が必要)] フィールドで、FARGATE を指定します。

  • AWS CLI で、--requires-compatibilities オプションを指定します。

  • Amazon ECS API で、requiresCompatibilities フラグを指定します。

ネットワークモード

AWS Fargate のAmazon ECS タスク定義では、ネットワークモードが awsvpc に設定されている必要があります。awsvpc ネットワークモードでは、各タスクに独自の Elastic Network Interface を提供します。詳細については、「AWS Fargate 用 Amazon Elastic Container Service ユーザーガイド」の「AWS Fargate タスクネットワーク」を参照してください。

ネットワーク設定は、サービスを作成する場合、またはタスクを手動で実行する場合にも必要です。詳細については、「AWS Fargate 用 Amazon Elastic Container Service ユーザーガイド」の「AWS Fargate タスクネットワーク」を参照してください。

タスクオペレーションシステム

AWS Fargate のタスク定義とコンテナの定義を構成する場合、コンテナが実行するオペレーティングシステムを指定する必要があります。以下のオペレーティングシステムが AWS Fargate でサポートされています。

  • Amazon Linux 2

  • Windows Server 2019 Full

  • Windows Server 2019 Core

タスク CPU アーキテクチャ

Amazon ECS タスク定義には、ARM と X86_64 の 2 つのアーキテクチャを使用できます。

AWS Fargate で Windows コンテナを実行する場合、X86_64 CPU アーキテクチャを備えている必要があります。

AWS Fargate で Linux コンテナを実行する場合、ARM ベースのアプリケーションに X86_64 CPU アーキテクチャ、または ARM64 アーキテクチャを使用できます。詳細については、「Amazon ECSの 64-bit ARM ワークロードの操作」を参照してください。

タスク CPU とメモリ

AWS Fargate の Amazon ECS タスク定義では、CPU とメモリをタスクレベルで指定する必要があります。Fargateタスクのコンテナレベルで CPU とメモリを指定することもできますが、これはオプションです。ほとんどのユースケースでは、タスクレベルでこれらのリソースを指定するだけで十分です。以下の表に、タスクレベル CPU とメモリの有効な組み合わせを示します。

CPU の値 メモリの値 AWS Fargate でサポートされるオペレーティングシステム
256 (.25 vCPU) 512 MiB、1 GB、2 GB Linux
512 (.5 vCPU) 1 GB、2 GB、3 GB、4 GB Linux
1,024 (1 vCPU) 2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB Linux、Windows
2,048 (2 vCPU) 4 GB ~ 16 GB (1 GB のインクリメント) Linux、Windows
4,096 (4 vCPU) 8 GB ~ 30 GB (1 GB のインクリメント) Linux、Windows

タスクリソースの制限

AWS Fargate での Linux コンテナのAmazon ECS タスク定義では、コンテナに設定するリソース制限を定義するための ulimits パラメータがサポートされます。

AWS Fargate での Windows の Amazon ECS タスク定義では、コンテナに設定するリソース制限を定義するための ulimits パラメータがサポートされます。

Fargate でホストされる Amazon ECS タスクは、オペレーションシステムで設定されたデフォルトのリソース制限値を使用します。ただし、Fargate がオーバーライドするnofileリソース制限パラメータを除きます。nofile リソース制限は、コンテナが使用できるオープンファイルの数の制限を設定します。デフォルトのnofileソフト制限は1024で、ハード制限は4096です。

以下は、2 倍になったカスタム nofile 制限を定義する方法を示すタスク定義スニペットの例です。

"ulimits": [ { "name": "nofile", "softLimit": 2048, "hardLimit": 8192 } ]

調整可能なその他のリソース制限の詳細については、リソースの制限 を参照してください。

ログ記録

AWS Fargate の Amazon ECS タスク定義はログ設定の awslogssplunk、および awsfirelens ログドライバーをサポートします。

このawslogsログドライバーは、Amazon CloudWatch Logs にログ情報を送信するように Fargate タスクを設定します。以下に、awslogs ログドライバーが設定されているタスク定義のスニペットを示します。

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }

タスク定義で awslogs ログドライバーを使用してコンテナログをCloudWatch Logs に送信する方法の詳細については、awslogs ログドライバーを使用するを参照してください。

タスク定義での awsfirelens ログドライバーの詳細については、「カスタムログルーティング」を参照してください。

タスク定義での splunk ログドライバーの使用の詳細については、「例: splunk ログドライバー」を参照してください。

Amazon ECS タスク実行IAM ロール

オプションのタスク実行 IAM ロールがあり、これを Fargate に指定することで Fargate タスクが Amazon ECR に対して API コールを実行できます。このAPI コールは、コンテナアプリケーションログを保存するために CloudWatchを呼び出すとともに、コンテナイメージをプルします。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。

Amazon Linux 2 タスク定義の例

以下は、Amazon Linux 2 オペレーティングシステムで Fargate 起動タイプを使用してウェブサーバーをセットアップするタスク定義の例です。

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }

Windows タスク定義の例

以下は、Windows 2019 サーバーオペレーティングシステムで Fargate 起動タイプを使用してウェブサーバーをセットアップするタスク定義の例です。

{ "containerDefinitions": [ { "command": [ "New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc" ], "entryPoint": [ "powershell", "-Command" ], "essential": true, "cpu": 2048, "memory": 4096, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fargate-windows-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample_windows_app", "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ] } ], "memory": "4096", "cpu": "2048", "networkMode": "awsvpc", "family": "windows-simple-iis-2019-core", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "runtimePlatform": { "operatingSystemFamily": "WINDOWS_SERVER_2019_CORE" }, "requiresCompatibilities": [ "FARGATE" ] }

タスクストレージ

Fargate でホストされた Amazon ECS タスクでは、次のストレージタイプがサポートされています:

  • 永続的ストレージ用のAmazon EFS ボリューム。詳細については、「Amazon EFS ボリューム」を参照してください。

  • エフェメラルストレージ用のバインドマウント。詳細については、「バインドマウント」を参照してください。

タスクとサービス

AWS Fargate の Amazon ECS タスク定義を準備してから、サービスを作成する際の考慮事項がいくつかあります。

タスクネットワーク

AWS Fargate の Amazon ECS を使用するタスクでは、awsvpc ネットワークモードが必要です。これは各タスクに Elastic Network Interface を提供します。このネットワークモードを使用したタスクの実行またはサービスの作成時に、ネットワークインターフェイスにアタッチするサブネットを 1 つ以上、またはネットワークインターフェイスに適用するセキュリティグループを 1 つ以上、指定する必要があります。

パブリックサブネットを使用している場合は、ネットワークインターフェイスにパブリック IP アドレスを指定するかどうかを決定します。パブリックサブネットの Fargate タスクを使用してコンテナイメージをプルするには、タスクの Elastic Network Interface に、インターネットへのルートまたはリクエストをインターネットにルーティングできる NAT ゲートウェイを持つパブリック IP アドレスが割り当てられている必要があります。   プライベートサブネットのFargateタスクでコンテナイメージをプルするには、リクエストをインターネットにルーティングするためのNATゲートウェイがサブネットに必要です。Amazon ECR でコンテナイメージをホストする場合、 Amazon ECR を設定してインターフェイス VPC エンドポイントを使用するようにできます。この場合、タスクのプライベート IPv4 アドレスがイメージのプルに使用されます。Amazon ECRインターフェイスエンドポイントの詳細については、Amazon Elastic Container Registry ユーザーガイドAmazon ECR Interface VPC エンドポイント (AWS PrivateLink)を参照してください。

以下は、Fargateサービスの networkConfiguration セクションの例です:

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-12345678" ], "subnets": [ "subnet-12345678" ] } }

サービスの負荷分散

AWS Fargate の Amazon ECS サービスは、オプションで Elastic Load Balancing を使用して、サービスのタスク間でトラフィックを均等に分散するように設定できます。

AWS Fargate の Amazon ECS サービスでは、Application Load Balancer と Network Load Balancer のタイプがサポートされています。Application Load Balancerは、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。Network Load Balancerは、TCP または UDP (またはレイヤー 4)トラフィックをルーティングするために使用されます。詳細については、「ロードバランサーの種類」を参照してください。

また、このようなサービスのターゲットグループを作成する場合は、ターゲットタイプとして ip ではなく、instance を選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2インスタンスではなく、Elastic Network Interface に関連付けられているためです。詳細については、「サービスの負荷分散」を参照してください。

Network Load Balancer を使用して AWS Fargate タスクの Amazon ECS に UDP トラフィックをルーティングするには、プラットフォームバージョン 1.4 を使用する場合と、次のリージョンで起動されたタスクでのみサポートされます。

  • 米国東部 (バージニア北部) - us-east-1

  • 米国西部 (オレゴン) - us-west-2

  • 欧州 (アイルランド) - eu-west-1

  • アジアパシフィック (東京) - ap-northeast-1

プライベートレジストリの認証

AWS Fargate での Amazon ECS タスクは、ベーシック認証を使用して、Docker Hub などのプライベートイメージレジストリで認証できます。プライベートレジストリ認証を有効にすると、タスク定義のプライベート Docker イメージを使用できます。

プライベートレジストリ認証を使用するには、プライベートレジストリの認証情報を含む AWS Secrets Manager を使用してシークレットを作成します。次に、コンテナの定義内で、作成したシークレットの完全な ARN で repositoryCredentials を指定します。以下のタスク定義のスニペットは、必要なパラメータを示します。

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter: "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]

詳細については、「タスクのプライベートレジストリの認証」を参照してください。

クラスター

クラスターには、Fargate および EC2 の両方の起動タイプを使用するタスクが含まれます。AWS Management Consoleでクラスターを表示する際に、FargateとEC2のタスクカウントが別々に表示されます。

クラスターを作成するチュートリアルを含む Amazon ECS クラスターの詳細については、Amazon ECS クラスターを参照してください。

Fargate Spot

Amazon ECS キャパシティープロバイダーでは、Amazon ECS タスクで AWS Fargate と Fargate Spotの両方の容量を使用できます。

AWS Fargate の Windows コンテナは、Fargate Spot キャパシティープロバイダーを使用できません。

Fargate Spot を使用すると、割り込み許容のある Amazon ECS タスクを、AWS Fargate 料金と比較して割引料金で実行できます。Fargate Spot は、予備のコンピュートキャパシティーでタスクを実行します。AWS がキャパシティーを戻す必要がある場合、タスクは中断され、2 分間の警告が表示されます。詳細については、「AWS Fargate キャパシティープロバイダー」を参照してください。

使用状況メトリクス

CloudWatch 使用状況メトリクスを使用して、アカウントのリソースの使用状況を把握できます。これらのメトリクスを使用して、CloudWatch グラフやダッシュボードで現在のサービスの使用状況を可視化できます。

AWS Fargate 使用状況メトリクスは、AWS のサービスクォータに対応しています。使用量がサービスクォータに近づいたときに警告するアラームを設定することもできます。AWS Fargate のサービスクォータの詳細については、「AWS Fargate Service Quotas」を参照してください。

AWS Fargate 使用量メトリクスの詳細は、「AWS Fargate用 Amazon Elastic Container Service ユーザーガイド」の「AWS Fargate 使用量メトリクス」を参照してください。 

タスクの保守

AWS でホストされている Amazon ECS タスクにセキュリティまたはインフラストラクチャの更新が必要であると AWS Fargate が判断した場合、タスクを停止し、それらを置き換えるために新しいタスクを起動する必要があります。詳細については、Amazon Elastic Container Service ユーザーガイドAWS Fargate用タスクの保守を参照してください。

次の表で、これらのシナリオについて説明します。

タスクタイプ 問題 [Action] (アクション)

スタンドアロンのタスク

ホストの問題

タスクの終了通知は、AWS Health DashboardとE メールを使用して送信されます。タスクの終了日までにアクションが実行されない場合、AWS はタスクを停止します。

セキュリティ脆弱性

タスクの終了通知は、AWS Health DashboardとE メールを使用して送信されます。タスクの終了日までにアクションが実行されない場合、AWS はタスクを停止します。

サービスタスク

ホストの問題

タスクは AWS によって停止され、サービススケジューラは、サービスの必要数を維持しようとして新しいタスクを起動します。通知は送信されません。

セキュリティ脆弱性

タスクの終了通知は、AWS Health DashboardとE メールを使用して送信されます。タスクの終了日までにアクションが実行されない場合、 AWSはタスクを停止し、サービススケジューラは、サービスの必要数を維持しようとして新しいタスクを起動します。

Savings Plans

Savings Plans は、AWS の使用料金を大幅に削減できる料金モデルです。1〜3 年の期間、1 時間 につき USD 単位で一定の使用量を守ることにより、その使用に対する料金が低くなります。詳細については、 Savings Plans ユーザーガイドを参照してください

AWS Fargate の使用に応じた Savings Plan を作成するには、[Compute Savings Plans] タイプを使用します。開始するには、Savings Plans ユーザーガイドSavings Plans を開始するを参照してください。

AWS Fargate での Windows コンテナの考慮事項

AWS Fargate の Windows コンテナは以下のオペレーティングシステムをサポートしています。

  • Windows Server 2019 Full

  • Windows Server 2019 Core

AWS が、オペレーティングシステムのライセンス管理を行うため、追加の Microsoft ライセンスは必要ありません。

AWS Fargate の Windows コンテナは、awslogs ドライバをサポートしています。詳細については、「awslogs ログドライバーを使用する」を参照してください。

タスクは Linux コンテナまたは Windows コンテナのいずれかを実行できます。両方のコンテナタイプを実行する必要がある場合は、個別のタスクを作成する必要があります。

Fargate の Windows コンテナでは、以下の機能はサポートされていません。

  • グループ管理サービスアカウント (gMSA)

  • Amazon FSx

  • ENI トランキング

  • タスク用 App Mesh サービスとプロキシの統合

  • タスク用 Firelens ログルーターの統合

  • 設定可能なエフェメラルストレージ

  • EFS ボリューム

  • Fargate Spot キャパシティープロバイダー

  • イメージボリューム

    Dockerfile volume オプションは無視されます。代わりに、タスクの定義でバインドマウントを使用します。詳細については、「バインドマウント」を参照してください。

開始チュートリアル

以下のチュートリアルは、Amazon ECS で AWS Fargate の使用開始に役立ちます。