Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

Amazon ECS の AWS Fargate

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

Fargate 起動タイプを使用してタスクやサービスを実行する場合、アプリケーションをコンテナにパッケージ化し、CPU およびメモリ要件を指定して、ネットワーキングおよび IAM ポリシーを定義してから、アプリケーションを起動します。

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

Amazon ECS での AWS Fargate は、現在以下のリージョンでのみ利用可能です。

リージョン名 サービス対象
米国東部(バージニア北部) us-east-1
米国東部 (オハイオ) us-east-2
米国西部 (オレゴン) us-west-2
欧州 (アイルランド) eu-west-1
欧州 (フランクフルト) eu-central-1
アジアパシフィック (東京) ap-northeast-1
アジアパシフィック (シンガポール) ap-southeast-1
アジアパシフィック (シドニー) ap-southeast-2

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

タスク定義

Fargate 起動タイプを使用するタスクは利用可能なタスク定義パラメータのすべてをサポートしているわけではありません。一部のパラメータはサポートされていません。また、Fargate タスクでは動作が異なるパラメータがあります。

次のタスク定義パラメータは Fargate 起動タイプでは無効です。

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • links

  • host および sourcePath

  • linuxParameters

  • placementConstraints

  • privileged

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

  • AWS マネジメントコンソール の [Requires Compatibilities (互換性が必要)] フィールドで、FARGATE を指定します。

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

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

ネットワークモード

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

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

タスク CPU とメモリ

Fargate タスク定義では、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 タスク定義はログ設定の awslogs ログドライバーのみをサポートします。これは、Fargate タスクがログ情報を Amazon CloudWatch Logs に送信するように設定します。以下に、awslogs ログドライバーが設定されているタスク定義のスニペットを示します。

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

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

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 タスクはプロビジョニング時に次のストレージを受け取ります。タスクストレージは一時的なものです。Fargate タスクが停止すると、ストレージは削除されます。

  • 10 GB の Docker Layer ストレージ

  • ボリュームマウント用の追加 4 GB。これはタスク定義内のvolumesmountPoints および volumesFrom パラメータを使用してマウントしコンテナ間で共有できます。

    注記

    host および sourcePath パラメータはサポートされていません。

Amazon ECS のデフォルトのサービスの制限の詳細については、「Amazon ECS サービス制限」を参照してください。

以下に、2 つのコンテナが 1 つのボリュームを共有するタスク定義のスニペットを示します。

{ "containerDefinitions": [ { "image": "my-repo/database", "mountPoints": [ { "containerPath": "/var/scratch", "sourceVolume": "database_scratch" } ], "name": "database1", } { "image": "my-repo/database", "mountPoints": [ { "containerPath": "/var/scratch", "sourceVolume": "database_scratch" } ], "name": "database2", } ], "volumes": [ { "name": "database_scratch" } ] }

タスクとサービス

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

タスクネットワーキング

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

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

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

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

awsvpc ネットワークモードを使用するタスクを含むサービス (例: 起動タイプが Fargate のサービス) では、Application Load Balancer および ネットワークロードバランサー のみサポートされており、Classic Load Balancer はサポートされていません。また、このようなサービス用にターゲットグループを作成する場合は、ターゲットタイプとして instance ではなく、ip を選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。詳細については、「サービスロードバランシング」を参照してください。

クラスター

クラスターには、Fargate および EC2 の両方の起動タイプを使用してタスクを含めることができます。AWS マネジメントコンソールでクラスターを表示する際には、Fargate タスクと EC2 タスクの数は別々に表示されます。

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