SREとは?役割・仕事内容・スキルから年収・就職先まで
日本国内でもSRE(Site Reliability Engineering)を担当するエンジニアの求人需要が高まっています。グローバルにサービス展開する外資企業やインターネット企業を中心に、インフラエンジニアからSREへと役割の転換も進んでいます。
今回は、そんなSREの考え方やDevOpsとの違いに加え、「Toil」「Infrastructure as Code」などの用語を解説します。サイトリライアビリティエンジニア(SRE)の仕事内容、年収、必要なスキル、就職先などを把握したうえで、転職や独立を検討してみるとよいでしょう。
SREとは
SREは「Site Reliability Engineering(サイトリライアビリティエンジニアリング)」の頭文字を略した言葉で、Googleが提唱する「システム運用管理の方法論及びエンジニアの役割」を指します。リライアビリティという単語の通り、ウェブサイトやサービスの信頼性向上に重点を置いた内容となっており、システム運用に伴う手動の作業をエンジニアリングによって自動化・効率化していくという考え方です。
また、SREは「サイトリライアビリティエンジニア」としてSREの考え方のもと業務に携わるエンジニア自身を表す言葉としても用いられます。SREは、ITインフラの運用管理を担当する技術者ですが、単に運用や設定を行うだけでなくソフトウェアエンジニアとして開発にも取り組みます。
DevOpsとの関係
SREと混同されやすいキーワードに「DevOps」というものがあります。DevOpsは「Development(開発)」「Operations(運用)」という2つの言葉を繋げ合わせた造語です。開発者と運用者の境界線を撤廃し、提供するサービスの品質を向上させようというのがDevOpsの考え方となっています。DevOpsは大きな枠組みで言えば「サービスの価値を上げる」という方向性で開発者と運用者の思惑は同じです。
しかし、もっとミクロな視点で見ると両者の考え方には相違が見られます。開発者視点ではリリースサイクルを可能な限り早めてどんどん新しいサービスを提供していきたいのに対して、運用者の視点ではサービスの安定性向上が優先すべき目的とされるのです。SREはこうした矛盾点や摩擦を解決するという立場でDevOpsに関わっています。
Googleの取り組み、Toil(トイル)とは
SREの提唱者であるgoogleでも、もちろんSREに対する取り組みが行われています。googleでは元来運用担当部署が受け持っていた業務内容を、そのままソフトウェアエンジニアが担当しているのです。手作業で行われる事の多い運用業務をソフトウェアの問題として捉え、必要に応じて自動化しています。ここで覚えておきたいキーワードが「Toil(トイル)」と呼ばれるものです。
Toilとは「苦労」を意味する単語ですが、SREにおいては「ビジネスのスピード感を阻害するもの」と考えます。いくら運用作業を自動化して業務効率を向上させても、最終的には人間の判断が必要になると考える人もいるでしょう。しかしSREにおいては運用における手動の作業や判断をToilとして考え、ビジネスのスピードを落とすものとして捉えるのです。googleのSREではソフトウェアエンジニアがこうした手動業務を徹底的に自動化して、Toilを極力少なくする事が求められています。
Infrastructure as Code
ここでもう一つ覚えておきたいキーワードが「Infrastructure as Code(IaC)」と呼ばれるものです。これは読んで字の如くインフラ構成をコードとして書き残しておく事を指します。従来、OSやソフトウェアのインストール・バージョン管理・システム構成などは人間が手動で行っていました。
IaCではこうしたインフラ環境をコードとして書き記しておき、必要に応じて他のマシンへ書き込み・実行します。こうする事で他のサーバーマシンへの環境設定やアプリ展開を迅速に行う事が可能となり、設定を一から行う際に生じるヒューマンエラーの可能性を未然に防げるのです。IaCによる環境設定の自動化はSREにとっても大きな恩恵があります。
SREの役割
SREには大きく分けて「サービス」「パフォーマンス」「システム」という3つの視点で重要な役割が与えられています。ここではそれぞれの視点でSREが担っている役割の内容を把握しておきましょう。
サービスの可用性を保つ
SREには「サービスの可用性を保つ」という役割があります。これは展開しているサービスが継続して稼動出来るようにするという事を指しています。この役割を果たすためには、システムに不具合が生じた際の保険として同系統のシステムを用意しておく「冗長構成」に関する設計知識や実装スキルが必要になるでしょう。
パブリッククラウドを利用している場合には仕様についての深い理解が必要になる場合もあります。
パフォーマンスを向上させる
SREがパフォーマンス分野で担う役割とは「パフォーマンスの向上」です。システムやサービスのパフォーマンスを向上させるためには不必要な要素を特定する論理的な判断能力が求められます。
データ構造やアルゴリズムを見渡し、非効率的なプログラムを書き換えるスキルが重要と言えるでしょう。また、場合によってはキャッシュ層の活用方法について考える必要も出てきます。
システムの変更内容を管理する
SREは「システムの変更内容管理」という役割も担っています。システムに対して行った仕様変更の内容を把握・管理して、不具合が起きた場合に対処や他のマシンへの設定適用などを行うのです。ここで役に立つのがIaCと言えるでしょう。
手動でエクセルに一行ずつ変更内容を記録していくよりも、IaCでプログラマブルに記録しておく方が効率が良く後々に活用しやすくなります。
SREの仕事内容
ここからはSREの仕事内容を具体的にご紹介します。実際の仕事内容が分かれば現場での働き方がイメージしやすくなるでしょう。SREの仕事内容は多岐に渡りますが、主に4つのポイントが重要になってきます。
運用業務の土台を整える
SREの仕事内容として、まず初めに挙げられるのは「運用業務の土台を整える」という事です。SREという考え方がサイト・サービスの信頼性向上という理念に基づいている以上、安定した運用体制を支える環境を整える事は大切な仕事となります。ここで重要になるのは、システムを高速で更新可能な状態にキープしておくという事です。
完全に安全が保証されたリリースは存在せず、永久的に新規リリースが行われないプロダクトというものありません。したがって、不具合が起きた場合に迅速に修正パッチをあてたりロールバックさせる事が出来る状態を保つ事が、サービスの安定性を維持するという結果に繋がるのです。
プロダクトの高速リリースに効くところを見極める
SREは「システムの安定」というOpsサイドの要望と、「プロダクトの高速リリース」というDevサイドの要望を両立させる事が仕事です。運用の土台が安定していても、サービスの提供スピードに難があるようではいけません。
SREではプロダクトの高速リリースに効くポイントを見極めるという視点も重要なのです。本番環境だけではなく、CI/CD改善・開発環境の充実・QA環境の充実といった要素にも目を向けてみましょう。
リリースするにあたっての心配事を潰す
開発サイクルをスピードアップさせるためには、開発者の精神的な負担を軽減する事も重要なポイントです。そして開発者が恐れる事の一つは「リリースしたサービスが機能しない」という事態でしょう。したがって、リリースするにあたっての心配事を潰しておく事もSREの仕事となります。
例えば機能の一部が停止してもサービス全体は運用が継続出来るようにサーキットブレイカーを導入しておく、比較的大きな修正を目立たずに試せるカナリアリリースを採用するといった対策が挙げられるでしょう。リリースするプロダクトと同程度のデータを扱う検証環境を用意して入念にバグをチェックする事も重要です。
開発チームが自律して動ける仕組みやツールを提供する
SREは社内において開発と運用を繋ぐ重要なポストですが、開発がSREチームに依存してしまう事態は望ましくありません。開発チームが自律して動ける仕組みやツールを提供する事も、SREにとっての重要な使命なのです。構成がIaCでコード化されている、クラウドサービスを利用してデータを共有出来る状態になっているという環境が望ましいと言えるでしょう。
十分なドキュメントやルールを予め決めておけば、監視アラートの対応に関しても開発チームだけで行えるものも少なくありません。こうした環境を作るには、開発チームとの円滑なコミュニケーションも重要なポイントです。
SREのスキル
SREを目指すにあたって、必要になるスキルを把握しておく事は大切なポイントです。ここではSREとして求められる4つのスキルをしっかり押さえておきましょう。
インフラ技術
SREはシステムの基盤に関する業務が中心になるので、インフラ技術は必要不可欠となります。具体的には「TCP/IP」「HTTP」といったネットワークプロトコルについての知識や、パフォーマンス改善・ミドルウェアの機能知識などが要求されるでしょう。社内でのデータ共有をスムーズにするため、各種クラウドサービスに関する知識も身につけておくとベターです。
アプリケーション技術
開発にも運用にも、アプリケーションに関する技術が必要になります。「Java」「PHP」「Python」「Ruby」といった代表的なプログラミング言語は押さえておきたいところです。SREではこれらの言語を駆使してバグやコードの修正を行います。ソフトウェアをクラウドや自動化ツールへ置き換えた実績や導入経験があれば即戦力としての評価が高まるでしょう。
セキュリティ知識
サイトやサービスの保守はSREの本分ではありませんが、最低限のセキュリティに関する知識は身につけておく必要があります。APIのセキュリティリスクに関連する知識は現場で重宝されるので、特によく勉強しておくと良いでしょう。
コミュニケーション能力
エンジニアという仕事は一人で完結するものではありません。SREのチーム内や開発チームとのスムーズなコミュニケーションは、業務を正確かつ効率的に進めるためには重要なポイントです。SREに限らず、円滑なコミュニケーション能力はどのような職場でも求められるスキルであると言えるでしょう。
SREの年収
SREの給料を求人情報で確認すると、その多くは下限年収が500万円以上で募集されています。ITエンジニアのなかでも採用基準の高いSREは経験者が中心のため、一般的なエンジニアよりも収入が高いといえるでしょう。大規模サービスの開発経験を持つエンジニアやSREチームのマネジメント経験がある希少価値が高い人材では1000万円以上の年収になることも少なくありません。
未経験から挑戦できるポテンシャル採用枠も多いとはいえないため、これからSREを目指す場合は、まずは開発エンジニアとして就職を目指すことも視野にいれるとよいでしょう。
SREの就職先・活躍する場所
Googleをはじめとした海外企業はもちろん、日本でもSREとして働くエンジニアの求人需要は高まっています。それでは、具体的にはどのような場所が転職先として想定されるのでしょうか。Infrastructure as CodeやDevOpsの考え方が徐々に普及しているとは言え、どこの企業でもポストが用意されているという訳ではありません。原則として、SREとして就職先を探すのであればSRE部署やチームが発足している企業を選ぶのが前提となります。
インターネットサービスを提供する「メルカリ」や「リクルート」「Retty」「クラウドワークス」などの企業は、早い時期からSRE部署やチームを立ち上げています。以下では、就職先の例としてサイボウズとfreeeを取り上げます。
サイボウズ
例えば、業務系クラウドサービスを展開しているサイボウズ株式会社では2016年にSREチームが設立されています。サイボウズでは顧客の増加に伴ってオンコール業務(非常時の呼び出し)の対応に追われるようになり、ソフトウェアエンジニアの生産性が落ち込むという事態が発生していました。サイボウズではこうした事態を解決すべく、SREチームを設立したのです。国内でも先進的にSREチームを設立したサイボウズは、有力な就職先候補と言えるでしょう。
freee
クラウド会計サービスで知られる「freee」でも、急速なサービスの成長に対応する形で2017年にSREチームが設立されています。2017年4月の時点で80万箇所に及ぶ事業所がfreeeのサービスを利用しており、freeeではサービスの信頼性を向上させると共に責任の所在を明らかにするためにSREチームを設立させました。freeeではセキュリティ面への配慮を特に重要視しており、一歩進んだSREとしての形を模索していると言えるでしょう。freeeはリスクを抑えながらも挑戦的な姿勢を持ったエンジニアを求めています。
AIを仕事にするためのキャリアノウハウ、機械学習・AIに関するTopics、フリーランス向けお役立ち情報を投稿します。