Open21

ecs/ec2インスタンス一台、terraformで Laravelのapi動かした時のメモ

yasushi.kobayashiyasushi.kobayashi

セキュリティグループ、ヘルスチェック、コンテナの軌道連携周りをどこまで良しなにやってくれるか最初はわからなかった

yasushi.kobayashiyasushi.kobayashi

セキュリティグループはロードバランサーからのアクセスを全ポート許可すればよかった

yasushi.kobayashiyasushi.kobayashi

ヘルスチェックはhttpとだけして、ポートは指定しない
一つのコンテナで80番を使うわけにはいかないので、その辺のportのmappingはecsがよしなにやってくれた

yasushi.kobayashiyasushi.kobayashi

nginxとphpのタスクを分けて、phpだけデプロイする形にしたかったけど難しそうだった
サービスディスカバリー使えばできそうな雰囲気だったけど、too matchすぎる感だった
ので、これは諦めた

yasushi.kobayashiyasushi.kobayashi

Laravel/nginxでハマったこと

yasushi.kobayashiyasushi.kobayashi

osの環境変数を多用していたので、cronで環境変数読み込めなかったり
そもそもphpへのパスが通ってなったり

地道にファイルにエラー内容出力したりして一つずつ修正して

yasushi.kobayashiyasushi.kobayashi

エラー時のLaravelのエラーメッセージが、起きてる事象と違う?(それもそれで発生してるエラーかも)だが、エラーメッセージから、事象の推測がしにくかった

dbの環境変数が読み込めてなかった時に、pdoでコネクションエラーが出ずに、全く別のシリアライズエラーみたいなのが出てたり

yasushi.kobayashiyasushi.kobayashi

ciにデプロイフローを組み込むにあたってハマったこと

yasushi.kobayashiyasushi.kobayashi

必要な権限が多く把握しきれなかったため、iamの権限が少し広くなってしまった

yasushi.kobayashiyasushi.kobayashi

デプロイツール、そもそとecs関連リソース全体を管理してくれるものと選択肢がありすぎて迷った

yasushi.kobayashiyasushi.kobayashi

ecs_deployというシェルスクリプトを選んだ
やりたいこととして、今デプロイしたいタグのdockerイメージをデプロイしたいだけで、他のリソース管理はterraformでやりたかったので、丁度よかった

yasushi.kobayashiyasushi.kobayashi

キャッシュのディレクトリ関連
docker-compseでmountしてる時には発生せずにイメージの作り方の問題だったので結構ハマった

yasushi.kobayashiyasushi.kobayashi

terraform関連でハマったこと

yasushi.kobayashiyasushi.kobayashi

ecsタスクが不要に更新されてしまうので、その他リソースと一緒のstateを持たない方がいい

yasushi.kobayashiyasushi.kobayashi

オートスケール、起動設定、albのlistenerその他諸々単語の記憶がテキトーだったので、terraformのどのリソースを使ってやるのか曖昧だった