AWS Fargate での Amazon ECS - Amazon Elastic Container Service

AWS Fargate での Amazon ECS

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

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

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

AWS Fargate での Amazon ECS は、以下のリージョンでサポートされています。該当する場合、サポートされているアベイラビリティーゾーン ID が記載されています。

リージョン名 リージョン

米国東部 (オハイオ)

us-east-2

米国東部(バージニア北部)

us-east-1

米国西部 (北カリフォルニア)

us-west-1 (usw1-az1 および usw1-az3 のみ)

米国西部 (オレゴン)

us-west-2

アフリカ (ケープタウン)

af-south-1

アジアパシフィック (香港)

ap-east-1

アジアパシフィック (ムンバイ)

ap-south-1

アジアパシフィック (大阪)

ap-northeast-3

アジアパシフィック (ソウル)

ap-northeast-2

アジアパシフィック (シンガポール)

ap-southeast-1

アジアパシフィック (シドニー)

ap-southeast-2

アジアパシフィック (東京)

ap-northeast-1 (apne1-az1apne1-az2 および apne1-az4 のみ)

カナダ (中部)

ca-central-1 (cac1-az1 および cac1-az2 のみ)

中国 (北京)

cn-north-1 (cnn1-az1 および cnn1-az2 のみ)

中国 (寧夏)

cn-northwest-1

欧州 (フランクフルト)

eu-central-1

欧州 (アイルランド)

eu-west-1

欧州 (ロンドン)

eu-west-2

欧州 (パリ)

eu-west-3

ヨーロッパ (ミラノ)

eu-south-1

欧州 (ストックホルム)

eu-north-1

南米 (サンパウロ)

sa-east-1

中東 (バーレーン)

me-south-1

AWS GovCloud (米国東部)

us-gov-east-1

AWS GovCloud (US-West)

us-gov-west-1

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

タスク定義

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 パラメータはサポートされません。詳細については、「ボリューム」を参照してください。

タスク定義が Fargate で使用できることを検証するために、タスク定義を登録する際に以下を指定できます。

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

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

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

ネットワークモード

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

ネットワーク設定は、サービスを作成する場合、またはタスクを手動で実行する場合にも必要です。詳細については、「タスクネットワーキング」を参照してください。

タスク CPU とメモリ

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

CPU の値

メモリの値

256 (.25 vCPU)

0.5 GB、1 GB、2 GB

512 (.5 vCPU)

1 GB、2 GB、3 GB、4 GB

1024 (1 vCPU)

2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB

2048 (2 vCPU)

4 GB ~ 16 GB (1 GB のインクリメント)

4096 (4 vCPU)

8 GB ~ 30 GB (1 GB のインクリメント)

タスクリソースの制限

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

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

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

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

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

ログ記録

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

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 ログドライバーを使用する」を参照してください。

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

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

Amazon ECS タスク実行 IAM ロール

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

タスク定義の例

以下は、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", "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }

タスクストレージ

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

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

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

タスクとサービス

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

タスクネットワーキング

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

パブリックサブネットを使用している場合は、ネットワークインターフェイスにパブリック IP アドレスを指定するかどうかを決定します。パブリックサブネットの Fargate タスクを使用してコンテナイメージをプルするには、タスクの Elastic Network Interface に、インターネットへのルートまたはリクエストをインターネットにルーティングできる NAT ゲートウェイを持つパブリック IP アドレスが割り当てられている必要があります。プライベートサブネット内の Fargate タスクでコンテナイメージをプルするには、リクエストをインターネットにルーティングするためにプライベートサブネットに NAT ゲートウェイがアタッチされている必要があります。詳細については、「Amazon ECS タスクネットワーキング」を参照してください。

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

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

サービスの負荷分散

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

Amazon ECS サービスは、Fargate、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 を使用してFargate タスクの Amazon ECS に UDP トラフィックをルーティングできるのは、プラットフォームバージョン 1.4 を使用している場合と、次のリージョンで起動されたタスクでのみサポートされます。

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

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

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

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

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

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 タスクで Fargate と Fargate Spot キャパシティーの両方を使用できます。

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

使用状況メトリクス

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

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

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

タスクのリタイア

AWS によりタスクをホストしている基盤のハードウェアで回復不可能な障害が検出されるか、セキュリティの問題がパッチ適用される必要がある場合、Fargate タスクのリタイアが予定されます。ほとんどのセキュリティパッチは、ユーザーの操作を必要とせずに、またはタスクを再起動する必要なく、透過的に処理されます。しかし、特定の問題については、タスクを再起動する必要があります。

予定されたリタイア日になると、タスクは AWS によって停止または終了されます。タスクがサービスの一部で、自動的に停止された場合、サービスのスケジューラにより、そのタスクを置き換える新しいタスクが開始されます。スタンドアロンタスクを使用する場合は、タスクのリタイアの通知が送信されます。詳細については、「タスクのリタイア」を参照してください。

Savings Plans

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

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