3.6K Views
March 26, 24
スライド概要
InnerSource Commons #12
https://innersourcecommons.connpass.com/event/311552/
https://www.youtube.com/watch?v=aWnrpvGvi4Q
Microsoft MVP for Microsoft Azure
InnerSource Commons #12 Enterprise InnerSource Infrastructure DevOps with Backstage 2024年03月26日(火) 株式会社バンダイナムコスタジオ 技術スタジオ オンラインテクノロジー部 サーバソリューションユニット DXセクション 八重樫 剛史 Takeshi Yaegashi
自己紹介 • 八重樫 剛史 Takeshi Yaegashi • 株式会社バンダイナムコスタジオ (BNS) 技術スタジオ オンラインテクノロジー部 サーバソリューションユニット DXセクション テクニカルディレクター • 社内開発者向けのクラウドサービス導入推進 プラットフォームエンジニアリングのプロジェクトに従事 • Microsoft MVP for Microsoft Azure (2023) https://mvp.microsoft.com/ja-jp/PublicProfile/5005134 • Web (blog) X (Twitter) GitHub https://l0w.dev https://twitter.com/hogegashi https://github.com/yaegashi 2
本日のお話 • トピック • 大規模なエンタープライズでインナーソースを推進するインフラ整備の取り組みについて • インナーソースを実践する環境としての内部開発者ポータル (IDP) について • オープンソースの IDP である Backstage の紹介とその DevOps について • 大規模なエンタープライズ とは? • Microsoft 365・Microsoft Entra ID が導入された従業員 10,000 人程度の企業グループ • そのうちインナーソースに関連がある開発者(エンジニア以外も含む)の従業員は 2,000〜3,000 人くらい • Backstage は今月からいじりはじめたばかりの素人です! • 今後の実施する予定の取り組み・計画を中心にお話します 3
大規模エンタープライズの開発者プラットフォーム • 「開発者プラットフォーム」とは? • この資料における定義: リポジトリ・バグトラッキング・リリースなど、ソフトウェア開発に必要なサービスを提供するもの • 大規模エンタープライズでは様々な開発者プラットフォームをSaaSまたはセルフホストサービスで運用している • 例:GitHub・GitLab・Azure DevOps・Perforce・Subversion・etc. • 開発者プラットフォームはインナーソース活動の舞台 • インナーソースの候補となる多くの社内向けのツールやライブラリが開発者プラットフォームで開発されている • 例:ゲームエンジンプラグイン、ビルド自動化スクリプト、MS365業務管理ツール、社内AIチャットエージェント 4
大規模エンタープライズにおけるインナーソースの課題 ① • 大規模エンタープライズでは開発者プラットフォームの分断が発生している • 職種・会社・プロジェクトによりアクセス可能な開発者プラットフォームが異なる • Visual Studio サブスクライバ (エンジニア) は特典により GitHub Enterprise・Azure DevOps 両方のアクセス権を持つ • サブスクライバでない開発者にはプラットフォーム利用ライセンス料金を別途支出する必要がある • エンタープライズの全開発者 (1000名〜) がアクセス可能な共通の開発者プラットフォームがない → 「ユーザーに知ってもらえない」という理由で開発者プラットフォームの利用が敬遠される → インナーソース推進の阻害要因 5
大規模エンタープライズにおけるインナーソースの課題 ② • 大規模エンタープライズでは多層化したインナーソースのスコープが要求される • ソフトウェアごとに公開範囲が限定される「エンタープライズ全体」「A会社のみ」「Aプロジェクトのみ」 • 多くの場合 Microsoft Entra ID などが組織を反映したグループ階層になっており範囲指定に利用できる A会社 A事業部 A部 A課 B課 B会社 B事業部 C事業部 D事業部 B部 C部 D部 E部 C課 D課 E課 F課 Aプロ ジェクト Bプロ ジェクト Cプロ ジェクト 6
大規模エンタープライズにおけるインナーソースの課題の解決 • 早期の課題解決は開発プラットフォームへの大規模投資が必要になる場合もあり難しい • 当面の目標:エンタープライズ内で開発されているすべてのインナーソースを把握可能にする • 開発者プラットフォームを横断するインナーソースソフトウェアカタログを構築する • 自分がアクセスできない開発者プラットフォームのインナーソースの存在を知ることができ、問い合わせ先がわかる • 全開発者がアクセスできる内部開発者ポータル Internal Developer Portal (IDP) を構築する • IDP がすべての開発者プラットフォームにアクセスしてインナーソースプロジェクトの情報を収集・集約する 7
Internal Developer Portal as an InnerSource Dedicated Environment • Internal Developer Portal (IDP) は 「Managing InnerSource Projects」で言及される 「InnerSource Dedicated Environment」となり 「InnerSource Catalogs」を実現する手段となる • インナーソースカタログのアプローチ • 定義: 可視性を高めたいリポジトリが、収集の目印とな るタグを自分につけて、インナーソースカタログに収 集される。 • 利点: 再利用を希望するリポジトリが一箇所に集まるの で、インナーソースの発見や効果測定が容易になる。 • 欠点: 多くの開発者は積極的に業務を離れてカタログ探 究に時間を割こうとはしない。また「カタログに含ま れる = インナーソース」という誤解が生じるリスクが ある。 Source: https://innersourcecommons.gitbook.io/managing-innersource-projects/innersource-tooling/github-strategy 8
エンタープライズインナーソースが成功するための Internal Developer Portal (IDP) の要件 • エンタープライズ内のすべての開発者をカバー可能なID基盤 • なるべく、開発者が日常業務で使用する既存のクラウドID基盤を選択し、OIDCやSAMLでIDPにSSOできるようにする • IDP利用の手続き的・心理的なハードルを可能なかぎり下げる…新規ID基盤導入は使ってもらえないリスクが高まる • エンタープライズ内のすべての開発者プラットフォームへのアクセス • 開発者プラットフォームは IDP を特別なユーザー・アプリとしてアクセスを受け入れる • 開発者プラットフォーム内の組織・リポジトリをクロールしてインナーソースカタログ作成に必要な情報を収集する • 開発者に負担のないインナーソースカタログ記載情報の更新手段 • リポジトリ内の特定のファイルがインナーソースカタログに記載する内容となる • リポジトリに設定するタグによりカタログへの記載・不記載をコントロールできる • 詳細な可視性の制御 • エンタープライズ全体ではなく、一部の組織・ユーザーにのみインナーソースを公開したいという要件がある • IDP の機能でアクセス制御を正しく実装するのが理想、簡易的な方法として「組織専用 IDP」を提供する方法もある 9
Backstage: An opensource framework for building developer portals 公式サイト https://backstage.io デモサイト https://demo.backstage.io Spotifyが開発した「開発者ポータル構築フレームワーク」 2020年3月 Cloud Native Computing Foundation (CNCF) に寄贈されたオープンソースプロジェクトとなる 柔軟性の高いプラグインアーキテクチャにより 高度な拡張・カスタマイズが可能 10
エンタープライズインナーソースのための Backstage の機能と設定 • Core Features: コア機能 • Software Catalog・Software Templates・TechDocs・Kubernetes・Search • インナーソースカタログの作成に必要な機能はすでに揃っている • Integrations: データ取得 • AWS S3・Azure DevOps・Bitbucket・Datadog・Gerrit・GitHub・GitLab・Gitea・Google GCS・LDAP • GitHub Enterprise や Azure DevOps などの開発者プラットフォームから必要なデータを収集する • Personal Access Token やアプリ登録による認証に対応する • Authentication: ユーザー認証 • Auth0・Atlassian・Microsoft・Bitbucket・Cloudflare・GitHub・GitLab・Google・Okta・OneLogin・VMware • Azure Easy Auth・Google IAP・OAuth2 Proxy のようなプロキシ型の認証にも対応している 11
エンタープライズインナーソースのための Backstage カタログ記載 • リポジトリのトップの catalog-info.yaml ファイルに情報を記載すると定期的に Backstage が収集・記載してくれる • 特定のトピックタグがついたリポジトリのみを収集の対象にすることも可能 apiVersion: backstage.io/v1alpha1 kind: Component metadata: name: dx2devops-backstage-containerapp description: | Enterprise Backstage DevOps on Azure Container Apps エンタープライズ向けの Backstage の DevOps のサンプルです。 Azure Container Apps を使用し Azure Developer CLI に対応しています。 tags: - backstage - devops - azure-container-apps - azure-developer-cli links: - title: GitHub Repository url: https://github.com/yaegashi/dx2devops-backstage-containerapp annotations: github.com/project-slug: yaegashi/dx2devops-backstage-containerapps spec: type: library owner: user:default/00041876 lifecycle: experimental 12
エンタープライズインナーソースのための Backstage の DevOps • 多機能な Backstage だが、その設定・カスタマイズ・運用はむずかしい • "npx @backstage/create-app@latest" コマンドで Node.js アプリを生成・ビルド・デプロイする • 現状では簡単な設定変更であっても生成したアプリ内で React + TypeScript のコーディングが必要となる • コンテナ化アプリとして Kubernetes や各種マネージドサービスなどでクラウドネイティブな運用が可能 • Dev Container と IaC を整備してコンテナのビルド・テスト・デプロイのサイクルを高速にまわせるようにする 13
Backstage on Azure Container Apps • https://github.com/yaegashi/dx2devops-backstage-containerapp • Backstage アプリを Azure Container Apps でクラウドネイティブに運用する Azure Developer CLI プロジェクト • Integration および Authentication の設定を組み込んだコンテナのビルド・テスト・デプロイの反復が可能 • カタログ記載情報は別のリポジトリで管理して Backstage に参照させる 14
Enterprise Backstage DevOps 今後の計画 • エンタープライズの組織・プロジェクト・開発者を正規化した「組織カタログ」の整備 • Microsoft Entra ID のすべての従業員情報を Backstage で扱える名前のグループ・ユーザーにマッピングした 網羅的なカタログファイルを継続的に構築して組織内リポジトリで共有する • 信頼・再利用できる組織データーベースの維持と提供はプラットフォームエンジニアリングの一部 • 開発者プラットフォームによる「リリース」のサポート • プラグインの開発により GitHub や Azure DevOps でリリースされた成果物を Backstage でダウンロード可能にする • 開発者プラットフォームにアクセスを持たない開発者にも成果物を届けることが容易になり、 インナーソースプロジェクトの推進により多くの開発者を巻き込むことができる • Backstage への貢献: 認証プロバイダ azure-easyauth を new backend system に対応させる https://github.com/backstage/backstage/issues/19476 15
まとめ • 大規模エンタープライズの開発者プラットフォームは分断する • 開発者プラットフォームが分断した組織でインナーソースを実践するには、 内部開発者ポータル Internal Developer Portal (IDP) によるインナーソースカタログの構築が有効 • Backstage はインナーソースカタログを構築可能な IDP としての機能を備えている • Backstage の設定やカスタマイズは難しいので、 開発・テスト・デプロイのサイクルを速くまわすインフラと DevOps の整備が重要 • Enterprise Backstage DevOps on Azure Container Apps https://github.com/yaegashi/dx2devops-backstage-containerapp 16
Thank You!! 17