リードタイム短縮で行われたデプロイ改善――ブランチ戦略の見直しとCI/CDツールの置き換え
SREチームの川村氏にバトンタッチして、セッションが続けられた。川村氏の講演テーマはリリースプロセスにおけるデプロイ改善。リリースのリードタイムを短縮することで開発者の負担を減らし、よりリーンな開発を目指せるようにするために行われたのが、ブランチ戦略の見直しとCI/CDツールの置き換えである。
Mirai TranslatorのアプリケーションのソースコードはGitHubで管理し、ブランチ戦略としては git-flowをベースにしている。Mirai Translatorではベーシックやエンタープライズなど複数のプランが用意されており、プランごとにVPCレベルでリソースが分かれる構成になっている。さらに、ステージング環境と商用環境があり、それぞれの環境ごとにプランのリソースが存在する。商用環境のコピーがステージング環境にある状況である。そしてプランと環境ごとにGitHubのリポジトリにリリースブランチが存在し、ブランチごとにビルドとデプロイを行っているのだ。
プラン・環境ごとにブランチが分かれているためコードベースが環境ごとに異なり、ブランチごとのコミットを気にしなくてはならないという問題がある。ほかにも、リリースブランチごとにビルドを行う、プルリクエストを作るなどの負担が生じる。そして、プランが増えるとその分デプロイの負担も増えていくため、リリースの負担がどんどん増えていくのである。
これらの課題を解消するために、次の3つの変更が行われた。
- 単一のリリースブランチからデプロイできるようにブランチ戦略を変更
- リリースブランチでビルドした成果物もプラン・環境ごとに単一にした
- デプロイはすべてのプランおよび環境で同一の成果物を使用する
リリースブランチは単一にして、同じ成果物を各プラン環境にデプロイするように変更したのである。合わせてデプロイ用にChatOpsも開発し、ステージ環境と商用環境のデプロイタイミングが異なるのでその制御の手段として、Slackからのコマンド実行でデプロイを行えるようにした。
2つ目がCI/CDツールの置き換えである。CI/CDの実装をより柔軟に行いデプロイの効率化や処理の追加・変更を素早く行うため、CI/CDツールをCircleCIからGitHub Actionsに置き換えた。GitHub Actionsの利点としては、ソースコードをGitHub上で管理しているためGitHub上でデプロイまで完結できること、ワークフローの細分化や再利用性が良いのでコードのメンテナンスがしやすいことがある。ほかにもOpen ID Connectをサポートしているため、 GitHub側でAWSのデプロイをするときに使用するクレデンシャル情報の管理が不要になるなどがある。
ツールを変更するにあたっての難易度について川村氏は「CircleCIとGitHub Actionsのワークフローの定義が、どちらもyamlでしたので、移行の難易度はそんなに高くなかったと考えています」と話した。
こうした改善により、リリースのリードタイム短縮とデプロイ安全性向上が実現した。まだ商用リリースがされていないが、リリースのリードタイム短縮は5日から2日に短縮される見込みである。デプロイの安全性向上については改修で単一の成果物を使用するようになったため、環境ごとのビルドや環境差分を気にする必要がなくなっている。今回の取り組みで改善は終わりではない。今後はデプロイとリリースの分離やアプリケーションのインフラのコンテナ化などを行い、リリースのサイクルの高速化などを目指していく。川村氏は「それ以外にもやりたいことはいろいろ山積みの状態です」と語った。