Managed DevOps Pool (MDP) を使って閉域ネットワークでGitワークフローを実行しよう

Azure

「GitHub Actions は便利だけど、自社のプライベート環境からアクセスできない……」

そんな理由で CI/CD の環境構築を自前で運用し、サーバーのパッチ適用やスケーリングの設定といった運用保守に疲弊していませんか?

Managed DevOps Pool (MDP) は、GitHub Actions の利便性と、企業システムに必要なネットワークセキュリティを融合させるフルマネージドサービスです。

この記事では、MDP がなぜ必要なのかという背景から、実際に導入してコストを抑えながら安全にビルド環境を運用するためのステップ・バイ・ステップの手順を詳しく解説します。

Managed DevOps Pool(MDP)とは?

Managed DevOps Pool(MDP)は、Microsoftが提供するフルマネージドのインフラ上で、閉域網内のリソースへ安全かつスケーラブルにアクセス可能なGitHub Actions用ランナー管理サービスです。

GitHub Actionsとは?

GitHub Actionsとは、GitHubが提供するCI/CD(継続的インテグレーション/継続的デリバリー)自動化ツールです。

通常、ソフトウェアのソースコードをGitHubで管理する際、コードを変更するたびに「ビルド」「テスト」「本番環境へのデプロイ」といった一連の作業が必要になります。

GitHub Actionsを使えば、これらの作業を自動化し、開発者がコードを書くことに集中できる環境を整えることができます。

この自動化処理を実行するためのコンピューティングリソース(仮想マシン)が「ランナー」と呼ばれます。

<h3>Managed DevOps Pool(MDP)が必要な理由

企業のシステムはセキュリティのためインターネットから切り離された「閉域網」にあることが一般的です。しかし、GitHubの標準ランナーはインターネット上に存在するため、その壁を越えて内部へ直接アクセスすることができません。

これまでは、その壁を越えるために自前でサーバー(セルフホステッドランナー)を立てる必要がありました。また、OSの更新やスケーリングといった運用負荷が重く、エンジニアの大きな負担となっていました。

MDPは、この「閉域網にアクセスしたい」という現場のニーズと、「インフラ運用の手間をなくしたい」という理想を、Azureのフルマネージド基盤で同時に叶えるサービスです。

Managed DevOps Pool(MDP)を利用するメリット

GitHub Actions をセルフホステッドランナーで運用する場合、これまではサーバーの維持管理やセキュリティ担保のために多くの工数が割かれてきました。

しかし、Managed DevOps Pool(MDP)を導入することで、これら運用のトイル(定型作業)を劇的に削減できます。

具体的に MDP を採用することで得られるメリットについて、セキュリティ、運用、コストの4つの観点から詳しく解説します。

セキュリティを担保しながら他ツールとの連携が可能

MDPはAzureの仮想ネットワーク(VNet)内に直接配置されるため、パブリックなインターネットを通さず、社内の閉域網にあるデータベースやプライベートエンドポイントを持つPaaSと直接通信できます。

これにより、GitHub Actionsから内部リソースへ安全かつシームレスにアクセスでき、ゼロトラストな開発環境を実現します。

インフラ管理の自動化(フルマネージド)

ランナーとして使用する仮想マシンのプロビジョニングから、OSのアップデート、セキュリティパッチの適用、不要になったマシンの破棄まで、すべてのインフラ運用をMicrosoftが自動で行います。

インフラエンジニアは環境の維持管理から解放され、本来の開発業務に注力できるようになります。

高度なオートスケーリング

MDPはワークフローの需要に応じて、仮想マシンを自動でスケールアウト・スケールインさせます。

さらに、常に一定台数を待機させる「ウォームプール」を設定すれば、ビルド開始時の待ち時間を最小化しつつ、利用状況に応じた効率的なリソース運用が可能です。

運用効率化によるコスト削減が可能

これまでセルフホステッドランナーの運用にかかっていたOS管理ツールやライセンス費用、そして何より「インフラの面倒を見る」というエンジニアの工数(人件費)を大幅に削減できます。

必要な時に必要な分だけリソースを確保するフルマネージドの仕組みにより、無駄のないコスト構造を実現します。

Managed DevOps Pool(MDP)の利用手順

MDP を利用するためには、Azure 上で管理基盤となる「Dev Center」を作成し、その配下にプールを構築します。以下の手順で進めてください。

事前準備:ネットワーク設定

MDP を閉域網内で安全に動作させるために、以下のネットワーク設定が必要です。

  • 専用サブネットの準備:
    • MDP がデプロイされる専用のサブネットを作成してください。
  • サブネットの委任:
    • 作成したサブネットの委任設定で Microsoft.DevOpsInfrastructure/pools を指定してください。これを行うことで、MDP がこのサブネット内にランナーを配置できるようになります。

ステップ1. Dev Center を作成する

Azure ポータルで「Managed DevOps Pools」を開き、「新規作成」をクリックします。

  • Dev Center:プロジェクトを統括する管理用リソースです。既存のものがあれば選択し、なければ新規作成します。
  • Dev Center project:上記 Dev Center 配下でプロジェクトを管理する単位です。「Create new Dev Center and project」のリンクから、Dev Center と同時に作成することも可能です。

ステップ2. DevOps Pool を作成する

基本設定の画面で、以下の情報を入力してプールを作成します。

  • Azure DevOps organization: 連携させる Azure DevOps 組織の URL を入力します。
  • Pool name: 識別しやすい任意の名前を付けます。
  • そのほかの設定: 今回はデフォルト設定のままで作成可能です。要件に応じて VM サイズやスケーリングルールなどを適宜変更してください。

The subscription <サブスクリプション ID> is not registered for Microsoft.DevOpsInfrastructure. 

というメッセージが出てきたらリソースプロバイダー登録が必要になります。

ステップ3. GitHub Actions ワークフローへの組み込み方

作成したプールは、GitHub Actions の YAML ファイル内で指定することで利用可能になります。以下のように runs-on を設定してください。

YAML
jobs:
  build:
    # 作成したMDPのプール名を指定します
    runs-on: my-managed-devops-pool

    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: ./build.sh

※ 手順の途中で権限不足などのエラーが出る場合は、Azure のサブスクリプションに対して「DevCenter ネットワーク管理者」などの必要なロールが付与されているか確認してください。

Managed DevOps Pool(MDP)の利用コスト

Managed DevOps Pool の利用料金は、大きく分けて「Azure リソースの利用料」と「Azure DevOps の並列ジョブ利用料」の2つの要素で構成されます。

VM の実行単価

MDPを使用する際に発生する最も大きなコストは、エージェントを実行する仮想マシン(VM)の料金です。

主に以下の費用が発生します。

  • VM 稼働費
  • ストレージ
  • ネットワーク費 

パフォーマンスが同等でも AMD プロセッサ採用の VM サイズを選ぶことで最大 40% 程度コストを抑えられる場合があるほか、ワークロードに適した VM タイプ(メモリ最適化やコンピューティング最適化など)を選択することで無駄な支出を減らせます。  

ウォームプールによる待機コスト

ウォームプールとは、「ビルド指示が来た瞬間にすぐ動けるよう、あらかじめ起動して待機させておくランナー(VM)」のことです。 

通常、ランナーはジョブが来てから起動するため、VMの立ち上がり時間に数分かかることがありますが、ウォームプールなら待ち時間ゼロでビルドを開始できます。

「すぐ動ける状態」で待機している間も、当然ながら仮想マシン(VM)の実行料金は発生し続けます。

  • コストの計算式: 待機時間 × VM の時間単価

頻繁にビルドが走るプロジェクトでは効率的ですが、夜間や休日などビルドが全くない時間帯にまでウォームプールを維持すると、無駄な待機コストが増大します。

コストを最適化するには、利用頻度に合わせて「待機台数を最小限にする」または「スケール設定で特定の時間帯だけ台数を減らす」といったチューニングが不可欠です。

Managed DevOps Pool(MDP)を利用する上での注意点

Managed DevOps Pool(MDP)は、閉域網接続とインフラ運用の自動化を両立できる強力なツールですが、フルマネージドゆえに考慮すべきポイントも存在します。

導入後のトラブルを防ぎ、コストとセキュリティを最適化するために、以下の3点について特に注意して運用計画を立ててください。

ビルド時間を短縮するためのキャッシュ戦略を考える

MDPは便利な半面、毎回クリーンな環境からビルドを行うと、依存パッケージ(npm, NuGet, Maven等)のダウンロードに時間がかかり、ビルド時間が長引く傾向があります。

これを防ぐには、GitHub Actionsのキャッシュ機能(actions/cache)の活用に加え、MDP固有の「キャッシュ用ディスク」の設定を検討しましょう。

特定のディレクトリを再利用できるように設定することで、依存関係の取得を高速化し、ランナーの立ち上がり時間を実質的に短縮できます。

セキュリティ・権限設定を考える

MDPはVNet内に配置されるため、ネットワーク境界は強固ですが、「誰がそのランナーを操作できるか」という権限管理が非常に重要です。

「誰でもこのプールを使える」状態にしておくと、悪意のあるワークフローによって社内の閉域網へ不正アクセスされるリスクがあります。

Azure RBACを用いて、「開発チームA」には「プールA」のみ、「開発チームB」には「プールB」のみといった形で、プロジェクトごとのアクセス権を最小限に制限(Least Privilege)することを徹底してください。

クォータ(制限)とコスト管理

MDPは需要に合わせて自動的にスケールする機能が標準で備わっていますが、予想以上にVMが起動して「Azureのクォータ(サブスクリプションの上限)」に到達し、他の重要なシステムまでデプロイできなくなるリスクがあります。

Azure サブスクリプションの CPU コア制限を確認し、MDP 用に確保する上限を適切に設定しましょう。

上限設定に加えて、アラート設定も欠かせません。

MDPリソースには必ず、Azure Cost Management でコスト異常を検知するアラートを設定しましょう。

自動スケールが働いている間はコストが青天井にならないよう、Maximum agents の上限値は慎重に決定する必要があります。

まとめ

Managed DevOps Pool (MDP) は、閉域網内のリソースへ直接デプロイしたいというセキュリティ要件と、インフラ運用負荷を極限まで減らしたいという開発現場の理想を、Azure のフルマネージド基盤で同時に叶える極めて強力なサービスです。

コストとセキュリティのバランスを適切に設計しつつ、ぜひ MDP を活用して、モダンでセキュアな CI/CD 環境の構築に挑戦してみてください。。

タイトルとURLをコピーしました