CI/CD Conferenceレポート トレジャーデータのCI/CDのポイントはリリースリスクの最小化
CI/CD Conference 2021からトレジャーデータの国分崇志氏のセッションを紹介する。これは、AWS上で展開されているトレジャーデータのデータプラットフォームにおけるサービスのデプロイとリリースを継続的に行うために、SREエンジニアとして国分氏が実施した改善を解説するものだ。「数時間かかる週一リリースを毎日何度も爆速でできるようにするまで」というストレートなタイトルが示すように、継続的リリースができる体制に至るまでの道筋を解説している。
CI/CD導入前後の差を説明
最初に、国分氏が入社した当時のトレジャーデータのリリースフローが紹介された。当時はマニュアルでリリース作業が行われており、リリースマネージャーが変更や機能追加を個別に選択していたこと、定期実行される結合テストの結果を受けて、SSHですべてのサーバーにログインして必要なインフラをChefでデプロイしていたことなどを振り返った。
この方法には人手による操作が多いために、リリースの頻度が減ってしまっていたという弊害があったという。またChefによるデプロイも、依存関係などの原因で失敗することで手戻りが多かったことを挙げた。
当時のトレジャーデータのシステム規模は、本番で動いているサービスが約600だったという。これはAWSのオートスケーリングを利用していたサービスの数ということだが、本番のサービスはほぼオートスケーリングを利用していたので、かなり正確な値ということだろう。
待ち時間が2時間から24時間、デプロイに必要となる時間は約40分であり、リリースの頻度も週に1回が精一杯だったという。
それに対して現在はテスト時間が10分、デプロイのための時間は5分、リリースの回数は週に28回程度となっている。継続的なリリース、自動的なリリースが行われているのが定量的に見てとれる。
継続的に開発されたソフトウェアやパッチをリリースできることによる利点として、ユーザーからの要望を本番に反映するまでの必要時間が削減でき、これによって顧客満足度が向上したこと、リリースを頻繁に行えることで、もし不具合があったとしても影響を受ける部分が限られ、リスクを下げられること、そしてリリース待ちの時間が減り、以前のようなリリースマネージャーとの調整の時間と労力が減ったことを挙げた。
そして継続的リリースを行うために必要なこととして、リリースリスクの最小化、オペレーションの自動化、デプロイの高速化の3つを挙げた。この3つの中で最も重要なのはリリースリスクの最小化であり、自動化、高速化はその後で実施する発想でも良いと語った。
リリースリスクを最小化するために
ここからはリリースリスクの最小化のために行ったことを解説する内容となった。
最初のポイントはデザインレビューである。ここではスケールできるアーキテクチャーにすること、障害発生ポイントをなるべく減らすこと、サービスとして満たさなければいけない要件をチェックリストとして活用すること、セキュリティチームによる情報漏洩などのチェックポイントについてレビューを受けることなどを挙げた。機能面だけではなく性能などの非機能要件やセキュリティにフォーカスしたレビューを行うなどの項目は、エンタープライズ企業においても参考になるのではないだろうか。
このスライドではタイムアウト、リトライ、サーキットブレーカーなどを使って、リリースしたサービスや連携する外部サービスにおいてトラブルが起こったとしてもユーザー側に与える影響を極力抑えるための工夫を解説した。
またGoogleのSRE本の中でも語られているサービスレベルオブジェクティブ(SLO)とエラーバジェットについても取り入れていることを紹介し、サービスそのものを評価するための指標として定量的に使うことを解説した。
そしてここから、筆者が考えるこのセッションの重要なポイントの解説に入った。重要だと思う理由は、デプロイとリリースの違いを明確に意識しているからだ。デプロイはあくまでもデベロッパーの書いたコードが本番環境に配備されること、それに対してリリースはユーザーから見て機能が使えるようになったこと(もしくはバグが直ったこと)という認識があるからこそ、フィーチャーフラグを使ってユーザーにとって機能をどうやって使わせるか? という発想になる。
ただしフィーチャーフラグも使いすぎるとテストの工数が増えるため、ある程度使い方にコツが必要だというのが要点のようだ。
このスライドには、フィーチャーフラグをサービスとして提供しているLaunchDarklyのロゴが追加されている。これは、トレジャーデータがLaunchDarklyのフィーチャーフラグサービスを使っているということを暗に示しているのだろう。
また本番環境におけるアラートについても言及し、設定した目標値であるSLOだけではなくSLOを阻害する要因となる要素についてもメトリクスを採取して、予防することが大事だと説明した。
またこれまで定期的にまとめて実行されていた結合テストを、メインブランチへのコミットをトリガーにして自動実行されるように方法を変えたことを解説した。
デプロイを行うツールに関しても言及し、自社開発のデプロイツールが未だに使われている中で、今後のメンテナンスコストが増えることを考えると、すでにオープンソースとして公開されているツールなどに乗り換えることで、コミュニティのエコシステムを利用する発想もあることを紹介した。ここでは候補の一つとして、Netflixが開発しGoogleなどが貢献しているSpinnakerが紹介された。
ここからはリリースの自動化、デプロイの高速化などについてもトレジャーデータの事例をベースに説明を行った。デプロイが高速で完了しなければいけない理由は、デベロッパーは常に次の開発に取り組んでおり、デプロイに時間がかかればかかるほど、開発完了とリリースがずれてしまうことで手戻りが発生してしまうことを避けるためだと語った。
このセッションの最後のまとめとして、最も重要なのはリリースによって発生するリスクを最小化することで、自動化、高速化についてはその後にやればよいという考え方を確認してセッションを終えた。
リリースとデプロイの明確な区分け、リリースを価値として顧客に届けるための方法論としてフィーチャーフラグを有効に使った手法など、自動化だけがCI/CDの目的として語られがちな状況に一石を投じたセッションと言えるだろう。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CNDT 2022、SLOの自動化についてGoogleのエンジニアが解説
- CI/CD Conference 2021 MicrosoftとGitHubの連携をMSKKのアーキテクトが解説
- Observability Conference 2022、オブザーバビリティから組織、ルールを見直した事例を紹介
- Observability Conference 2022、利用者目線のオブザーバビリティ実装をドコモのSREが解説
- CNDT 2022、ChatworkのSREがSLO策定にカオスエンジニアリングを使った経験を解説
- CI/CD ConferenceからAWSのアドボケイトによる「単一コードベース」を勧めるセッションを紹介
- CI/CD Conference 2023より、Herokuから移行を行った小規模チームのCI/CD改善セッションを紹介
- CI/CD Conference 2023から、アルファドライブ/ニューズピックスのSREがAWS CDKを活用したCI/CD改善を解説
- CNDT2020シリーズ:メルペイのマイクロサービスの現状をSREが解説
- CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは