このブログでは、Windows Serverに関係することだったり、たまにLinuxだったり仮想化だったり、オンプレミス系のインフラ技術を主に記していたのですが、Platform Engineerとしてジョブチェンジすることになりましたので、このブログは今後Platform Engieer関係を中心としたブログになると思います。たまに自宅マシンを使ったオンプレミスもやると思いますが。
ということでエーアイさんと一緒にPlatform Engineerについて考えました。間違っていたらすみません。
1. はじめに
ソフトウェア開発の世界では、DevOpsやSRE(Site Reliability Engineering)といった概念が注目を集めています。その中で近年、Platform Engineer(プラットフォームエンジニア)という役職・役割も注目を浴びるようになりました。
本記事では、Platform Engineerの定義や役割、必要なスキルセットからキャリアパスまでを解説します。
2. Platform Engineerとは?
2-1. 定義
Platform Engineerは、開発チームがアプリケーションやサービスを効率よく開発・運用できるように、基盤(プラットフォーム)を設計・構築・運用するエンジニアを指します。クラウドやコンテナ、CI/CDパイプラインなど、開発の基盤を支える重要な役割を果たします。
ということですが、あんまりよく意味がわからなかったのでいろいろ調べた結果、以下としました。前提はオンプレミスのインフラエンジニアによってますが、、
例えば自チームのみで解決できる課題が出てきたとします。今までは自らプランを考え、コードを書き、検証環境でテストを行い、チーム内でレビューし、本番環境でリリースをして経過を見ます。
と順調にいけばいいのですが、基本順調にいきません。既存のコードの作成者が自分でなくて理解に時間がかかったり、課題を検証環境で実現するのに環境を構築しないといけないです。実現するのに時間がかかるでしょう。コードができて検証環境で検証していてもその環境にダメになってやりなおしなんてこともしばしばでしょう。社内ツールを使って開発作業とリリース作業を手順書化するとか、セキュリティポリシーが変わって脆弱性診断をしないといけないとか、とにかく様々なことを考えながら開発しています。それらに膨大な時間を使っているのも事実です。
そこでプラットフォームエンジニアはそれらをツールなどを用いて開発の課題を解決していきます。
例えばサービスがk8sに乗っている場合レポジトリをクローンしてきてkubectlとか打つのは面倒です。ミスもあるかもしれません。そこでArgo CDを利用することでその手順をすっ飛ばしてArgo CDがレポジトリに変更があればそれを検知してくれて、ボタン一つでデプロイすることが可能です。
検証環境を作成するのも面倒です。その際はTerraformで検証環境がすぐデプロイできるようにしておくこともできます。
そのような感じで基盤(プラットフォーム)というサービスをアプリ開発者(サービス利用者)が効率よく便利に利用することで開発者のパフォーマンスを最大化するというようなイメージです。
アプリ開発者はインフラ系のツールやいかに開発を効率化するということに精通することは時間が取られますしストレスになるでしょう。(そのあたりも大好きな超人は除いて)プラットフォームエンジニアはそこに精通し、アプリ開発者が時間を取られていることを評価したり受け付けたりして課題を認識して解決していきます。
あとはプラットフォームにかかるコストを削減したり、プラットフォームに関わる様々なことをやらないといけません。いろいろ調べていたときに僕が最初に感じたのは便利屋?でした。悪く言えばそうなってしまうと思います。ただあくまでもプラットフォームの開発によるアプリ開発者の負荷軽減にフォーカスすべきで、その他は別部署(例えば脆弱性についてとかはSOCがやるべき)に任せるというのも重要に思います。(そのあたりのコミュニケーションも業務になりそうな予感はするけど)
2-2. 台頭の背景
- クラウドの普及:AWSやAzure、GCPなどクラウドサービスが普及し、多様なサービスを組み合わせる必要が増加。
- DevOpsの発展:開発プロセスの高速化や自動化が進み、これを支えるプラットフォームが複雑化。
- 組織のスケールアップ:サービス拡大に伴い、安定かつ柔軟なインフラを提供する専門家のニーズが高まった。
DevOpsでぐぐると8を横にしたぐるぐるした図が出てくると思いますが、僕は少人数プロジェクトにアサインされていたので、複数チームで回すのではなく自チームで回すことも多かったのです(ときには一人で回していたなあとも思ったり)。今後DevOpsについてもしっかり学習していかないといけないなと思います。
3. Platform Engineerの役割
3-1. プラットフォームの設計・開発
- システム全体を俯瞰し、開発効率を高めるためのプラットフォームを構築する。
- 基盤となるAWS/Azure/GCPなどのクラウドリソースの設計・最適化や、自動化ツールの導入。
プラットフォームはサービスによって様々だと思いますが、例えば開発しているコードのバージョン管理が曖昧になっている場合はGitLabを使います。検証環境のVMを作るのに時間がかかっていればTerraformやAnsibleを使います。これらのツールを構築したり、利便性向上させたりします。
また、クラウドの場合は使用状況でコストがかかったりします。そのコストを計測したり、コスト削減したり、セキュリティポリシーに則ってデプロイ手順にセキュリティテストを組み込んだりします。(組み込むセキュリティテストはたぶんSOCなどのセキュリティ部門が決めたり作ったりするはず)
3-2. 開発チームの生産性向上
- CI/CDパイプラインの整備や管理ツールの導入により、開発者がコードを書くことに集中できる環境を整える。
- セルフサービス型のプラットフォームを提供し、開発チームがインフラ設定などを簡単に行えるようにする。
セルフサービス化という僕は聞きなれない単語がでてきました。これは開発者だけでサービスが利用できるようにするという意味です。例えば検証環境作成ツールがあるとします。開発者はこれを使いたいのですがこのツールはプラットフォームチームに連絡しないと使えません。(知ってる人に連絡するか、、、でも今日その人休んでいるから知らない人に連絡しないと、、、)そんなコミュニケーション負荷も時間もかかります。しかしこのツールが社内ネットワーク上で使えるアプリケーションとして整備していればその人だけで使えます。コミュニケーション負荷はかかりません。これがセルフサービス化です。
3-3. 可観測性とモニタリング
- サービスが安定稼働しているかを監視し、問題発生時にはアラートや対応手順を整備。
- ログの収集、可視化ダッシュボードの作成など、早期発見・早期解決の仕組みを構築する。
プラットフォーム上のアプリに問題があれば早急に検知・対応することが重要です。Prometheus,Grafana,Fluentd,Splunkなどのツールを使ってログを収集する仕組みを作成します。ログが散らばっていたり、デプロイ中に表示されたログが収集できていないということを避けるのが主な役割になるでしょう。
3-4. セキュリティとガバナンス
- システム全体を対象としたセキュリティポリシーの策定や、各種クラウドサービスの認証・認可設定を整備。
- コンプライアンス要件を満たすための仕組みづくり。
具体的なものといえばSSL証明書更新やデプロイ・運用時のセキュリティ診断などでしょうか。あまりこの辺りは詳しくないのでもうちょっと勉強する必要がありそうです。
続きは次の記事で
プラットフォームエンジニアについていろいろ調べたり、この記事でまとめていたら朝になっていたので続きは今度書きます。