Elastic Beanstalk DockerでLogging Driversを使う
コンニチハ、千葉です。
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
としました。
EB Docker環境の構築
EBで新しい環境の作成をします。
環境タイプとして、Multi-Container Docker
を指定します。
先ほど作成したアプリケーション(zip)のアップロードをします。
インスタンスロールには、CloudWatch Logsへの書き込み権限を付与しておきます。
アクセスしてみます。
ちゃんとアクセスログが出力されました。
さいごに
EB DockerでCloudWatch Logsへのログ出力を試しました。今回の設定は、ECSでも利用できます。EBはDocker利用する場合、結構親和性が高いと思います。どんどん使っていきたいと思います!
参考
http://aws.typepad.com/sajp/2016/05/amazon-ecs-with-awslogs.html