🤣
ECSで起動失敗&ログが一切出ない時に試すこと
概要
表題の通り。手がかりが一切無くて困った時の対処ガイドライン
対応一覧
-
AWS側の設定をまずは確認する。(個人的にここで失敗したことは無い)
- 「あるある」はタスクロールとタスク実行ロールの設定を逆にするとか。
- サイドカーを使っている場合は一旦外してCloudWatchLogsだけで試してみる
- ECSコンテナへログインして実際に実行コマンドを打ってみる
起動失敗を繰り返すECSコンテナへログインして実際に実行コマンドを打つ方法
ECSで起動失敗を繰り返す状態でどうやってログインをするか?までを含めて説明
事前準備
基本CLIベースで進めるため、AWS FargateでECS Execの有効化、Linuxコンテナへログインまでのコマンドを簡単にまとめましたを参照。CLI実行とSSM接続による接続が行える状態まで進める
実施手順
- taskの設定を一旦変更する(後述)
- serviceを新しいtaskのrevisionへ変更する
- serviceを起動して起動失敗が繰り返されないことを確認する
- CloudWatchLogsのログでログが出ていることを確認(後述)
- AWS CLIでログインする
taskの変更
目的: 強制的に一旦sleepさせます。以下は10分sleepの例です。
cmdとentrypointを上書きすることでイメージ内に記述されているものは無効化されます。
taskの「Docker設定」に対して以下の様に変更する。
成功した場合、「start long sleep」の文字列がCloudWatchLogsに出力される。
エントリポイント
sh,-c
コマンド
echo start long sleep;date;sleep 3600;date; echo end long sleep
余談 今回の原因はなんだったのか?
背景
ARM64にplatformを変更してイメージをbuildして起動した
結論
Dockerのイメージが腐っていた。(起動対象のファイルが無かった)
問題
node系のコマンド打っているだけなのにエラーが出ないのはおかしい。
Discussion