はじめに
この記事はリンクアンドモチベーション Advent Calendar2021の17日目の記事です。
はじめまして。リンクアンドモチベーションの岸本です。
本記事では、SREにジョインして、半年ほどで
リリース時間の短縮に取り組んだので、
最終的な結果とリリースの時間削減以外にフローを整えるに当たって工面したことを紹介します。
取り組んだ背景はエンジニアの生産性を高めるために必要な4つの指標を参照していただければと思います。
実際にどのくらい短縮したのか?
先に結果から言うと、
平均2時間
→平均15分
へ短縮できました。
なぜ短縮できたのか?
ToBサービスであるモチベーションクラウドでは、顧客影響がある場合、決まった時間から、決まった時間内にリリースしないといけない制約がありました。
基本的にいくつかのcodebuild
でリリースを完了ができる状態にはなっていましたが、ダブルチェックの元、一つずつ手動で環境変数等を変えて作業を行なっていたため時間がかかっていました。
そこで自動化できるところと手動でやるべきところを明確にわけ、事前にできるところはリリース時間前にやっておくことで、リリース時間の短縮に成功しました。
前提情報
アーキテクチャ図
モチベーションクラウドサービスは、ECSのblue/green環境とbatch処理を行うEC2環境での構成になっております。
リリース時間短縮のために使っているAWSサービス
- codebuild
- codepipeline
- lambda
- chatbot
- eventbridge
リリースフロー概要
以下で簡単にリリースフローの概要を説明します。
リリースフロー図
STEP | 概要 | 実施タイミング | 実施方法 | 詳細 |
---|---|---|---|---|
1 | 待機系デプロイ | 事前作業 | githubのmaster mergeのタイミング | ・docker imageの作成 ・復旧用のRDSのスナップショット作成 ・ECSへの最新masterデプロイ |
2 | Migrate,Seed処理 | 事前作業 | codebuildで手動実行 | migrate,seedでデータベース更新 |
3 | 待機系の数を上げる | 事前作業 | slackから実行 | chatbotを利用して、slackからcodebuildを起動し、待機系のインスタンス数を上げる |
4 | blue/green切り替え | リリース作業 | codepipeから手動実行 | ・batchのデプロイ ・ALBのblue/greenの切り替え |
- | 待機系の数を下げる | 定期実行 | EventBridgeでcodebuildを定期実行 | 営業時間外にcodebuildを自動実行し待機系のインスタンス数を下げる |
上記のように、事前作業でほとんどの作業が完了でき、リリース時間でやる作業はblue/green切り替えのみとなり、短縮ができました。
リリースの時間削減以外にフローを整えるに当たって工面したこと
1. 外から情報を集め,まとめる
他社のリリース方法や、blue/greenでのリリース方法のベストプラクティスなど様々な情報をかき集めると、新しいサービス・気付きが得られるので、時間を割いてでもしっかりと情報を集め、自分なりにメリット、デメリットをまとめることが重要だと思いました。
2. 現状を把握する
自社内のアーキテクチャやサービスの仕様と顧客とのどのような握りをしているかを把握することで、一番実現高い可能性でのリリースフローを考えられます。
アーキテクチャ・サービス等の状況に応じて変更するのが重要だと思いました。
3. カジュアルすぎるリリースフローはやめる
blue/green切り替えをslackからやる方法も考えていましたが、あまりにもカジュアルすぎると人間なので、ミスを犯す可能性があり、避けたほうがいいと思いました。
4. 運用に乗るまでサポートを徹底する
リリースフローが大きく変わったため、慣れるまではしっかりとドキュメントの整理やフォロー体制を整えて、慣れるまでしっかりとサポートすると同時に、フィードバックをもらい精査していくことで、浸透させていく努力が必要だなと思いました。
まとめ
簡単なことしかやってないですが、少しの取り組みで大きな成果が得られることができました。
少しでも何かの参考になれば幸いです。