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

  • links

  • host および sourcePath

  • linuxParameters

  • placementConstraints

  • privileged

タスク定義が 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 ログドライバーのみをサポートします。これは、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 アドレスが割り当てられている必要があります。プライベートサブネット内の Fargate タスクでコンテナイメージをプルするには、リクエストをインターネットにルーティングするためにプライベートサブネットに NAT ゲートウェイがアタッチされている必要があります。詳細については、「タスクネットワーキングと 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 タスクは、基本認証を使用して、Docker Hub などのプライベートイメージレジストリで認証できます。プライベートレジストリ認証を有効にすると、タスク定義のプライベート Docker イメージを使用できます。

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

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

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

クラスター

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

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

Fargate タスクのリタイア

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

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