最近 ECS を使おうと docker を色々と触っているので、その知見を溜めておく。
今回は alpine で一切ツールを導入(apk add
)せずにコネクション確認をするかというお話。「ヘルスチェック」ではなく「コネクション確認」という言葉を使っているのは、docker が持っているヘルスチェック機能とは違う話をするため。
応用はできるけど、もともとの動機は「アプリサーバーがDBマイグレーションを行う際に通信できる常態か知りたい」だった。
tl;dr
nc
コマンドを使おう。
デフォルトでインストールされていて、なんなら UDP での接続チェックなんてのもできる。
一定の時間、コネクション確認するスクリプトは次の通り。
host=${1:-"127.0.0.1"}
port=${2:-80}
retry=0
while [ $retry -lt 10 ];
do
sleep $retry
echo "connection check to $host:$port"
nc -zn $host $port
[ $? -eq 0 ] && exit 0
retry=`expr $retry + 1`
echo "failed; sleep for ${retry}s"
done && exit 1
というわけで、以下は道のり
を書こうと思ったけど、まぁまた今度