MDP(Managed DevOps Pool)とは?
MDPはAzure DevOpsのエージェントプールの管理を簡単にするフルマネージドサービスです。
特徴として以下のような点が挙げられます。
- 簡単なセットアップ
Azure Portalでリソースを作成することができます。 - 高いスケーラビリティ
スケーリングポリシーやスタンバイポリシーを柔軟に設定することができ、開発時の時間短縮、コスト削減を図ることができます。 - 仮想ネットワークとの統合
ホステッドエージェントではこれまでできなかった仮想ネットワークとの接続ができます。これにより、他のAzureリソースとの接続が柔軟になります。 - キャッシュ利用
エージェントが立ち上がっている間はキャッシュの利用が可能です。これにより二回目以降のDevOpsパイプラインの動作が高速になります。
なぜMDPに乗り換えるのか
これまでホステッドエージェント一台を契約してAzure DevOpsを利用していました。
ところがエージェント一台では、順番待ちが発生することもあり開発効率が悪い状況でした。
そこでエージェントを追加しようという話になったのですが、ちょうどMDPがGAになったということで、こちらのほうがお安く済むかも?となり採用に至りました。
MDPを作成する
手順は以下のような流れでした。
- リソースグループを作成(既存のものでもOK)
- Dev Centerを作成(既存の物でもOK)
- 仮想ネットワークを作成(既存のものでもOK)
- MDPを作成する
公式ドキュメント通りにやりました。MSにしては丁寧な説明があり、特に迷うことはありませんでした。 - DevOpsパイプライン(yaml)を修正する
見落としがちなところ
仮想ネットワークの設定
MDPに対してサブネットの委任をする必要があります。
Azure Portal上ではサブネットの設定欄に当該項目があるので、「Microsoft.DevOpsInfrastructure/pools」を選択します。
既存パイプラインの修正
既存のパイプラインにてMDPを使用する際はvmイメージの指定方法に注意して下さい。
MDPではvmイメージの指定をしない場合、その時立ち上がっているエージェントのイメージでパイプラインが稼働します。
使用したいイメージ(OS)が決まっている場合は明示的に書く必要があります。
# ホステッドエージェントの場合
pool:
vmImage: 'windows-latest'
# MDPの場合
pool:
name: 'MDP-001' # MDPのリソース名です
demands:
- ImageOverride -equals windows-2022 #イメージ名はエイリアスの使用ができます
VMイメージのエイリアスはAzure PortalのMDPの画面から設定できます。
コスト予想
ホステッドエージェントを二台契約したときと、MDPで並列ジョブを4つ購入した時の机上コストを以下に掲載します。MDPのVM料金は従量課金制です。サイズはD2ads-v5で、月に100時間の稼働をしたと仮定しています。
エージェント | 並列ジョブ数 | 並列ジョブ料金(円) | VM料金(円) | 合計 |
---|---|---|---|---|
ホステッド | 2 | 12,604 | 0 | 12,604 |
MDP | 4 | 7,090 | 3560 | 10,650 |
MDPはスタンバイ中も課金が発生しますが、スタンバイ時間を開発が盛んな曜日や時間帯に絞ることで大幅に料金を節約できそうです。
もともとエージェントを1台追加する予定でしたが、並列ジョブを4にしてもエージェント2台よりも安くなりそうなので期待大です。
(ジョブを並列で動かすことにお金がかかる仕組みなんとかならんかなぁ……二重課税みたい……)