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

AWS Fargate での Amazon ECS

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

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

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

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

リージョン名 リージョン
米国東部(バージニア北部) us-east-1
米国東部 (オハイオ) us-east-2
米国西部 (北カリフォルニア) us-west-1
米国西部 (オレゴン) us-west-2
アジアパシフィック (ムンバイ) ap-south-1
欧州 (アイルランド) eu-west-1
欧州 (ロンドン) eu-west-2
欧州 (フランクフルト) eu-central-1
アジアパシフィック (東京) ap-northeast-1
カナダ (中部) ca-central-1
アジアパシフィック (ソウル) ap-northeast-2
アジアパシフィック (シンガポール) ap-southeast-1
アジアパシフィック (シドニー) ap-southeast-2

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

タスク定義

Fargate 起動タイプを使用するタスクは利用可能なタスク定義パラメータのすべてをサポートしているわけではありません。一部のパラメータはサポートされていません。また、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 マネジメントコンソール の [Requires Compatibilities (互換性が必要)] フィールドで、FARGATE を指定します。

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

  • Amazon ECS 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 および splunk ログドライバーのみをサポートします。

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

タスク定義での 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 タスクはプロビジョニング時に次のストレージを受け取ります。タスクストレージは一時的なものです。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 アドレスが割り当てられている必要があります。プライベートサブネット内の Fargate タスクでコンテナイメージをプルするには、リクエストをインターネットにルーティングするためにプライベートサブネットに NAT ゲートウェイがアタッチされている必要があります。詳細については、「タスクネットワーキングと awsvpc ネットワークモード」を参照してください。

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

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

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

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

Fargate タスクは、基本認証を使用して、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 マネジメントコンソール でクラスターを表示する際には、Fargate タスクと EC2 タスクの数は別々に表示されます。

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

Fargate タスクのリタイア

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

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