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

米国西部 (オレゴン)

us-west-2

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

af-south-1

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

ap-east-1

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

ap-south-1 (aps1-az1 および aps1-az3 のみ)

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

ap-northeast-2

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

ap-southeast-1

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

ap-southeast-2

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

ap-northeast-1

カナダ (中部)

ca-central-1

中国 (北京)

cn-north-1

中国 (寧夏)

cn-northwest-1

欧州 (フランクフルト)

eu-central-1

欧州 (アイルランド)

eu-west-1

欧州 (ロンドン)

eu-west-2

欧州 (パリ)

eu-west-3

欧州 (ストックホルム)

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 マネジメントコンソール の [Requires Compatibilities (互換性が必要)] フィールドで、FARGATE を指定します。

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

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

ネットワークモード

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

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

タスク 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 タスクは、デフォルトのリソース制限値を使用します。ただし、Fargate をオーバーライドする nofile リソース制限パラメータを除きます。nofile リソース制限は、コンテナが使用できるオープンファイルの数の制限を設定します。デフォルトの nofile ソフト制限は 1024、ハード制限は Fargate タスク用で 4096 です。これらの制限は、タスクでより多くのファイルを処理する必要がある場合は、タスク定義で調整できます。以下に、nofile 制限が 2 倍になったタスク定義のスニペットを示します。

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

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

ログ記録

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

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 EFS ボリューム。詳細については、「Amazon EFS ボリューム」を参照してください。

  • 非永続ストレージの場合エフェメラルストレージ。

Fargate の各 Amazon ECS タスクはプロビジョニング時に次のエフェメラルストレージを受け取ります。エフェメラルストレージ設定は、タスクで使用しているプラットフォームバージョンによって異なります。Fargate タスクが停止すると、エフェメラルストレージが削除されます。Amazon ECS のデフォルトのサービス制限の詳細については、「Amazon ECS のサービスクォータ」を参照してください。

Fargate プラットフォームバージョン 1.4.0 以降を使用したタスク

プラットフォームバージョン 1.4.0 以降を使用する Fargate タスクのすべての Amazon ECS は、最低 20 GB のエフェメラルストレージを受け取ります。ストレージの容量は調整できません。

2020 年 5 月 28 日以降に開始されるプラットフォームバージョン 1.4.0 以降のタスクでは、エフェメラルストレージは、AWS Fargate 管理の暗号化キーを使用して AES-256 暗号化アルゴリズムで暗号化されます。

Fargate プラットフォームバージョン 1.3.0 以前を使用したタスク

プラットフォームバージョン 1.3.0 以前を使用する Fargate タスクの Amazon ECS の場合、各タスクは次のエフェメラルストレージを受け取ります。

  • 10 GB の Docker Layer ストレージ

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

    注記

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

タスクとサービス

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

タスクネットワーキング

Fargate の Amazon ECS を使用するタスクでは、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 の 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 マネジメントコンソール でクラスターを表示する際には、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 キャパシティープロバイダー」を参照してください。

Fargate タスクのリタイア

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

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

Fargate Savings Plans

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

Fargate の使用に応じた Savings Plan プランを作成するには、[Compute Savings Plans] タイプを使用します。詳細については、「Savings Plans、Amazon ECS」を参照してください。