AWS Fargate での Amazon ECS
AWS Fargate Fargate はAmazon ECSで使用できるテクノロジーであり、サーバーやAmazon EC2インスタンスの クラスターを管理することなくコンテナ
Fargate 起動タイプを使用してタスクやサービスを実行する場合、アプリケーションをコンテナにパッケージ化し、CPU とメモリ要件を指定して、ネットワークとIAM ポリシーを定義して、アプリケーションを起動します。各Fargate タスクは、独自の分離境界を持ち、基盤となるカーネル、CPU リソース、メモリリソース、Elastic Network Interface を別のタスクと共有しません。
Fargate は、Amazon Linux 2 および Microsoft Windows 2019 Server Full および Core エディション向けのプラットフォームバージョンを提供しています。特に明記されていない限り、このページの情報はすべての Fargate プラットフォームに適用されます。
このトピックでは、Fargate タスクおよびサービスのさまざまなコンポーネントを説明し、Amazon ECSで Fargate を使用する際の特別な考慮事項を示しています。
Fargate で Linux コンテナをサポートするリージョンの情報については、「AWS Fargate の Linux コンテナをサポートしているリージョン」を参照してください。
Fargate で Windows コンテナをサポートするリージョンの情報については、「AWS Fargate の Windows コンテナをサポートしているリージョン」を参照してください。
タスク定義
AWS Fargate での Amazon ECS タスクは、使用可能なすべてのタスク定義パラメータをサポートしているわけではありません。一部のパラメータはまったくサポートされていません。また、その他のパラメータはFargateタスクでは異なる動作をします。
次のタスク定義パラメータは Fargateタスクでは無効です:
-
disableNetworking
-
dnsSearchDomains
-
dnsServers
-
dockerSecurityOptions
-
extraHosts
-
gpu
-
ipcMode
-
links
-
pidMode
-
placementConstraints
-
privileged
-
systemControls
-
maxSwap
-
swappiness
以下のタスク定義パラメータはFargateタスクで有効ですが、注意すべき制限があります:
-
linuxParameters
– コンテナに適用される Linux 固有のオプションを指定する場合、capabilities
ではadd
パラメータはサポートされません。devices
、sharedMemorySize
、およびtmpfs
パラメータはサポートされません。詳細については、「Linux パラメータ」を参照してください。 -
volumes
– Fargateタスクはバインドマウントのホストボリュームのみをサポートするため、dockerVolumeConfiguration
パラメータはサポートされません。詳細については、「ボリューム」を参照してください。 -
cpu
- AWS Fargate での Windows コンテナの場合、値は 1 vCPU 未満にすることはできません。
タスク定義が Fargateでの使用が有効であることを確認するために、タスク定義を登録する際に以下を指定できます:
-
AWS Management Console の [Requires Compatibilities (互換性が必要)] フィールドで、
FARGATE
を指定します。 -
AWS CLI で、
--requires-compatibilities
オプションを指定します。 -
Amazon ECS API で、
requiresCompatibilities
フラグを指定します。
ネットワークモード
AWS Fargate のAmazon ECS タスク定義では、ネットワークモードが awsvpc
に設定されている必要があります。awsvpc
ネットワークモードでは、各タスクに独自の Elastic Network Interface を提供します。詳細については、「AWS Fargate 用 Amazon Elastic Container Service ユーザーガイド」の「AWS Fargate タスクネットワーク」を参照してください。
ネットワーク設定は、サービスを作成する場合、またはタスクを手動で実行する場合にも必要です。詳細については、「AWS Fargate 用 Amazon Elastic Container Service ユーザーガイド」の「AWS Fargate タスクネットワーク」を参照してください。
タスクオペレーションシステム
AWS Fargate のタスク定義とコンテナの定義を構成する場合、コンテナが実行するオペレーティングシステムを指定する必要があります。以下のオペレーティングシステムが AWS Fargate でサポートされています。
-
Amazon Linux 2
-
Windows Server 2019 Full
-
Windows Server 2019 Core
-
Windows Server 2022 Full
-
Windows Server 2022 Core
タスク CPU アーキテクチャ
Amazon ECS タスク定義には、ARM と X86_64 の 2 つのアーキテクチャを使用できます。
AWS Fargate で Windows コンテナを実行する場合、X86_64 CPU アーキテクチャを備えている必要があります。
AWS Fargate で Linux コンテナを実行する場合、ARM ベースのアプリケーションに X86_64 CPU アーキテクチャ、または ARM64 アーキテクチャを使用できます。詳細については、「Amazon ECSの 64-bit ARM ワークロードの操作」を参照してください。
タスク CPU とメモリ
AWS Fargate の Amazon ECS タスク定義では、CPU とメモリをタスクレベルで指定する必要があります。Fargateタスクのコンテナレベルで CPU とメモリを指定することもできますが、これはオプションです。ほとんどのユースケースでは、タスクレベルでこれらのリソースを指定するだけで十分です。以下の表に、タスクレベル CPU とメモリの有効な組み合わせを示します。
CPU の値 |
メモリの値 |
AWS Fargate でサポートされるオペレーティングシステム |
---|---|---|
256 (.25 vCPU) |
512 MiB、1 GB、2 GB |
Linux |
512 (.5 vCPU) |
1 GB、2 GB、3 GB、4 GB |
Linux |
1,024 (1 vCPU) |
2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB |
Linux、Windows |
2,048 (2 vCPU) |
4 GB ~ 16 GB (1 GB のインクリメント) |
Linux、Windows |
4,096 (4 vCPU) |
8 GB ~ 30 GB (1 GB のインクリメント) |
Linux、Windows |
8192 (8 vCPU) このオプションには Linux プラットフォーム |
16 GB~60 GB (4 GB のインクリメント) |
Linux |
16384 (16vCPU) このオプションには Linux プラットフォーム |
32 GB~120 GB (8 GB のインクリメント) |
Linux |
タスクリソースの制限
AWS Fargate での Linux コンテナのAmazon ECS タスク定義では、コンテナに設定するリソース制限を定義するための ulimits
パラメータがサポートされます。
AWS Fargate での Windows の Amazon ECS タスク定義では、コンテナに設定するリソース制限を定義するための ulimits
パラメータがサポートされます。
Fargate でホストされる Amazon ECS タスクは、オペレーションシステムで設定されたデフォルトのリソース制限値を使用します。ただし、Fargate がオーバーライドするnofile
リソース制限パラメータを除きます。nofile
リソース制限は、コンテナが使用できるオープンファイルの数の制限を設定します。デフォルトのnofile
ソフト制限は1024
で、ハード制限は4096
です。
以下は、2 倍になったカスタム nofile
制限を定義する方法を示すタスク定義スニペットの例です。
"ulimits": [
{
"name": "nofile",
"softLimit": 2048
,
"hardLimit": 8192
}
]
調整可能なその他のリソース制限の詳細については、リソースの制限 を参照してください。
ログ記録
AWS Fargate の Amazon ECS タスク定義はログ設定の awslogs
、splunk
、および awsfirelens
ログドライバーをサポートします。
この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 ログドライバーを使用するを参照してください。
タスク定義での awsfirelens
ログドライバーの詳細については、「カスタムログルーティング」を参照してください。
タスク定義での splunk
ログドライバーの使用の詳細については、「例: splunk ログドライバー」を参照してください。
Amazon ECS タスク実行IAM ロール
オプションのタスク実行 IAM ロールがあり、これを Fargate に指定することで Fargate タスクが Amazon ECR に対して API コールを実行できます。このAPI コールは、コンテナアプリケーションログを保存するために CloudWatchを呼び出すとともに、コンテナイメージをプルします。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。
Amazon Linux 2 タスク定義の例
以下は、Amazon Linux 2 オペレーティングシステムで 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", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }
Windows タスク定義の例
以下は、Windows 2019 サーバーオペレーティングシステムで Fargate 起動タイプを使用してウェブサーバーをセットアップするタスク定義の例です。
{ "containerDefinitions": [ { "command": [ "New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<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>'; C:\\ServiceMonitor.exe w3svc" ], "entryPoint": [ "powershell", "-Command" ], "essential": true, "cpu": 2048, "memory": 4096, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fargate-windows-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample_windows_app", "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ] } ], "memory": "4096", "cpu": "2048", "networkMode": "awsvpc", "family": "windows-simple-iis-2019-core", "executionRoleArn": "arn:aws:iam::
012345678910
:role/ecsTaskExecutionRole", "runtimePlatform": { "operatingSystemFamily": "WINDOWS_SERVER_2019_CORE" }, "requiresCompatibilities": [ "FARGATE" ] }
タスクストレージ
Fargate でホストされた Amazon ECS タスクでは、次のストレージタイプがサポートされています:
-
永続的ストレージ用のAmazon EFS ボリューム。詳細については、「Amazon EFS ボリューム」を参照してください。
-
エフェメラルストレージ用のバインドマウント。詳細については、「バインドマウント」を参照してください。
タスクとサービス
AWS Fargate の Amazon ECS タスク定義を準備してから、サービスを作成する際の考慮事項がいくつかあります。
タスクネットワーク
AWS Fargate の Amazon ECS を使用するタスクでは、awsvpc
ネットワークモードが必要です。これは各タスクに Elastic Network Interface を提供します。このネットワークモードを使用したタスクの実行またはサービスの作成時に、ネットワークインターフェイスにアタッチするサブネットを 1 つ以上、またはネットワークインターフェイスに適用するセキュリティグループを 1 つ以上、指定する必要があります。
パブリックサブネットを使用している場合は、ネットワークインターフェイスにパブリック IP アドレスを指定するかどうかを決定します。パブリックサブネットの Fargate タスクを使用してコンテナイメージをプルするには、タスクの Elastic Network Interface に、インターネットへのルートまたはリクエストをインターネットにルーティングできる NAT ゲートウェイを持つパブリック IP アドレスが割り当てられている必要があります。 プライベートサブネットのFargateタスクでコンテナイメージをプルするには、リクエストをインターネットにルーティングするためのNATゲートウェイがサブネットに必要です。Amazon ECR でコンテナイメージをホストする場合、 Amazon ECR を設定してインターフェイス VPC エンドポイントを使用するようにできます。この場合、タスクのプライベート IPv4 アドレスがイメージのプルに使用されます。Amazon ECRインターフェイスエンドポイントの詳細については、Amazon Elastic Container Registry ユーザーガイドの Amazon ECR Interface VPC エンドポイント (AWS PrivateLink)を参照してください。
以下は、Fargateサービスの networkConfiguration セクションの例です:
"networkConfiguration": {
"awsvpcConfiguration": {
"assignPublicIp": "ENABLED",
"securityGroups": [ "sg-12345678
" ],
"subnets": [ "subnet-12345678
" ]
}
}
サービスの負荷分散
AWS Fargate の Amazon ECS サービスは、オプションで Elastic Load Balancing を使用して、サービスのタスク間でトラフィックを均等に分散するように設定できます。
AWS Fargate の Amazon ECS サービスでは、Application Load Balancer と Network Load Balancer のタイプがサポートされています。アプリケーションロードバランサーは、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。ネットワークロードバランサーは、TCP または UDP (またはレイヤー 4)トラフィックをルーティングするために使用されます。詳細については、「ロードバランサーの種類」を参照してください。
また、このようなサービスのターゲットグループを作成する場合は、ターゲットタイプとして instance
ではなく、ip
を選択する必要があります。これは、awsvpc
ネットワークモードを使用するタスクは、Amazon EC2インスタンスではなく、Elastic Network Interface に関連付けられているためです。詳細については、「サービスの負荷分散」を参照してください。
Network Load Balancer を使用して AWS Fargate タスクの Amazon ECS に UDP トラフィックをルーティングするには、プラットフォームバージョン 1.4 移行を使用する場合にのみサポートされます。
プライベートレジストリの認証
AWS 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 Management Consoleでクラスターを表示する際に、FargateとEC2のタスクカウントが別々に表示されます。
クラスターを作成するチュートリアルを含む Amazon ECS クラスターの詳細については、Amazon ECS クラスターを参照してください。
Fargate Spot
Amazon ECS キャパシティープロバイダーでは、Amazon ECS タスクで AWS Fargate と Fargate Spotの両方の容量を使用できます。
AWS Fargate の Windows コンテナは、Fargate Spot キャパシティープロバイダーを使用できません。
Fargate Spot を使用すると、割り込み許容のある Amazon ECS タスクを、AWS Fargate 料金と比較して割引料金で実行できます。Fargate Spot は、予備のコンピュートキャパシティーでタスクを実行します。AWS がキャパシティーを戻す必要がある場合、タスクは中断され、2 分間の警告が表示されます。詳細については、「AWS Fargate キャパシティープロバイダー」を参照してください。
使用状況メトリクス
CloudWatch 使用状況メトリクスを使用して、アカウントのリソースの使用状況を把握できます。これらのメトリクスを使用して、CloudWatch グラフやダッシュボードで現在のサービスの使用状況を可視化できます。
AWS Fargate 使用状況メトリクスは、AWS のサービスクォータに対応しています。使用量がサービスクォータに近づいたときに警告するアラームを設定することもできます。AWS Fargate のサービスクォータの詳細については、「AWS Fargate Service Quotas」を参照してください。
AWS Fargate 使用量メトリクスの詳細は、「AWS Fargate用 Amazon Elastic Container Service ユーザーガイド」の「AWS Fargate 使用量メトリクス」を参照してください。
タスクの保守
AWSでホストされているAmazonECSタスクにセキュリティまたはインフラストラクチャの更新が必要であるとAWS Fargateが判断した場合、タスクを停止し、それらを置き換えるために新しいタスクを起動する必要があります。詳細については、Amazon Elastic Container Service ユーザーガイドAWS Fargate用のタスクの保守を参照してください。
次の表で、これらのシナリオについて説明します。
タスクタイプ | 問題 | アクション |
---|---|---|
スタンドアロンのタスク |
ホストの問題 |
タスクの廃止通知は、AWS Health Dashboard |
セキュリティ脆弱性 |
タスクの廃止通知は、AWS Health Dashboard |
|
サービスタスク |
ホストの問題 |
タスクは AWS によって停止され、サービススケジューラは、サービスの必要数を維持しようとして新しいタスクを起動します。通知は送信されません。 |
セキュリティ脆弱性 |
タスクの廃止通知は、AWS Health Dashboard |
Savings Plans
Savings Plans は、AWS の使用料金を大幅に削減できる料金モデルです。1〜3 年の期間、1 時間 につき USD 単位で一定の使用量を守ることにより、その使用に対する料金が低くなります。詳細については、 Savings Plans ユーザーガイドを参照してください。
AWS Fargate の使用に応じた Savings Plan を作成するには、[Compute Savings Plans] タイプを使用します。開始するには、Savings Plans ユーザーガイドのSavings Plans を開始するを参照してください。
AWS Fargate での Windows コンテナの考慮事項
AWS Fargate の Windows コンテナは以下のオペレーティングシステムをサポートしています。
-
Windows Server 2019 Full
-
Windows Server 2019 Core
-
Windows Server 2022 Full
-
Windows Server 2022 Core
オペレーティングシステムのライセンス管理は、AWS が担当します。したがって、お客様は、追加の Microsoft ライセンスの必要はありません。
AWS Fargate の Windows コンテナは、awslogs ドライバをサポートしています。詳細については、「awslogs ログドライバーを使用する」を参照してください。
タスクは Linux コンテナまたは Windows コンテナのいずれかを実行できます。両方のコンテナタイプを実行する必要がある場合は、個別のタスクを作成する必要があります。
Fargate の Windows コンテナでは、以下の機能はサポートされていません。
-
グループ管理サービスアカウント (gMSA)
-
Amazon FSx
-
ENI トランキング
-
タスク用 App Mesh サービスとプロキシの統合
-
タスク用 Firelens ログルーターの統合
-
設定可能なエフェメラルストレージ
-
EFS ボリューム
-
以下に示すタスク定義パラメータ。
-
maxSwap
-
swappiness
-
-
Fargate Spot キャパシティープロバイダー
-
イメージボリューム
Dockerfile
volume
オプションは無視されます。代わりに、タスクの定義でバインドマウントを使用します。詳細については、「バインドマウント」を参照してください。