DEVELOPER BLOG

開発者ブログ

HOME > 開発者ブログ > 【コンテナ入門】AWSでECSのコンテナログを扱う際のTipsをまとめてみた - PrismScaler

【コンテナ入門】AWSでECSのコンテナログを扱う際のTipsをまとめてみた - PrismScaler

1. はじめに

こんにちは!株式会社Definerの阪本です!
今回は、AWSでECSコンテナログを扱う際のTipsをご紹介したいと思います。

2. 目的・ユースケース

この記事は、コンテナログをきちんと管理するという目的に向けて、執筆しています。
ITの現場で、AWSを使ってECSコンテナ運用する際に、ログ管理をきちんと実施したいときに、参考になる情報やプラクティスをまとめています。

3. ECSコンテナログの扱い方

ECSを使ったコンテナ運用におけるログの扱い方について考えていきます。
 
ECSのDockerコンテナはデプロイの度に使い捨てられるため、アプリケーションログはコンテナ内に保管しておくことができません。
そのため、アプリケーションログは、外部ストレージや外部サービスを用いて管理する必要があります。
 
ECSコンテナのログ運用について、いくつかオプションをまとめてみました。
 
①Cloudwatch Logs
王道として、Cloudwatch Logsを用いる方法があります。
 
メリットとしては、以下のような点が挙げられます。
・AWSのマネージドサービスでありECSとの連携が楽
・S3へのローテーションでコスト削減も可能
・ElasticSearchを使うと可視化も手軽に可能
 
一方、デメリットとして以下のような点もあります。
・Cloudwatch Logsに転送するためには、コンテナログを標準出力へ吐き出す必要がある
・ログストリームの単位が見づらい(ホスト名などに起動日時を入れるなど、どのコンテナで発生したログかを識別できるようにしておくことが大切です)
 
②ログ収集サービス
fluentdなどのログ収集・解析サービスを使うというオプションもあります。
メリットとしては、柔軟なカスタムが可能となります。
デメリットとしては、サービス利用料やAWSとの連携の実装コストがかります。

4. Cloudwatch Logs設定方法

それでは早速、ECSタスク定義のCloudwatch Logs設定をしていきます。
前提として、コンテナ内のアプリケーションログは、標準出力(STDOUT)に吐き出されるものとします。
 
①インプットとなるJsonファイルの準備
今回は、以下のインプットファイルを使用しました。
ポイントは17行目から25行目で、ログドライバとして「awslogs」を指定しています。
 
②ECSタスク定義の更新
ECSのコンソールに移動し、「タスク定義」→タスクの詳細画面→「新しいリビジョンの作成」→「JSONを使用した新しいリビジョンの作成」
インプットとなるJSONファイルをコピーアンドペーストし、保存します。
 
コンテナを新しく起動すると、Cloudwatch Logsにログが出ていることが確認できました!
 
{
    "family": "test",
    "containerDefinitions": [
        {
            "name": "test",
            "image": "${アカウント番号}.dkr.ecr.ap-northeast-1.amazonaws.com/test:610",
            "cpu": 512,
            "memory": 1024,
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "ecs/test",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "test"
                }
            }
        }
    ],
    "taskRoleArn": "arn:aws:iam::${アカウント番号}:role/${IAMタスクロール名}",
    "executionRoleArn": "arn:aws:iam::${アカウント番号}:role/${IAMタスク実行ロール名}",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "EC2",
        "FARGATE"
    ],
    "cpu": "512",
    "memory": "1024",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }
}                

5. 引用・参考記事

6. 独自ソリューション「PrismScaler」について

・ PrismScalerは、開発・運用を要さずにたった3ステップで、AWSやAzure、GCPなどのマルチクラウド基盤構築を実現するWebサービスです。
・ クラウド基盤にまつわる「自動構築」「自動監視」「問題検知」「構成可視化」などの効率化を実現し、クラウドエンジニア、SRE/DevOpsエンジニアが行う泥臭く大変な作業を肩代わりするソリューションです。
・ クラウド基盤構築/クラウド移行や、クラウドの保守運用・コスト最適化など幅広い利用シーンを想定しており、IaaSやPaaSを適切に組み合わせた数百を超える高品質な汎用クラウド基盤を容易に実現できます。
 

7. お問合せ

本記事では、入門編として有益な情報を無料公開しています。ご相談やお問い合わせは「株式会社Definer」へ。

8. Definerに関して。

・ Definer Incは、ITの上流から下流まで一気通貫のワンストップソリューションをご提供しております。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。