0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Fargateを作成してみた

0
Last updated at Posted at 2026-05-03

はじめに

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に出力に必要なキーと値が自動的に入りました。
image.png

タスク定義が作成されました

{
    "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のログ出力する設定にしました。 タスク定義でログ収集をオンにすることが前提です。

image.png

作成後、クラスターの画面にて 設定タブで確認できます。

image.png

サービスを作成しました

パラメータ名 意味
タスク定義ファミリー test
タスク定義のリビジョン 1
サービス名 test-apache-service
コンピューティングオプション キャパシティープロバイダー戦略
カスタムを使用 (アドバンスト) FARGATE ウエイト1
プラットフォームバージョン LATEST
タスク定義 test-task リビジョン1
ローリングアップデートにチェックを入れた
ネットワーキングでVPC  サブネット セキュリティグループの設定を行う

タスクが作成されました

image.png

タスクにアクセスしました。

ブラウザでECSのタスクのIPアドレスにアクセスしました。
image.png

cloudwatchlogsを確認したところ、apacheのログが出力されていません
image.png

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のログが出力されました
image.png

chatGPTにログ出力までのフローを描いていただきました。
私の認識しているECSログ出力のイメージとなります。

Apache access_log
↓
標準出力 / 標準エラー出力
↓
ECS awslogs ログドライバー
↓
CloudWatch Logs

おまけ

この作業でかかった料金は以下となります。

ECSが若干料金がかかりました。
CFnとcloudwatchどちらも0円でした。

image.png

image.png

まとめ

cloudwatchにてログを出力したい場合はタスク定義の作成画面にてログ収集をオンにする必要があります。

apacheアクセスログを出力したい場合は、ログ出力設定をdockerfileに定義する必要があります。
apacheをインストールする設定のみの場合はapacheのアクセスログがcloudwatchlogsに出力されませんでした。

ECS/FargateでCloudWatch Logsへログを送信するには、コンテナの標準出力・標準エラー出力させる必要があります。
そのため、Apacheのアクセスログは /proc/self/fd/1(STDOUT)へ、エラーログは /proc/self/fd/2(STDERR)へ出力するように設定しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?