ECS環境構築時のポイントをまとめておく
また作るときにハマると辛いからね。
SSHして見に行ってもいいんだけど、入らなくても状況がわかるようにしておくと楽。
大前提
すべてのdockerイメージで実行するプロセスのログはstdout,srderrに出しておく。 普通のアプリケーションだとログファイルに出力してfluentdとかで収集して、S3に保存しておいたりするんだけど、dockerでは標準出力以外は拾いません。 なので、nginxとかunicornとかのログはstdoutに設定しておきます。
これは普段開発する時も同じようなコンテナ構成にして、普段から標準出力で開発するようにしておくといい。
awslogsログドライバーを最初から設定する
こちらです。
これを設定すると、cloudwatch logsにdockerのログを送ってくれます ここに送られる内容はdockerコンテナに対して、docker logs コンテナ名 or コンテナIDのコマンドを叩いたときに出力されるものと同じです。
awslogsを簡単に見れるようにしておく
https://github.com/jorgebastida/awslogs awslogsコマンドを使うと、指定し cloudwatch logsのログをtailする感じで見れる。
ここまで設定しておけば、
ECSクラスターにコンテナを配置しているんだけど、何故かすぐに停止する。 ヘルスチェックが通らないというトラブル時にも対処が簡単になる。
ホストOSを通して通信できるようにする
コンテナをたてるEC2インスタンスにイカを設定しておく。 たぶん、デフォルトで設定されているはずなんだけどいつからかdockerコンテナから外へ出れなくなっていたので、一応設定しておく。
sysctl -w net.ipv4.ip_forward=1
fs.inotify.max_user_watchesを増やしておく。
inotifyの監視対象ファイル数の上限を上げる(Rails起動時に足りなくなる場合がある)
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
コンテナインスタンスで、dockerが使用するポートを全て開けておく
32768 ~ 61000番です。 ここにのってる。