AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ECS exec 実行時のタイムアウトを防ぎたい

aws ssm start-session ... --document-name AWS-StartPortForwardingSessionToRemoteHost ... などして、 ECS exec 経由で fargate コンテナを踏み台に RDS 接続などしていると、作業によってはタイムアウトによって中断されることがままある。

めっちゃ辛い。

どうする

まずそういう作業をするな、という指摘はご尤もだけども。

いわゆる結合テストや検証などで、データベースの SQL ダンプを持ち込んだり運び出したり Rake タスクを実行したい時に ECS exec を実行したい! みたいな潜在要望は多いはず。

それだけを実行するタスク定義を都度用意するのも面倒だしね (特に「EC2 なら SSH すりゃすぐじゃん!」みたいな事を言う人と相性が悪い IaC とかいう概念)。

アイドルタイムアウトの調整

AWS System Manager > Session Manager > 設定、からアイドルタイムアウトの設定ができる。

デフォルト 20 分とのことなので、この値を伸ばせばいい。

dev.classmethod.jp

のだが、結局作業しているタブなりウィンドウでフォアグラウンドになにか送信する動作をしていないと、結局アイドルタイムアウトに関わらず切断されるっぽい

future-architect.github.io

ということで以上を勘案した結果、とりあえずアイドルタイムアウトを伸ばすのではなく、

  • aws ssm start-session ... を実行するタブ
  • 実際に作業をするタブ
    • たとえば mysql ... < dump.sql みたいに SQL ダンプを戻す作業

それぞれ、作業を始める前に screen を実行しておくようにした。 これで一応切断されることはなくなった……のだけど、本当にこれでいいんだろうか。