AWS ECS Exec のアウトプットを取得する

これまで何回か ECS Exec Command について触れてきましたが、コマンドを実行するまでに留まっていました。

では、そのコマンドの出力内容を得たい場合は、というのが今回です。



ECS Execute Command の過去記事

この辺です。


参考文献

前も今も、自分の見落としなだけかもですが、AWSドキュメントにこの辺って載ってないんです。そこで、ググったらすぐに救世主がいたのでリンクしておきます。

ほぼ、これを流用させてもらいつつ、軽くコードを書いて動作確認していきます。


コード

自分の実際のコードから、あえてペライチに抜き出した内容になっています。

インストール

pip3 で入れるモノがあります。


クラス

コマンド実行と、その出力を得るメソッドを書きます。executeCommand は、タスク起動直後は数秒~十数秒は受け付けないので、リトライを仕込んでいます。


実行

コマンドを実行し、直後に結果を得て、print します。

結果はこんな感じ。Debianバージョンをゲッツ。

このファイルだと余計な改行が入っちゃうけど、echo -n YES > /tmp/test.txt とかで書き込んだファイルなら、ちゃんと改行もナシの文字列になります。


標準出力とエラー出力

結果を得ているコードはだいたいこの辺なんだけど、

コマンドには 標準出力・エラー出力・戻り値 があるので、どうなっているのか確認してみます。

response の中身を print するのですが、それぞれ標準(0)・エラー(1)・両方(1) となるようにしています。

ヘッダから先の文字列は、標準出力とエラー出力がシンプルに連結されているようです。返り値は……ヘッダに含んでなさそうですが、得る方法がゼロかは不明としておきます。

これらの区別がハッキリしないので、それらを複雑に扱わないよう、標準出力だけで済むように構成するのが無難そうです。



今回これを調べたのは、ExecCommandで少し長めのインストール処理をさせた時に、非同期処理になってしまうので、その処理が終わるのを正確に待機したかったからです。最後の処理で作られるべきファイルをチェックして、なかったら待機みたいな。

改善の余地はまだありそうですが、材料としては揃った感があるので、自動化処理で大抵のことは実現できそうになってよかったです:-)