【アップデート】VM Extension ManagerがPreviewでリリースされました
はじめに
こんにちは。
クラウド事業本部コンサルティング部の渡邉です。
2025年12月8日に、VM Extension Managerという機能がPreviewでリリースされました。
最近は、BigQueryなどのデータ分析やVertex AIなどの機械学習・生成AIサービス、Cloud Runなどのサーバレスサービスのアップデートが頻繁にあるかと思いますが、Compute EngineなどのIaaS系のサービスも日々アップデートしています。
VM Extension Managerは一言でいうと、Compute EngineにOps AgentなどのVMエージェントをログイン不要な形で、インストール・管理することができるサービスです。
今回は、VM Extension Managerという機能についての解説と、実際にVM Extension Managerを利用してみた検証結果を記載します。
VM Extension Managerとは
VM Extension Managerとは、Compute Engine内にログインすることなく、Ops Agent、Extension for SAP、Extension for Compute WorkloadなどのVMエージェントのライフサイクル(インストール・更新・削除)を自動化・管理することができるサービスです。

VM Extension Managerの概要 (公式ドキュメント引用)
以下のような情報を定義した拡張ポリシーを作成し、スコープの条件に合致するCompute Engineを管理することができます。
- 優先度
- インストールする拡張機能(
Ops Agent、Extension for SAP、Extension for Compute Workload) - スコープ(特定のラベルを持つCompute Engine)
仮に、複数のポリシーが同じCompute Engineに適用される場合は、優先度の高いポリシーが優先されます。優先度の値の範囲は0~65535で、数値が小さいほど優先度が高くなります。デフォルトの優先度は1000となっています。
VM Extension Managerの仕組みとしては、Compute Engineにプリインストールされているゲストエージェントが定期的にGoogle Cloud側と通信して、適用される拡張ポリシーが存在するかどうかチェックしています。適用対象の拡張ポリシーがあれば、その拡張ポリシーで指定された拡張機能をインストールする仕組みになっているようです。
従来のエージェント管理の課題
これまで、Ops AgentなどのエージェントをVMにインストールする方法はいくつかありましたが、どれも一長一短がありました。
| 方法 | 課題 |
|---|---|
| 手動でSSH接続してインストール | Compute Engineの台数が増えると現実的ではない |
| 起動スクリプトに仕込む | 既存のCompute Engineには適用できない。スクリプトの管理も面倒 |
| Ansible/Terraformで自動化 | 構成管理ツールの導入・運用コストがかかる |
| OS Config Agent Policies | 設定が複雑。エージェントのライフサイクル管理には向いていない |
VM Extension Managerで何が変わるか
今までは、Ansibleなどの構成管理ツールを利用してエージェントのインストール・更新を大規模のCompute Engineに適用させていたかもしれませんが、VM Extension Managerにより、ポリシーを作成するだけで、エージェントを宣言的に管理できるようになりました。以下のような様々なケースで効果を発揮します。
- 既存のCompute Engine: 条件に合うCompute Engineに自動的にエージェントがインストールされる
- 新規のCompute Engine: 条件に合えば、起動後に自動的にエージェントがインストールされる
- 更新: バージョン指定しなければ、最新版に自動更新される
- 削除: ポリシーを消せば、VMからエージェントも自動削除される
Compute Engineの台数が多い環境や、「全Compute EngineにOps Agentを入れる」といったコンプライアンス要件がある環境、Ansible等の構成管理ツールを導入していない、または導入コストを抑えたい環境ではVM Extension Managerが力を発揮するかもしれません。
対応している拡張機能
現時点では以下の3つが対応しています。モニタリング系のエージェントが中心になっています。
| 拡張機能 | 用途 | 必要なAPI |
|---|---|---|
| Ops Agent | Cloud Monitoring/Loggingへのメトリクス・ログ収集。 | Cloud Monitoring API Cloud Logging API |
| Extension for SAP | SAP Host Agentのメトリクス収集。SAP on GCPを使っている場合に利用 | Workload Manager API |
| Extension for Compute Workload | 複数ワークロードのメトリクス収集 | Workload Manager API |
サポートしているOS
VM Extension Managerはインストールする拡張機能それぞれがサポートしているOSに依存します。
それぞれの拡張機能がサポートしているOSの一覧は公式ドキュメントに記載されていますので、公式ドキュメントから確認をお願いします。
| 拡張機能 | サポートOS |
|---|---|
| Ops Agent | https://docs.cloud.google.com/monitoring/agent/ops-agent#supported_operating_systems |
| Extension for SAP | https://docs.cloud.google.com/sap/docs/agent-for-sap/latest/planning#supported_operating_systems |
| Extension for Compute Workload | https://docs.cloud.google.com/compute/docs/instances/agent-for-compute-workloads?hl=ja#supported-os-versions |
料金
VM Extension Manager自体は無料となっています。ただし、VM Extension Managerによってインストールされた拡張機能の使用には費用が掛かります。
例)Ops Agentが収集したログやメトリクスに対するCloud Logging/Monitoringの料金など。
制限事項
以下のような制限事項がありますので、認識しておいてください。特に拡張ポリシーがゾーン単位で適用される点には注意が必要です。マルチゾーンでCompute Engineを運用している場合は、それぞれのゾーン分の拡張ポリシーを作成する必要があります。
- 1プロジェクトあたりゾーンごとに100ポリシーまで作成可能
- ポリシーはゾーン単位で作成する必要があるため、複数リージョン・ゾーンにVMがある場合はそれぞれにポリシーが必要
- 現時点ではBeta機能のため、GAまでに仕様が変わる可能性がある
- ゲストエージェントのバージョンが
20241209.01以降であること
VM Extension Managerを使ってOpsエージェントをインストールしてみた
必要なIAMロール
VM Extension Managerの操作には以下のIAMロールが必要です。
| やりたいこと | ロール |
|---|---|
| Extension Policyの閲覧 | roles/compute.vmExtensionPolicyViewer |
| Extension Policyの作成・変更・削除 | roles/compute.vmExtensionPolicyAdmin |
前提条件
- Google Cloudプロジェクトは作成済み
- VPCやサブネット、Cloud Natなどのネットワーク関連のリソースは作成済み
- Compute Engineは5台構築済み
- Opsエージェントに必要な設定は設定済み。
- Cloud Logging API / Cloud Monitoring APIの有効化
- Compute Engineのサービスアカウントへの
roles/monitoring.metricWriter、roles/logging.logWriterのロール付与
アーキテクチャ
今回検証するアーキテクチャ図になります。

検証アーキテクチャ
Terraformを利用してCompute Engineを5台構築しています。
Opsエージェントをインストールする対象のCompute Engineには、ops=trueのラベルを付与し、Opsエージェントをインストールしない対象のCompute Engineにはops=falseのラベルを付与しています。

構築したCompute Engine
事前確認
まずは、構築したばかりのCompute Engine内にIAP経由で、SSHしOpsエージェントのインストール状況を確認していきます。
もちろん、5台すべて構築したてのCompute Engineのため、Opsエージェントはインストールされておりません。
your_username@vm-extension-poc-ops-false-1:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:37:12 UTC 2025
watanab+ 1031 0.0 0.1 3752 1904 pts/1 S+ 22:37 0:00 grep ops-agent
your_username@vm-extension-poc-ops-false-2:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:37:22 UTC 2025
watanab+ 1012 0.0 0.1 3752 1912 pts/0 S+ 22:37 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-1:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:37:40 UTC 2025
watanab+ 1005 0.0 0.1 3752 1896 pts/0 S+ 22:37 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-2:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:38:26 UTC 2025
watanab+ 1015 0.0 0.1 3752 1844 pts/0 S+ 22:38 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-3:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:38:47 UTC 2025
watanab+ 1019 0.0 0.1 3752 1900 pts/0 S+ 22:38 0:00 grep ops-agent
拡張ポリシーの作成
ここで、VM Extension ManagerのOpsエージェントインストール用拡張ポリシーを作成していきます。
- Google Cloudコンソールで「VM拡張機能ポリシー」を開く

- 「作成」をクリック

- 以下の情報を入力し、「作成」をクリック
- ポリシー名: ops-agent-install-for-1a
- 優先度: デフォルトは1000。数字が小さいほど優先される
- スコープ
- リージョン: asia-northeast1
- ゾーン: asia-northeast1a
- 拡張機能: Google CloudのOpsエージェント拡張機能
- バージョン: 2.60.0
- ターゲットVMインスタンス: ラベル
ops:true

-
拡張ポリシーが作成されました。

-
拡張ポリシーをクリックすると、詳細を確認することができます。

作成後、条件に合うCompute Engineに数分以内にOpsエージェントがインストールされます。
事後確認
拡張ポリシーを作成したので、再度Compute Engine内にIAP経由で、SSHしOpsエージェントのインストール状況を確認していきます。
ラベル ops:trueが付与された3台のCompute Engineには、Opsエージェントがインストールされていました。
your_username@vm-extension-poc-ops-false-1:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:53:30 UTC 2025
watanab+ 1203 0.0 0.1 3752 1952 pts/0 S+ 22:53 0:00 grep ops-agent
your_username@vm-extension-poc-ops-false-2:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:53:53 UTC 2025
watanab+ 1183 0.0 0.1 3752 1840 pts/0 S+ 22:53 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-1:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:54:47 UTC 2025
root 1185 0.4 2.0 1832692 20704 ? Sl 22:54 0:00 /var/lib/google-guest-agent/448516982465436817/plugins/ops-agent_baddabb3dac3f269/plugin --protocol=unix --address=/run/google-guest-agent/plugin-connections/ops-agent_baddabb3dac3f269.sock --errorlogfile=/var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/plugin.log
root 1262 0.5 6.0 1759328 60480 ? Sl 22:54 0:00 /var/lib/google-guest-agent/448516982465436817/plugins/ops-agent_baddabb3dac3f269/libexec/google_cloud_ops_agent_wrapper -config_path /etc/google-cloud-ops-agent/config.yaml -log_path /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/log/google-cloud-ops-agent/subagents/logging-module.log /var/lib/google-guest-agent/448516982465436817/plugins/ops-agent_baddabb3dac3f269/subagents/fluent-bit/bin/fluent-bit --config /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_main.conf --parser /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_parser.conf --storage_path /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/state/fluent-bit/buffers
root 1263 2.4 13.6 1980588 135292 ? Sl 22:54 0:00 /var/lib/google-guest-agent/448516982465436817/plugins/ops-agent_baddabb3dac3f269/subagents/opentelemetry-collector/otelopscol --config /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-opentelemetry-collector/otel.yaml --feature-gates=receiver.prometheusreceiver.RemoveStartTimeAdjustment
root 1296 0.7 2.4 1181716 24156 ? Sl 22:54 0:00 /var/lib/google-guest-agent/448516982465436817/plugins/ops-agent_baddabb3dac3f269/subagents/fluent-bit/bin/fluent-bit --config /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_main.conf --parser /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_parser.conf --storage_path /var/lib/google-guest-agent/448516982465436817/agent_state/plugins/ops-agent/state/fluent-bit/buffers
watanab+ 1342 0.0 0.1 3752 1824 pts/1 S+ 22:54 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-2:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:55:32 UTC 2025
root 1167 0.0 1.9 1832692 19592 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9116483163069422737/plugins/ops-agent_baddabb3dac3f269/plugin --protocol=unix --address=/run/google-guest-agent/plugin-connections/ops-agent_baddabb3dac3f269.sock --errorlogfile=/var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/plugin.log
root 1245 0.3 6.0 1685596 60284 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9116483163069422737/plugins/ops-agent_baddabb3dac3f269/libexec/google_cloud_ops_agent_wrapper -config_path /etc/google-cloud-ops-agent/config.yaml -log_path /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/log/google-cloud-ops-agent/subagents/logging-module.log /var/lib/google-guest-agent/9116483163069422737/plugins/ops-agent_baddabb3dac3f269/subagents/fluent-bit/bin/fluent-bit --config /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_main.conf --parser /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_parser.conf --storage_path /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/state/fluent-bit/buffers
root 1246 0.6 12.8 1885348 127472 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9116483163069422737/plugins/ops-agent_baddabb3dac3f269/subagents/opentelemetry-collector/otelopscol --config /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-opentelemetry-collector/otel.yaml --feature-gates=receiver.prometheusreceiver.RemoveStartTimeAdjustment
root 1278 0.4 2.3 1181716 23684 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9116483163069422737/plugins/ops-agent_baddabb3dac3f269/subagents/fluent-bit/bin/fluent-bit --config /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_main.conf --parser /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_parser.conf --storage_path /var/lib/google-guest-agent/9116483163069422737/agent_state/plugins/ops-agent/state/fluent-bit/buffers
watanab+ 1337 0.0 0.1 3752 1948 pts/0 S+ 22:55 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-3:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 22:55:59 UTC 2025
root 1170 0.0 2.1 1832692 21564 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9186597670952967312/plugins/ops-agent_baddabb3dac3f269/plugin --protocol=unix --address=/run/google-guest-agent/plugin-connections/ops-agent_baddabb3dac3f269.sock --errorlogfile=/var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/plugin.log
root 1249 0.1 6.2 1759328 61668 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9186597670952967312/plugins/ops-agent_baddabb3dac3f269/libexec/google_cloud_ops_agent_wrapper -config_path /etc/google-cloud-ops-agent/config.yaml -log_path /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/log/google-cloud-ops-agent/subagents/logging-module.log /var/lib/google-guest-agent/9186597670952967312/plugins/ops-agent_baddabb3dac3f269/subagents/fluent-bit/bin/fluent-bit --config /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_main.conf --parser /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_parser.conf --storage_path /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/state/fluent-bit/buffers
root 1250 0.4 12.9 1885348 128920 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9186597670952967312/plugins/ops-agent_baddabb3dac3f269/subagents/opentelemetry-collector/otelopscol --config /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-opentelemetry-collector/otel.yaml --feature-gates=receiver.prometheusreceiver.RemoveStartTimeAdjustment
root 1281 0.4 2.3 1181716 23240 ? Sl 22:54 0:00 /var/lib/google-guest-agent/9186597670952967312/plugins/ops-agent_baddabb3dac3f269/subagents/fluent-bit/bin/fluent-bit --config /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_main.conf --parser /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/run/google-cloud-ops-agent-fluent-bit/fluent_bit_parser.conf --storage_path /var/lib/google-guest-agent/9186597670952967312/agent_state/plugins/ops-agent/state/fluent-bit/buffers
watanab+ 1350 0.0 0.1 3752 1952 pts/0 S+ 22:55 0:00 grep ops-agent
拡張ポリシーの削除
拡張ポリシーを削除すると、拡張ポリシーによってインストールされたOpsエージェントも削除されるか検証してみたいと思います。
拡張ポリシーを削除します。

拡張ポリシーが削除されました。

先ほど、拡張ポリシーによって、ラベル ops:trueが付与された3台のCompute Engineには、Opsエージェントがインストールされていましたが、拡張ポリシーの削除に伴いアンインストールされていました。
your_username@vm-extension-poc-ops-true-1:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 23:29:01 UTC 2025
watanab+ 1906 0.0 0.1 3752 1816 pts/0 S+ 23:29 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-2:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 23:29:45 UTC 2025
watanab+ 1878 0.0 0.2 3752 1992 pts/0 S+ 23:29 0:00 grep ops-agent
your_username@vm-extension-poc-ops-true-3:~$ date && ps aux | grep 'ops-agent'
Tue Dec 9 23:30:11 UTC 2025
watanab+ 1884 0.0 0.1 3752 1836 pts/0 S+ 23:30 0:00 grep ops-agent
さいごに
今回は、2025年12月8日にPreviewでリリースされたVM Extension Managerという機能について解説と検証を行ってみました。
VM Extension ManagerによってOpsエージェントを大量のCompute Engineにインストールする作業がかなり楽になると思いました。今までAnsibleや起動スクリプトでやっていた作業が、ポリシー1つで済むようになります。ポリシー変更が数分以内に反映されるのも地味に便利かと思います。
あと、VM Extension Manager自体に追加料金がかからないのも嬉しいポイントです。
一方で、ゾーン単位でポリシーを作る必要があるのは少し面倒かと感じました。マルチゾーンやマルチリージョンで展開している環境だと、各ゾーンごとにポリシーを作らないといけません。100ポリシーの上限もあるので、大規模環境ではラベルをうまく使って条件指定することでポリシー数を抑える設計が必要になると思います。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部コンサルティング部の渡邉でした!







