はじめに
今回のGo Conferenceも昨年に引き続き、LT枠で参加することができました。
発表内容はこちらです。
今年の発表内容
Graceful Shutdown について発表しました。
標準パッケージと実運用それぞれの実装方針を話しました。
モチベーションとしては、発表を通じて課題への共感を得ることや、各社それぞれどうしてるか議論するための話題を提供することでした。
LTの5分間で伝えきれるか不安はあったものの、発表後に社内外で反応してもらえたことがうれしかったです✨
社内の反応
当日の反応
時間の関係上削った話
Amazon Web Services(AWS)上のアプリケーションがデプロイによってシャットダウンするまでのフロー
AWSのApplication Load Balancer(ALB) + Amazon ECS 構成でGoアプリケーションがデプロイされる際に、どのようにシャットダウンするか触れる予定でした。
Amazon Web Services ブログの記事を参考にしています。
デプロイが開始すると、ALB は旧アプリケーションをdraining
状態に移行します。
この状態では、新規のリクエストは受け付けず、既存のリクエストの処理だけ継続されます。
DeregistrationDelay
という設定値によって指定された待機時間の間、既存のリクエストが安全に処理されることを保証します。
設定は ALB のターゲットグループから確認できます。
古いアプリケーションは ALB のターゲットグループから削除されます。
ターゲットグループから削除された古いアプリケーションに対してSIGTERM
シグナルを送信します。アプリケーションは、このシグナルをハンドリングしてGraceful Shutdownを開始します。
一定時間後、ターゲットはSIGKILL
シグナルを受信して強制終了します。
設定は Amazon ECS のタスク定義から確認できます。
結論
DeregistrationDelay
と StopTimeout
の合計時間を超えると、SIGKILL シグナルによってアプリケーションが強制終了されてしまいます。そのため、合計時間内に処理が収まるように設定しようと呼びかける意図で、本題に結び付ける予定でした。
さいごに
登壇までのアナウンスや、当日の段取りなど事細かくカンファレンスを支えてくださった運営の皆様に感謝申し上げます。
また、去年に引き続きスライドのレビューや発表練習に関わってくれた社内メンバーの皆のおかげで素晴らしい経験をさせていただきました。
来年の Go Conference も引き続き、素晴らしい機会になるようになにかしらの形で貢献したいです。
個人的に、登壇を通してたくさんの知り合いや初めましてのエンジニアの皆様とお話しできたことで、とても有意義な機会になりました。
また次回お会いした際もよろしくお願いします🫡
Appendix
昨年の発表内容です。
元の記事を確認する