システムプラットフォームチームで SRE をしている id:masayoshi です。
この記事は、はてなの SRE が毎月交代で書いている SRE 連載の7月号です。先月は id:chaya2z さんの AWS ECS で実行するバッチ処理を Cluster Auto Scaling を使ってコスト最適化する でした。
今月は、社内で最近始めたSREへの研修についてお伝えします。
SREの研修
SREの研修は新卒入社のSREや、中途採用でインフラエンジニアやアプリケーションエンジニアからSREにジョブチェンジした方を対象に実施しています。
SREの研修は主に以下の2つに分かれます。
- SREの原理原則やSLI/SLOに関する研修
- インフラ構築、運用、CI/CD環境の構築に関する研修
基本的にはどちらも受けてもらうことになりますが、受講者の経験によってはどちらかだけになることもあります。
また、新卒の方はアプリケーション開発などを体験してもらう新卒研修1や、AWS JumpStart 2024 2 など、社外の研修プログラムに参加してもらうこともありますが、今回はSREの研修のみを紹介します。
SREの原理原則やSLI/SLOに関する研修
SREの原理原則やSLI/SLOに関する研修では、ドキュメントや本を読むことによる知識のインプットと、メンターとディスカッションをしながらSLOを考えてもらうということを行っています。
ドキュメントや本としては、Googleが公開している SRE Books にあるPDF、もしくはその日本語訳である「SRE サイトリライアビリティエンジニアリング」(以下SRE本)3と、「サイトリライアビリティワークブック」(以下SREワークブック本)4を推薦図書としてあげています。
SRE本やSREワークブック本はページ数がかなり多いので、その中から一部の章を優先的に読んでもらうようにしています。
初学者におすすめしている章は以下の通りになります。
- SRE本
- 1章 イントロダクション
- 3章 リスクの受容
- 4章 サービスレベル目標
- 5章 トイルの撲滅
- SREワークブック本
- 1章 SREとDevOpsとの関係
- 2章 SLOの実装
- 5章 SLOに基づくアラート
- 9章 インシデント対応
- 10章 ポストモーテム文化
これらの章は、SREの原理原則からSLI/SLOをどう設定していくのかという考え方を学ぶことができるので、まずはそこを抑えてもらうことを重視しています。
また、最近始めているディスカッションの研修では、メンターがプロダクトマネージャー役として架空のWebサービスのSLOを提案してもらう研修を実施しています。
例えば、SLOが設定されていないブログサービスのプロダクトマネージャーに、監視設計をお願いされているというロールプレイで、実際にちゃんと重要なことをヒアリングできるか、SLOの説明などが適切にできるかをチェックしています。
レイテンシやエラーレートなどをSLOに設定するとしても、ちゃんとサービス仕様はどうなっているか、プロダクトオーナーとして重視したいページや指標は何か(CUJ5は何か)など、わからないことをヒアリングする能力や、それを実現するためのSLIを実装するには、どんな技術的要素が必要なのかを予想できるかを見ます。
SLI/SLOを設定するには以下の図のように、まずはプロダクトの理解し、CUJの把握が不可欠です。プロダクトの理解にはステークホルダーとの協力が不可欠になってきます。SLI/SLOを設定するのに必要な土台を作ることもSREにとっては重要な項目の一つであることを研修で理解してもらいます。
ディスカッションの研修は、チームにジョインしてある程度、SREとしての動き方や技術的に成熟してからやることを想定しています。
SREについて詳しくないマネージャーともうまくコミュニケーションをして、チームにSLOを新たに設定したり、現在設定されているSLOで本当に十分なのかを改めて提案できるようになってもらうためです。
今ある運用をより良くしていくには、提案力をつけてもらう必要があります。最初に設定されたSLOがどのような経緯で設定されたかわからないような状況になってしまうこともあります。新しいマネージャーが入ってきて、SLOやSREについて詳しくないマネージャーが来るかもしれません。そのときに、新たにSREの文化をチーム内に醸成したり、形骸化した運用を見なおすような動きができるためには、SREの原理原則をインプットするだけではなく、アウトプットできる必要があります。ディスカッションの研修では、改めてSLOが設定されていないような出来たばかりのサービスを想定して、その中でSREとしてのアウトプットができるように訓練することを目的で実施しています。
インフラ構築、運用、CI/CD環境の構築に関する研修
先程の研修とは違い、こちらでは技術的な内容の研修になります。はてなでは新卒研修でアプリケーション開発の研修をやっています。そのため、SREの研修ではそれらが終わった前提で、AWSやDocker、Terraform、GitHub Actions、Mackerelなど、社内でよく使われているサービスやツールに慣れてもらうことを中心に研修をしています。
研修の内容は、単純なアプリケーションコードだけがあるGitHubリポジトリを用意し、そのリポジトリにCI/CDを構築してもらうというものです。
具体的には以下の課題を解いてもらっています。(そのまま乗せると長くなってしまうので、一部課題や注意書きを省略しています)
- Dockerfile を書いてローカル環境でアプリケーションがコンテナで動くようにしてください
- その際に、Dockerfileのベストプラクティス に沿ったDockerfileにしてください
- docker compose up でアプリケーションコンテナのビルドとサイドカーでMySQLを起動するcompose.yamlを作ってください
- compose.yamlにMySQLのパスワードを書かないようにするためにはどんな実装があるか考え、実装してください
- GitHub Actionsを利用して、main ブランチにマージしたときに、docker build が実行されるworkflowを追加してください
- 余裕があったら、actionlintのようなlinterを入れたり、最小限の権限になるようにworkflowを設定してください
- AWS で ALB、ECS、Aurora をTerraformで構築してください
- 余裕があったら、Terrafoarm を GitHub Actions でterraform plan や terraform applyを実行してください
構成図
- 余裕があったら、Terrafoarm を GitHub Actions でterraform plan や terraform applyを実行してください
- 手元から ecspresso でデプロイできるようにした上で、GitHub Actions から ecspresso を使えるようにしてください
- 余裕があったら、AWS CodeDeployを利用してB/G Deployを実装してください
- SLI/SLOのディスカッションで提案をしてもらったSLIを実装して、Mackerelのダッシュボードにグラフをまとめて表示してください
- 余裕があったら、CloudWatchにあるメトリクスだけではなく、S3バケットに保存されたログを集計したメトリクスもグラフにしてください。
これらの課題は、普段仕事で利用しているツールに慣れてもらうだけではなく、入社してチームにジョインした頃には既に実装されているCI/CDや開発環境を、簡易的なものだとしても一から自分で作ることを体験してもらうことも目的の一つです。
既にあるコードやインフラの一部を修正したり、CI/CDに設定を追加することはあっても、何もない状態から作る経験はなかなか出来ないものです。
意外と既にあるものを使っているだけで、GitHub Actions を設定したことがない、とかDockerfileを一から書いたことがない、みたいなこともあると思います。
中途の方は、DockerやGitHub Actionsは触ったことあるけど、ECSを触ったことがなければTerraformによるECSの構築から始めてもらったりなど、経験に応じて一部課題を組み替えながら実施しています。
普段の仕事ではなかなか経験できないことを経験してもらうことで、成長や理解の手助けの機会を提供できます。
その他のSREに関係する研修
所属しているチーム毎に個別に実施している研修として、障害対応研修があります。
実際のサービスの開発環境やステージング環境を利用して、擬似的に障害を再現しチームで障害対応をしてもらいます。具体的な例はSRE連載の4月号(Mackerel で行った障害対応演習を紹介します) で紹介しているので参考にしてください。
まとめ
今回は最近始めたSRE向けの研修を紹介しました。
どちらの研修でも重要視していることは、今あるSLOやCI/CDなどを運用して維持するということだけではなく、それらがなくても自分で改めて提案、再実装できる能力を身に着けてもらうことで、より良い改善の提案もできるようになってもらうことを重視しています。
チームにジョインして仕事をすれば、現状を維持する仕事は自然と身につきますが、現状を改めて作る仕事や、それらがどうやって作られたのか、どうしてそうなっているのかなどを経験する仕事は意図的にやっていないとなかなか経験できないものです。それらを研修で少しでもカバーして、SREメンバーやチームの成長に貢献できる研修になっていれば良いなぁと思っています。
最近始めたばかりなので、効果の程は計測できていないところもあるのですが、SREの研修や教育を考えている方の参考になれば幸いです。