susukinosu

エンジニアリングって、何だよ

Elastic Beanstalk single containerな環境でのログ問題

引っ越ししたことでメンタルが回復してきたtkscotteです。

Elastic Beanstalk worker tierを最近試す機会があり、そこでちょっとつまづいたところがあったのでとりあえず 雑に 記す。

(何かあっても責任取れないので使うときは注意してね。)

環境

Elastic Beanstalk Worker Tier (single container / docker 17.06.2)

docker container はECR内の docker image で生成

問題点

  • docker container内で生成したアプリケーションログ(独自のやつ)がそのままだと出てこない

-> AWSのコンソールからは設定できない

  • containerのstdoutがjson形式のlogとして溜まり続ける(ローテーションしてくれない)

-> これが一番ヤバい(INFOログをめちゃくちゃ吐くアプリケーションの場合、最悪1週間くらいでディスクフルになるかも)

解決法まとめ

  1. docker host の /var/log/fugafuga を docker container の /var/log/hogehoge にマウントする
  2. docker host にawslogsを入れる
  3. .ebextensionsでよしなに docker host の /opt/elasticbeanstalk/hooks/appdeploy/enact/00.run を上書きする

実践例

docker host の /var/log/fugafuga を docker container の /var/log/hogehoge にマウントする

Dockerrun.aws.jsonの中に "Volumes" の項目があるので、そこに設定を入れる

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "AWSアカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/リポジトリ名:latest",
    "Update": "true"
  },
  "Volumes": [
    {
      "HostDirectory": "/var/log/hogehoge",
      "ContainerDirectory": "/var/log/fugafuga"
    }
  ]
}

docker host にawslogsを入れる

$ sudo yum install awslogs

ここは他の方法でも良い(後述するけれど、.ebextensionsでもできる)

packages:
  yum:
    awslogs: []

.ebextensionsでよしなに docker host の /opt/elasticbeanstalk/hooks/appdeploy/enact/00.run を上書きする

ソースコード等が入ったデプロイ用ディレクトリのルートに、 .ebextensions という名前でディレクトリを作成

中にpiyopiyo.configみたいなファイルを作り、処理を入れていく

ファイルは content 内の通りに 上書き されるので、十分注意すること

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/enact/00.run":
    mode: "000755"
    owner: root
    group: root
    content: |
~~~~~~↑実際のファイルの中身~~~~~~
      docker run -d --log-opt max-size=100m --log-opt max-file=7 \  
~~~~~~↓実際のファイルの中身~~~~~~

commands:
  "restart_awslogs":
    command: service awslogs restart

環境によっては /etc/awslogs/awslogs.conf の書き換え設定が必要かもしれないので確認が必要。


Elastic Beanstalk、Worker Tier使うのはいいかなーと思うけど、基本的につらみが多い(ヽ´ω`) single containerだとlog driversも選ばせてくれないのも、割とつらかったりする……

誰かのお役に立てれば幸いです。 間違いがあれば指摘もらえるとうれしいです。

参考リンク

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

aws公式のドキュメントには日本語のページもあるけれど、割りと変な訳になってることが多いので、できれば英語版を読みたい

stackoverflow.com


[追記] 私生活の方でいろいろと励ましてくれるお姉さん募集中です。やさしくされたい。

[追記2] はてなブログってmarkdown記法使えたんだってことに今更気づくなど。 ずっとはてな記法使ってた。