Elastic Beanstalk DockerでLogging Driversを使う

2016.06.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

Elastic Beanstalk Docker(以下EB Docker)にて、Logging Driversを利用して、CloudWatchへログを出力してみました。

ポイント

まず、EB Dockerでは単一コンテナと複数コンテナタイプがありますが、複数コンテナを選択します。複数コンテナを利用すると、裏ではECSが起動します。このECSがLogging Driversに対応しています。

やってみた

デプロイ用のファイルを作成

EB Dockerへデプロイするためのzipファイルを作成します。

EB Dockerでは3つの、デプロイ方法を選べます

  • Dockerファイル:単一コンテナ環境
  • Dockerrun.aws.json v1:単一コンテナ環境
  • Dockerrun.aws.json v2:複数コンテナ環境

今回は、複数コンテナ環境で利用するためDockerrun.aws.jsonを選択します。

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "nginx",
      "image": "nginx",
      "essential": true,
      "memory": 128,
      "command": ["/usr/sbin/nginx", "-g", "daemon off;"],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "logConfiguration": {
          "logDriver": "awslogs",
          "options": {
              "awslogs-region": "ap-northeast-1",
              "awslogs-group": "eb-docker"
            }
      }
    }
  ]
}

私の環境では以下にてzipを作成しました。

local$ ls
Dockerrun.aws.json
local$ zip ../myapp.zip -r * .[^.]*
updating: Dockerrun.aws.json (deflated 53%)
updating: .ebextensions/ (stored 0%)
updating: .ebextensions/ecs.config (deflated 10%)
local$
local$ ls ../myapp.zip
../myapp.zip

CloudWatch Logsの設定

ロググループを作成します。今回はeb-dockerとしました。

20160623-docker-logging-4

EB Docker環境の構築

EBで新しい環境の作成をします。

環境タイプとして、Multi-Container Dockerを指定します。

20160623-docker-logging-1

先ほど作成したアプリケーション(zip)のアップロードをします。

20160623-docker-logging-2

インスタンスロールには、CloudWatch Logsへの書き込み権限を付与しておきます。

20160623-docker-logging-3

アクセスしてみます。

20160623-docker-logging-5

ちゃんとアクセスログが出力されました。

さいごに

EB DockerでCloudWatch Logsへのログ出力を試しました。今回の設定は、ECSでも利用できます。EBはDocker利用する場合、結構親和性が高いと思います。どんどん使っていきたいと思います!

参考

http://aws.typepad.com/sajp/2016/05/amazon-ecs-with-awslogs.html