【Amazon ECS】Amazon Linux 2023のコンテナを擬似ターミナル(pseudoTerminal)を有効化することで終了コード0で終わらせなくする方法

2024.01.31

こんにちはカスタマーソリューション部のこーへいです!

今回はAmazon Linux 2023のイメージを利用して、コンテナを終了コード0で終了させずに起動し続ける方法を紹介します。

結論

タスク定義パラメータの擬似ターミナルを有効化します。

前回の記事

先日こちらの記事をあげたのですが、エントリポイント(コマンド)を指定する方法は回りくどく、Dockerfileにそれらのパラメータを指定している場合の上書き問題があることに気づきました。

より良い方法があるとご指摘いただいたので今回はそちらの方法を紹介いたします。

※大きな構成は前回の記事と変わりません

前提

ECS Execを使用するための方法や前提はこちらの記事をご参照ください。

結論と手順の紹介

変更対象のタスク定義パラメータ

タスク定義パラメータのコンテナ定義 > その他のコンテナ定義のパラメータ > 擬似ターミナル(pseudoTerminal)が今回設定値を変更するパラメータとなります。

今回はデフォルトでは無効化されている擬似ターミナル(pseudoTerminal)を有効化していきます。

以下のコンテナ定義パラメータは、[Configure via JSON] (JSON による設定) オプションを使用して、Amazon ECS コンソールでタスク定義を登録する際に使用できます。詳細については、「コンソールを使用したタスク定義の作成」を参照してください。

上記の記述より、擬似ターミナルのパラメータはコンソールから設定できず、JSONでのみ設定値を有効化できることがわかります。他にもJSONでのみしか設定変更出来ないパラメータは多いので気になる方はタスク定義パラメータを確認してみてください。

タスク定義を更新する

擬似ターミナルの有効化をJSONに追加します。

"pseudoTerminal": true,

こちらがECSタスク定義に設定した状態です。

タスクを更新しログインする

では、変更後のタスク定義を元にタスクを起動してみましょう。

無事に終了せずに起動し続けています、続けてECS Execできるか試してみます。

アクセスできました!

おまけ

プロセスを確認しよう

せっかくなのでプロセスがどうなっているのか気になったので確認しました。

コンテナ内でpsコマンドを実行するため、ECS Execでコンテナにログイン後にインストールします(Amazon Linux 2023の場合)。

dnf update
dnf install procps

その後、psコマンドでコンテナ内で動いているプロセスを確認します。

ps auxf

psコマンド自体のプロセスは、ECS Execのプロセス配下で実行されていることが分かりました。

また独立して先ほど擬似ターミナル(pseudoTerminal)で有効化したため/bin/bashプロセスが動いていることが確認できます。

まとめ

前回の記事ではエントリポイント(コマンド)を設定したため、Dockerfileで記述したエントリポイント(コマンド)を上書きしてしまう問題がありましたが、今回の方法だとそう言った問題をクリアに出来ます。

本記事がどなたかの役に立てば幸いです。