Azure で社内開発者プラットフォーム(IDP)を設計する:基盤を構築する
By Mirko Peters ·
ポッドキャスト連動ブログへようこそ。今回の詳しい解説では、テック業界のアーキテクチャに関する議論で大きな話題となっているテーマ、社内開発者プラットフォーム(Internal Developer Platform、IDP)を取り上げます。最新のエピソードをお聴きいただいた方は、認知負荷が開発者の生産性を静かに損なっていることに触れたのをご存じでしょう。今回はそこからさらに踏み込みます。モダンなクラウドの考え方、コンテナ化の戦略、Infrastructure as Code の原則を活用し、堅牢でスケーラブルかつ安全な IDP を Microsoft Azure 上でネイティブに構築する方法を見ていきます。
Automatically translated with AI from the original post. Read the English original
ポッドキャスト連動ブログへようこそ。今回の詳しい解説では、テック業界のアーキテクチャに関する議論で大きな話題となっているテーマ、社内開発者プラットフォーム(Internal Developer Platform、IDP)を取り上げます。最新のエピソードをお聴きいただいた方は、認知負荷が開発者の生産性を静かに損なっていることに触れたのをご存じでしょう。今回はそこからさらに踏み込みます。モダンなクラウドの考え方、コンテナ化の戦略、Infrastructure as Code の原則を活用し、堅牢でスケーラブルかつ安全な IDP を Microsoft Azure 上でネイティブに構築する方法を見ていきます。
現代のエンジニアリング組織は、あるパラドックスに直面しています。クラウドによって開発者に前例のない力を与えた一方で、運用の複雑さによって開発者を埋もれさせてもいます。開発者は、ビジネスロジックの実装よりも、ネットワーク構成、ID とアクセス管理の設定、デプロイパイプラインへの対応に多くの時間を費やしています。IDP は、キュレーションされた抽象化レイヤーとして機能することで、この問題を解決します。開発者を制限するのではなく、本番環境へ迅速かつ安全に到達できる「ゴールデンパス」を提供して、開発者を後押しします。それでは、この基盤を Azure 上でどのように設計するかを見ていきましょう。
Azure における社内開発者プラットフォームの概要
Azure サービスの技術的な詳細に入る前に、IDP とは何か、そして Azure がなぜ IDP のホスティングに適しているのかを整理しておきましょう。IDP は、市販品として購入する単一のソフトウェアではありません。社内ツール、サービス、インフラストラクチャのワークフローを組み合わせ、一貫性のある開発者ポータルとしてまとめた製品化されたコレクションです。開発者と基盤となるクラウドインフラストラクチャの間に位置し、開発者の高レベルな意図を、安全で、コンプライアンスに準拠し、本番環境に対応できるクラウドリソースへと変換します。
Azure には、エンタープライズグレードのプリミティブが幅広く用意されています。しかし、これらの生のプリミティブを開発者に直接公開すると、構成のドリフト、セキュリティ上の脆弱性、管理されない孤立したリソースを招きがちです。Azure 上で IDP を設計すると、プラットフォームエンジニアはこれらのネイティブサービスを、意見の反映された標準化されたテンプレートでラップできます。その結果、開発者は Azure ネットワークや Role-Based Access Control の専門知識がなくても、データベースとキャッシュレイヤーを備えたマイクロサービス環境を、設定済みの状態で要求できるようになります。
モダンな IDP の中核となる柱
プラットフォームを設計する際は、次の 4 つの中核となる柱を判断の軸に据える必要があります。セルフサービス、ゴールデンパス、抽象化、ガードレールです。これらがなければ、IDP は単なるチケットシステムや、文書化されていない Wiki ページになりかねません。
運用負荷を抑えたセルフサービス
セルフサービスは、あらゆる IDP の中核です。従来の環境では、開発者が新しいステージング環境や Cosmos DB インスタンスを必要とすると、Jira チケットを起票し、プラットフォームチームによるレビューを待ち、運用チームによるプロビジョニングを待ち、構成が本番環境と一致していることを願うしかありませんでした。Azure 上の IDP はこのライフサイクル全体を自動化します。集中型ポータルを通じて、開発者はセルフサービスのワークフローを起動し、数分でリソースをプロビジョニングできます。これにより、変更のリードタイムを大幅に短縮できます。
ゴールデンパスと抽象化レイヤー
ゴールデンパスとは、組織内で物事を進めるための、意見の反映された、サポートされた方法です。柔軟性を奪うものではなく、摩擦を取り除くものです。基盤となる Azure の複雑さを、単一のアプリケーションマニフェストのような簡潔な構成ファイルの背後に抽象化することで、開発者は何をデプロイしたいかを宣言するだけで済みます。どのように Azure にデプロイされるかは、IDP が処理します。
ネイティブなインフラストラクチャのための Azure サービスの活用
Azure 上で IDP を構築するには、コンピューティング、ストレージ、ネットワーク、ID を処理するための適切な基盤サービスを選ぶ必要があります。プラットフォームの要件を Azure のネイティブサービスにどのように対応付けられるかを見ていきましょう。
Microsoft Entra ID による ID とアクセス管理
セキュリティは ID から始まります。Microsoft Entra ID(旧 Azure Active Directory)は、IDP のセキュリティの基盤となります。開発者ポータルを Entra ID と統合することで、シングル サインオン(SSO)を適用し、開発者グループを特定のプラットフォーム機能にマッピングできます。Azure マネージド ID を使用すると、デプロイ済みのアプリケーションは、構成ファイルやリポジトリに資格情報をハードコードすることなく、Azure Key Vault や Azure SQL など他の Azure リソースに安全にアクセスできます。
データとストレージの抽象化
アプリケーションにはデータが必要ですが、チームが新しいプロジェクトを開始するたびに、プラットフォーム チームが手作業でデータベースを用意する必要はありません。Azure Service Operator for Kubernetes や、セルフサービスのワークフローでラップした Azure Resource Manager(ARM)テンプレートを使用すると、Azure Database for PostgreSQL、Azure Cosmos DB、Azure Cache for Redis などのマネージド サービスをオンデマンドでプロビジョニングできます。IDP は、これらのデータベースが保存時の暗号化、適切なファイアウォール規則、および自動バックアップの有効化を既定で備えた状態でプロビジョニングされるようにします。
コンテナー化とオーケストレーション戦略
コンテナーは、最新のクラウド ネイティブ アプリケーションの共通語です。アプリケーションのパッケージ化と実行方法を標準化することは、IDP を成功させるうえで不可欠です。
コンピュート エンジンとしての Azure Kubernetes Service
多くの最新のエンタープライズにとって、Azure Kubernetes Service(AKS)は IDP の主要なコンピュート エンジンとなります。AKS は、マイクロサービスを大規模に実行するために必要なスケーラビリティ、移植性、オーケストレーション機能を提供します。ただし、開発者が生の Kubernetes YAML マニフェストを記述する必要があってはなりません。IDP は、Ingress コントローラー、ネットワーク ポリシー、永続ボリューム要求の複雑さを、高レベルのワークロード抽象化の背後に隠すべきです。
コンテナー レジストリとサプライ チェーンのセキュリティ
Azure Container Registry(ACR)は AKS とシームレスに統合され、コンテナー戦略の重要な要素を担います。IDP は、コードのコミットからコンテナー イメージのビルドまでのパイプラインを自動化し、Microsoft Defender for Containers のようなツールを活用して、イメージがクラスターに配置される前に脆弱性をスキャンすべきです。ACR をプラットフォームのワークフローに組み込むことで、信頼されてスキャン済みのイメージのみが本番環境にデプロイされるようにできます。
プラットフォーム エンジニアリングのための Infrastructure as Code の原則
IDP を構築するうえで、Infrastructure as Code(IaC)は必須です。プラットフォームが管理するすべてのインフラストラクチャは、定義され、バージョン管理され、自動化されたパイプラインを通じてデプロイされている必要があります。
Azure エコシステムにおける IaC ツールの選択
Azure は多種多様な IaC ツールをサポートしています。Bicep は、Azure リソースを宣言的にデプロイするための Microsoft のドメイン固有言語で、従来の ARM テンプレートよりも簡潔な構文と、Azure の機能へのネイティブなサポートを備えています。一方、Terraform(または OpenTofu)は、マルチクラウドやエンタープライズ環境で広く採用されています。どのツールを選択する場合でも、IDP はこれらのスクリプトを開発者から抽象化し、プロビジョニング要求が承認された際に裏側で実行するべきです。
状態管理とモジュール設計
プラットフォームの保守性を保つため、再利用可能なインフラストラクチャ モジュールのライブラリを構築してください。たとえば、App Service または AKS のデプロイに、関連するデータベースと監視インスタンスをまとめた標準の「web-api-module」を作成します。IaC の状態は、BLOB のバージョン管理を有効にした Azure Storage アカウントに安全に保存し、プラットフォーム エンジニアリング チームがすべてのサブスクリプションにわたるインフラストラクチャ変更の信頼できる監査証跡を維持できるようにしてください。
セキュリティ ガードレールとコンプライアンスの組み込み
セルフサービス プラットフォームを導入する際、経営層が抱く一般的な懸念は、セキュリティとコンプライアンスに対する統制を失うことです。効果的な IDP は、セキュリティを左にシフトし、ガードレールをプラットフォームのワークフローに直接組み込むことで、この考え方を逆転させます。
自動化された適用機能としての Azure Policy
プラットフォームのガードレールを設計する際、Azure Policy は頼れるパートナーです。リソースを手作業で監査する代わりに、Azure Policy を使用して組織の標準を自動的に適用できます。たとえば、リソースの作成を特定の Azure リージョンに制限する、すべてのストレージ アカウントで暗号化を必須にする、特定のネットワーク タグを義務付けるといったことが可能です。開発者がこれらのポリシーに違反するリソースをプロビジョニングしようとすると、IDP は検証フェーズでそれを検出し、即座にフィードバックを返します。
シークレット管理と Key Vault の統合
ハードコーディングされたシークレットは、長年にわたって繰り返し見つかるセキュリティ上の脆弱性です。IDP では、安全なシークレット管理をデフォルトで強制する必要があります。Azure Key Vault をデプロイメント ワークフローに統合し、アプリケーションのシークレット、API キー、接続文字列を実行時に安全に注入します。これにより、開発者の目やソース管理リポジトリからは完全に隠されます。
セルフサービスの開発者ポータルの構築
ここまで述べた ID、コンピューティング、IaC、セキュリティという基盤要素はすべて、単一の画面、つまり開発者ポータルにまとめる必要があります。これが IDP のユーザー インターフェイスです。
Azure 中心のポータルに Backstage を採用する
Spotify の Backstage のようなオープンソース フレームワークは、開発者ポータルを構築するための事実上の標準になっています。Backstage では、ソフトウェア カタログを作成し、テンプレート(ソフトウェア テンプレートと呼ばれます)を管理し、プラグインを統合できます。Azure API と直接通信するカスタム Backstage プラグインを構築すれば、開発者は 1 つのダッシュボードから Azure リソースのプロビジョニング、サービス正常性の確認、デプロイメント パイプラインの追跡をすべて行えるようになります。
直感的な開発者エクスペリエンスの設計
ポータルを設計する際は、開発者を顧客として扱いましょう。ユーザー エクスペリエンスは、摩擦のないものである必要があります。開発者はポータルにアクセスし、「Microservice with SQL Backend」テンプレートを選択して、サービス名とオーナー チームを記入する簡単なフォームに入力し、送信をクリックするだけで済むべきです。数分以内に、IDP は Azure インフラストラクチャをプロビジョニングし、ボイラープレート コードを含む GitHub リポジトリを生成し、CI/CD パイプラインを構成し、サービスを社内カタログに登録します。
成功の測定と次のステップ
IDP の構築は終了日が決まったプロジェクトではなく、継続的な製品の取り組みです。プラットフォームを稼働させたら、投資を正当化し、開発者エクスペリエンスを継続的に改善するために、その効果を測定する必要があります。
追跡すべき主要な指標
開発者の生産性とプラットフォームの安定性を反映する指標に注目しましょう。社内に新たに参加した開発者の「最初の Hello World までの時間」、デプロイメントの頻度、変更失敗率、平均復旧時間(MTTR)を追跡します。加えて、定期的に開発者満足度調査を実施し、プラットフォームのワークフローにおいてどこに摩擦が残っているかを把握しましょう。
今後の進め方
小さく始めましょう。初日から大規模なエンタープライズ プラットフォームを構築しようとしないでください。コンテナー デプロイの標準化やデータベース プロビジョニングの自動化など、単一のユースケースを選び、それを中心に最小限の実用的なプラットフォームを構築します。初期の採用チームからフィードバックを集め、ゴールデン パスを反復的に改善し、組織全体にプラットフォームの機能を段階的に広げていきましょう。
Azure をネイティブに基盤として Internal Developer Platform を設計することで、単にデプロイを自動化するだけでなく、持続可能なエンジニアリングの成長を支える仕組みを構築できます。お読みいただきありがとうございます。このトピックについてより深く音声で議論しているポッドキャスト エピソードもぜひご覧ください。Happy architecting!