🤣

ECSで起動失敗&ログが一切出ない時に試すこと

2023/05/23に公開

概要

表題の通り。手がかりが一切無くて困った時の対処ガイドライン

対応一覧

  • AWS側の設定をまずは確認する。(個人的にここで失敗したことは無い)
    • 「あるある」はタスクロールとタスク実行ロールの設定を逆にするとか。
  • サイドカーを使っている場合は一旦外してCloudWatchLogsだけで試してみる
  • ECSコンテナへログインして実際に実行コマンドを打ってみる

起動失敗を繰り返すECSコンテナへログインして実際に実行コマンドを打つ方法

ECSで起動失敗を繰り返す状態でどうやってログインをするか?までを含めて説明

事前準備

基本CLIベースで進めるため、AWS FargateでECS Execの有効化、Linuxコンテナへログインまでのコマンドを簡単にまとめましたを参照。CLI実行とSSM接続による接続が行える状態まで進める

実施手順

  1. taskの設定を一旦変更する(後述)
  2. serviceを新しいtaskのrevisionへ変更する
  3. serviceを起動して起動失敗が繰り返されないことを確認する
  4. CloudWatchLogsのログでログが出ていることを確認(後述)
  5. 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