AIイノベーションズ ブログ

【Railway】デプロイのライフサイクルとヘルスチェック

最終更新日:
阿部隼也
阿部 隼也
AIイノベーションズ 代表取締役社長 | x.com/ai_abe_shunya
リアルタイムアンケートツール: LiveQ

お悩み相談AIチャット: AI相談.com

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

デプロイのライフサイクルとヘルスチェック

Railway は、新しいデプロイが正常に稼働するまで古いデプロイを維持することで、ゼロダウンタイムデプロイを実現します。本記事では、その仕組みの中心となる正常なシャットダウン、ヘルスチェック、再起動ポリシーについて解説します。


正常なシャットダウン (Graceful Shutdown)

新しいデプロイが正常だと判断されると、Railway は古いデプロイに対して SIGTERM シグナルを送信します。アプリケーション側でこのシグナルを補足し、以下の処理を行うことで、安全にシャットダウンできます。

  • 進行中のリクエストを完了させる
  • データベース接続を閉じる
  • その他クリーンアップ処理
SIGTERM をハンドルしない場合、10秒後SIGKILL が送信され強制終了します。

シャットダウンタイムアウトの変更

サービス設定でシャットダウンタイムアウトを調整できます(デフォルト: 10秒)。

  • Service → Settings → Graceful Shutdown Timeout

ヘルスチェック (Healthchecks)

ヘルスチェックは、新しいデプロイが正常にリクエストを受け付けられる状態かを確認する仕組みです。HTTP ベースのサービスの場合、指定したパスに Railway がリクエストを送信し、ステータスコード 200 が返るかで判断します。

設定項目

設定 説明 デフォルト値
Healthcheck Path ヘルスチェック用エンドポイントのパス /
Healthcheck Port ヘルスチェック用ポート (環境変数 PORT)
Healthcheck Hostname ヘルスチェック時の Host ヘッダ (自動生成されたドメイン)
Initial Delay デプロイ後、ヘルスチェック開始までの待機時間 0秒
Timeout ヘルスチェックリクエストのタイムアウト 5秒
Interval ヘルスチェックの実行間隔 5秒
Max Retries 失敗時のリトライ回数 3回

再起動ポリシー (Restart Policy)

デプロイされたサービスがクラッシュした場合の挙動を定義します。

ポリシー 説明
ALWAYS 常に再起動を試みます。
ON_FAILURE 終了コードが 0 以外の場合に再起動します(最大10回)。
NEVER 再起動しません。
デフォルトは ON_FAILURE です。10回失敗すると Crashed 状態になります。

まとめ

ゼロダウンタイムデプロイを実現するために、以下の3点を正しく設定することが重要です。

  1. Graceful Shutdown: アプリケーション側で SIGTERM をハンドルする。
  2. Healthchecks: /health のような専用エンドポイントを用意し、設定する。
  3. Restart Policy: ユースケースに合わせて再起動ポリシーを選択する。

これらの設定を適切に行うことで、ユーザー影響を最小限に抑えながら、安全かつ迅速にデプロイを繰り返すことが可能になります。

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

リアルタイムアンケートツール: LiveQ

お悩み相談AIチャット: AI相談.com