はじめに
こんにちは。
現在私は社内のデータ分析基盤の刷新に取り組んでおります。
今回は検証中のDataSunriseをECSに乗せるべくを試行錯誤を行っていた中で発見した、
docker run
コマンドの-t
,--tty
オプションに相当するであろう設定をECSで行う方法について記載します。
DataSunriseについては[こちら][1]をご参照下さい。
[1]:https://qiita.com/t_odash/items/5792cd2aaf6adda6b4a2
事の起こり
localでできることがECSでできない
検証のためにlocal環境にてコンテナを立てていました。
docker run -itd -p 11000:11000 [datasunrise image id]
(local環境にて)
この場合は期待通りコンテナが立ち上がり、https://[グローバルIP]:11000で繋ぐことができました。
これをECSで実現したかったのですが、ECSのタスクは即時終了し、
CloudWatchLogsに流れてくるのはservice is started.
のメッセージのみでした。
試しにlocal環境にて、
docker run [datasunrise image id]
を実行してみると、
service is started.
との表示のみでコンテナは即時終了していました。
(本メッセージはDataSunriseコンテナが起動、即時終了した際に残すログのようです。)
結果的にECSにおいてdocker run
コマンドの-t
,--tty
オプションに相当するようなことを設定しなければならないと判断しました。
結論
タスク定義においてpseudoTerminal
をtrue
にすることで、コンテナを起動させ続けることができました。
なお、本問題を解決に導いて下さった記事はこちらのstackoverflowです。
2:https://stackoverflow.com/questions/47550448/how-to-enable-tty-and-run-interactive-console-with-aws-ecs
具体的な設定方法は次の通りです。
設定方法
GUIでの設定方法を記載します。
最終的にJSONをいじることになるのでCLIで設定する場合も対応可能ではないかと思います。
-
pseudoTerminalをtrueに変更
初期設定でnullとなっていましたが、trueに書き換えて保存を押せば適用できました。(EC2/Fargateともに適用可能)
*こちらは説明用画像ですので、当該箇所以外は環境に合わせてよしなに設定下さい。念の為。
まとめ
ECSにおいてdocker run
コマンドの-t
,--tty
オプションに相当するであろう設定ができました。
今回は試行錯誤段階において、stackoverflowに行き着いた事によって解決したのですが、
よくよく公式ドキュメントを読んでみると
pseudoTerminal
Type: Boolean
Required: no
When this parameter is true, a TTY is allocated. This parameter maps to Tty in the Create a container section of the Docker Remote API and the --tty option to docker run.
という記載がありました。
ちゃんと公式ドキュメント読みましょうという教訓でした。。。
参考
- DataSunrise公式
- Stack Overflow当該記事 How to enable tty and run interactive console with AWS ECS?
- AWS ECS公式ドキュメント
また、試行錯誤段階にて以下記事も参考にさせて頂きました。ありがとうございます。
[Dockerのコンテナを起動したままにする][5]
[5]:https://qiita.com/reflet/items/dd65f9ffef2a2fcfcf30