はじめに
AWS Fargateを作成してみました。
Fargate dockefileをECRにプッシュしてみたの記事の続きです。
対応手順
東京リージョンを選択する。
サービス >> ECS >> 左ペインのタスク定義をクリックする。
タスク定義を作成しました
インフラストラクチャの要件
| パラメータ名 | 意味 | |
|---|---|---|
| 起動タイプ | Fargate | |
| オペレーティングシステム/アーキテクチャ | Linux/x86_64 | |
| CPU | 2G | 検証用のため一番小さいサイズにしました。 |
| コンテナの詳細 | test-apache | |
| イメージ URI | <AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com/test:1 |
ログ収集の使用をチェックを入れると、Fargateのログをcloudwatchに出力に必要なキーと値が自動的に入りました。

タスク定義が作成されました
{
"taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:AWSアカウント番号:task-definition/test:1",
"containerDefinitions": [
{
"name": "test-apache",
"image": "AWSアカウント番号.dkr.ecr.ap-northeast-1.amazonaws.com/test:1",
"cpu": 0,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp",
"name": "test-apache-80-tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"ulimits": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/test",
"awslogs-create-group": "true",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
},
"secretOptions": []
},
"systemControls": []
}
],
"family": "test",
"executionRoleArn": "arn:aws:iam::AWSアカウント番号:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"revision": 1,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "ecs.capability.execution-role-ecr-pull"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"MANAGED_INSTANCES",
"FARGATE"
],
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
},
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "1024",
"memory": "2048",
"registeredAt": "2026-05-03T05:53:35.069Z",
"registeredBy": "arn:aws:iam::AWSアカウント番号:user/test_user1",
"enableFaultInjection": false,
"tags": []
}
クラスターを作成しました
赤枠以外はすべてデフォルト値で作成しました。
ECS execのログ出力する設定にしました。 タスク定義でログ収集をオンにすることが前提です。
作成後、クラスターの画面にて 設定タブで確認できます。
サービスを作成しました
| パラメータ名 | 意味 | |
|---|---|---|
| タスク定義ファミリー | test | |
| タスク定義のリビジョン | 1 | |
| サービス名 | test-apache-service | |
| コンピューティングオプション | キャパシティープロバイダー戦略 | |
| カスタムを使用 (アドバンスト) | FARGATE ウエイト1 | |
| プラットフォームバージョン | LATEST | |
| タスク定義 | test-task リビジョン1 | |
| ローリングアップデートにチェックを入れた | ||
| ネットワーキングでVPC サブネット セキュリティグループの設定を行う |
タスクが作成されました
タスクにアクセスしました。
cloudwatchlogsを確認したところ、apacheのログが出力されていません

dockerfileをapacheのログ出力する設定を追記してプッシュしました。
タスク定義で新しいリビジョンを作成から最新のバージョンを選択しました。
サービスを最新のタスク定義で更新しました。手順は省きます。
Fargate $ cat dockerfile
FROM amazonlinux:2023
RUN dnf -y install httpd && dnf clean all
RUN echo 'ErrorLog /proc/self/fd/2' >> /etc/httpd/conf/httpd.conf \
&& echo 'CustomLog /proc/self/fd/1 combined' >> /etc/httpd/conf/httpd.conf
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
cloudwatchlogsを確認したところ、apacheのログが出力されました

chatGPTにログ出力までのフローを描いていただきました。
私の認識しているECSログ出力のイメージとなります。
Apache access_log
↓
標準出力 / 標準エラー出力
↓
ECS awslogs ログドライバー
↓
CloudWatch Logs
おまけ
この作業でかかった料金は以下となります。
ECSが若干料金がかかりました。
CFnとcloudwatchどちらも0円でした。
まとめ
cloudwatchにてログを出力したい場合はタスク定義の作成画面にてログ収集をオンにする必要があります。
apacheアクセスログを出力したい場合は、ログ出力設定をdockerfileに定義する必要があります。
apacheをインストールする設定のみの場合はapacheのアクセスログがcloudwatchlogsに出力されませんでした。
ECS/FargateでCloudWatch Logsへログを送信するには、コンテナの標準出力・標準エラー出力させる必要があります。
そのため、Apacheのアクセスログは /proc/self/fd/1(STDOUT)へ、エラーログは /proc/self/fd/2(STDERR)へ出力するように設定しました。





