AWS Fargate での Amazon ECS
AWS Fargate は、Amazon ECS とともに使用して Amazon EC2 インスタンスでサーバーまたはクラスターを管理する必要なくコンテナ
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 |
アジアパシフィック (ソウル) |
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-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
パラメータはサポートされません。devices
、sharedMemorySize
、および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 タスク定義はログ設定の awslogs
、splunk
、firelens
、および 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 プラットフォームバージョン 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。これはタスク定義内の
volumes
、mountPoints
および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
" ]
}
}
サービスの負荷分散
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 マネジメントコンソール でクラスターを表示する際には、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 使用状況メトリクスの詳細については、AWS Fargate 用 Amazon Elastic Container Service ユーザーガイドの「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 の開始方法」を参照してください。