こんにちは。プロダクト本部Growth部でエンジニアをしている id:ruru8net です。以前はこちらの記事を書かせていただきました。
tech.classi.jp
tech.classi.jp
この度わたしはSRE留学の第3期生として、2023年5月-10月の半年間SREチームに留学をしました。
SRE留学とは?や、第1期生、2期生の体験記はこちらをご覧ください。
tech.classi.jp
tech.classi.jp
SRE留学を志望した理由
留学以前は主に認証機能の運用開発をするプロダクトチームで仕事をしていました。弊社のプロダクトチームはただアプリケーションコードの実装をするだけでなく、担当機能のインフラ管理や監視等もすることが多々ありその中でAWSに触れ、サービスの様々なことを考えながらも全体を操作している感覚を漠然と楽しいなと思うようになりました。またCI・CDを考えたり物事の自動化や効率化が好きだったのでそのあたりに特化して仕事をするのはSREなのでは?と思うようになりSRE留学に興味を持ちました。
留学後にありたい姿
新しくAWS等のインフラ知識を積極的に獲得し今後の開発に生かしたい
プロダクトチームでは主にRuby on RailsとAngularでのバックエンドとフロントエンドを開発することが主だったのですが、何か機能を作ろうとした際にはもちろんその機能がどのくらいの規模で使われるのか、監視はどのように行うのかなどインフラに関することも考える必要がありました。バックエンドとフロントエンドに注力する機会が今まであったからこそ、この機会にインフラに注力して知識や経験を獲得することで、サービスを考える際にフロントエンド、バックエンド、インフラに対して一本の道を通して様々なことを考えられるようになれるのではと思い、その状態を目指したいと思いました。
チームを横断した考え方や動きができるようになりたい
プロダクトチームではどうしてもその機能、チームに閉じた動きをしてしまいがちなのですが、SREという帽子を得ることでチームの壁を感じにくくなるだろうと思いました。また過去の留学生が留学中や留学後にそのような振る舞いをしているように見え、自分もそのようになりたいと考えました。
留学中にできたこと
SREチームではカンバンを使ってタスクを管理しており、留学中は日々そのタスクをこなしていくことがメインになります。その中でわたしが実施したタスクを2つ紹介します。
ECSタスクの異常停止の検知とイベントログの保存
これはECSのタスクが起動に失敗しかつその検知が遅れサービスにアクセスできない障害が発生しまったこと、また暫定対応後に起動失敗の原因を調査しようとした際に該当ECSタスクのイベントログがすでに消えてしまっていたことからネクストアクションに積まれていたものでした。
弊社にはサービスのアラートを流すSlackチャンネルがあるため、起動失敗や異常停止を検知した際には以下のようにチャンネルに通知するようにしました。
Amazon EventBridgeにて異常停止、起動失敗のイベントのみをフィルタし、Amazon SNSとAWS Chatbotを使いSlackに投稿しています。
またECSのイベントログもAmazon EventBridgeを使いCloudWatch Logsに保存するようにしました。
この仕組みを構築後、リアルタイムでECSタスクの停止を検知できるようになりMTTRを向上させることができました。また過去のログも遡れるようになり事後調査がしやすくなりました。実際にいろんな人にこの仕組みができて助かった、というような声をもらうことができとても嬉しかったです。
Amazon Auroraの監査ログをCloudWatch Logsを経由せずS3に保存する
弊社のAWSにかかっているコストを調査したところCloudWatch Logsの特にAmazon RDSの監査ログの保存にコストがかかっていることがわかりました。コストバランスを意識し改善する機会はSREチームに所属してからとても増えました。
また個人的にはRDSに触るのは研修ぶりというくらいに久しぶりで前提知識がほとんどなく、まずはRDSの勉強から始めました。
監査ログってどこで書き込まれているの?どこで設定されているの?Amazon Aurora、MariaDB、MySQLはどう違うの?などなど様々なことを調べました。SREチームのリーダーが「ただタスクを急いで消化するのではなく、ゆっくりでいいからタスクを進めながらたくさん寄り道をして欲しい」と言ってくれたのもあり、丁寧に勉強することができました。
最終的にはEventBridge SchedulerとLambdaを使用し、仕組みを構築することができました。この仕組みについては改めてブログを書こうと思います。
当初の自分のレベルより格段に上のタスクをこなすことができ、とても自信がつきました。
留学中に難しかったこと
大きな課題をタスクに分割すること
SREチームに与えられる課題は漠然としていて大きいものが多々あり、例えば、コストを削減して欲しい、ログをいい感じに管理して欲しい、などがありました。特にログの管理に関しては最初に見た時に、「なんとなくログの管理が統一化されていないのはわかるけどじゃあ統一するために何から始めたらいいのだろう、そもそもどの状態に統一すればいいのだろう」と課題を着手できるサイズのタスクに分割することができませんでした。そこで課題のタスク分割をSREのチームリーダーと一緒に進めさせてもらいました。
まずは現状把握をする、その後に現状の課題感を出してやることリストを作る、という流れを一緒に取り組ませてもらいました。
私は何かを進める時にまず明確にゴールを決めないと、と思っていたのですが、ここでは課題感を無くすために必要なタスクを洗い出すことで、課題感がなくなればそれはゴールだよねという考え方を教えてもらいとても納得感がありました。
プロダクト開発ではどちらかというと作りたい機能や目的を最初に明確にすることが多く、決まったゴールに辿り着くために必要な道筋を考えるということが多かったです。ですが今回のように「正しく管理されている状態」は一言でいうのは難しく、逆に言えば「現時点での問題点が解消されている状態」と言い換えられることがわかりました。課題に対する新しいアプローチ方法を体験しながら学ぶことができ、勉強になりました。
横断的な振る舞い、考え方の難しさ
留学後にありたい姿としても書いていたのですが、これを実現することはとても難しかったです。留学前は一つの閉じたチームにいるから他のチームの課題がなかなか見えない、SREという横断チームに所属すれば必然的に他のチームのことが見えてくるのでは、と考えていました。もちろんそんなことはなく、ただ横断チームに所属するだけではだめでそもそもの動き方や仕組みを考える必要があるというのを実感しました。またSREチームに対して投げられた質問等に対しても、自信の無さからか他の誰かの反応を待ってしまうことが多く主体的にガツガツ動けた、とは言えませんでした。
今後
累積矢面時間を稼ぎたい
なかなか横断的な振る舞いができなかった、という反省に対し「累積矢面時間」というお話をもらいました。
累積矢面時間とは野村総合研究所 ICT・メディア産業コンサルティング部 主任コンサルタントである鈴木良介氏の言葉であり、鈴木氏は、「戦略的・計画的に自身のキャリアをつくっていくためには、どれだけクライアントとの矢面に立ち、成功と失敗の経験を積んだか。それに尽きる」と説いています。 より詳細な詳細な解説は下記をご覧ください。
この話を聞いたうえで今回の留学を振り返ると、自分が矢面にたったと言える時間は少なかったと言えます。ただ常に隣でSREのチームリーダーが矢面に立って物事を考えたり、意思決定をしていて、その姿を半年間間近で見ることができました。
仕事力=引き出しの量×瞬発力
とあるように、この留学によって確実に「引き出しの量」は増やせたと思っています。あとは「瞬発力」を稼ぎたい、そのために「累積矢面時間」を稼ぎたいと思いました。
留学前は「リーダー」といったような役職に対して私には難しいといったマイナスイメージを抱いてしまうことが多かったです。ですがSRE留学を経て横断的な考え方や振る舞いを身につけるために「仕事力」を増やしたいと思い、それにより今は積極的にリーダーという役職にも自ら挑戦してみたいと思えるようになりました。この辺りは留学前と留学後で大きくマインドが変わったところで、そう思えるようになったことがとても嬉しいです。
今後は一度プロダクトチームに戻りますが、留学中に得たこれらの知識やマインドを持って引き続き業務に励みたいです。