ecs/ec2インスタンス一台、terraformで Laravelのapi動かした時のメモ
userdataでcluster名を書込みするの忘れててインスタンスがclusterと連携できない
セキュリティグループ、ヘルスチェック、コンテナの軌道連携周りをどこまで良しなにやってくれるか最初はわからなかった
セキュリティグループはロードバランサーからのアクセスを全ポート許可すればよかった
ヘルスチェックはhttpとだけして、ポートは指定しない
一つのコンテナで80番を使うわけにはいかないので、その辺のportのmappingはecsがよしなにやってくれた
nginxとphpのタスクを分けて、phpだけデプロイする形にしたかったけど難しそうだった
サービスディスカバリー使えばできそうな雰囲気だったけど、too matchすぎる感だった
ので、これは諦めた
Laravel/nginxでハマったこと
osの環境変数を多用していたので、cronで環境変数読み込めなかったり
そもそもphpへのパスが通ってなったり
地道にファイルにエラー内容出力したりして一つずつ修正して
エラー時のLaravelのエラーメッセージが、起きてる事象と違う?(それもそれで発生してるエラーかも)だが、エラーメッセージから、事象の推測がしにくかった
dbの環境変数が読み込めてなかった時に、pdoでコネクションエラーが出ずに、全く別のシリアライズエラーみたいなのが出てたり
ciにデプロイフローを組み込むにあたってハマったこと
必要な権限が多く把握しきれなかったため、iamの権限が少し広くなってしまった
デプロイツール、そもそとecs関連リソース全体を管理してくれるものと選択肢がありすぎて迷った
ecs_deployというシェルスクリプトを選んだ
やりたいこととして、今デプロイしたいタグのdockerイメージをデプロイしたいだけで、他のリソース管理はterraformでやりたかったので、丁度よかった
キャッシュのディレクトリ関連
docker-compseでmountしてる時には発生せずにイメージの作り方の問題だったので結構ハマった
terraform関連でハマったこと
ecsタスクが不要に更新されてしまうので、その他リソースと一緒のstateを持たない方がいい
オートスケール、起動設定、albのlistenerその他諸々単語の記憶がテキトーだったので、terraformのどのリソースを使ってやるのか曖昧だった
ecs/ec2にした理由
今とほとんどかわらない値段でできるはずだから
パスワード等の暗号化
kms/ssm parameterを使用
aws kms encrypt \
--key-id alias/example \
--plaintext fileb:///Users/yasushi.kobayashi/Desktop/secret.txt \
--output text \
--query CiphertextBlob > ./test.txt
記事化した