はじめに
Connected Machine Agent のサポートを受けられるのは、直近で1年以内にリリースされたものだけです。つまりある程度の頻度でエージェントをアップグレードする必要があります。この手間を解決してくれる機能が自動アップグレードです。早く一般公開されてほしい…
検証環境の Windows Server にインストールしている Connected Machine Agent が自動アップグレードによって 1.60 から 1.61 にアップグレードされたので、実際にどのような流れで動くのかをログを見ながら確認しました。
自動アップデートの全体の流れ
まず大きな流れを整理すると、こんな感じです。
| ステップ | 日時 (JST) | 処理内容 | 備考 |
|---|---|---|---|
| ① | 2026-02-25 09:50:19 | Azure 側が desiredVersion を 1.61 に更新 | ARM 側のリソース変更 |
| ② | 2026-02-25 09:50:19 | エージェントが CloudData ポーリングで desiredVersion=1.61 を受信 | himds が約1時間ごとにポーリング |
| ③ | 2026-02-26 01:54:01 | タスクスケジューラ(\azcmagent)が azcmagent_check_updates.ps1 を起動 | time trigger で定期実行(①から約16時間後) |
| ④ | 2026-02-26 01:55:32 | アップグレード完了・タスク定義を再登録 | インストーラがタスクを削除→再登録 |
| ⑤ | 2026-02-26 01:55:43 | 新バージョンのエージェントがアップグレード結果を設定ファイルに書き込み | lastattempt.status=success など |
以降、それぞれのステップをログを交えて解説します。
Azure 側の desiredVersion の更新
Azure Resource Manager(ARM)側では、Microsoft.HybridCompute/machines リソースのプロパティ properties.agentUpgrade.desiredVersion が変更されたタイミングが Azure Resource Graph の resourcechanges テーブルに記録されています。
{
"changeType": "Update",
"changeAttributes": {
"timestamp": "/Date(1771977693036)/",
"changesCount": 1
},
"changes": {
"properties.agentUpgrade.desiredVersion": {
"previousValue": "1.60",
"newValue": "1.61"
}
}
}
timestamp の 1771977693036(Unix ミリ秒)を変換すると 2026-02-25 00:50:19 UTC(= 09:50:19 JST) です。この時刻に Azure 側で desiredVersion が 1.60 → 1.61 に書き変わっています。
エージェントによる desiredVersion の受信
Connected Machine Agent(himds)は約1時間ごとに Azure サービスへ CloudData をポーリングし、最新の設定(desiredVersion など)を受け取っているようです。
himds.log から、desiredVersion が切り替わる前後の行を抜粋します。
# ---- 切り替え前(desiredVersion = 1.60)----
time="2026-02-25T08:49:49+09:00" level=debug msg="CloudData from service - {"automaticUpgrade":{"desiredVersion":"1.60", ...}}"
# ---- 初めて 1.61 を受信 ----
time="2026-02-25T09:50:19+09:00" level=debug msg="CloudData from service - {"automaticUpgrade":{"desiredVersion":"1.61","downloadLink":"https://gbl.his.arc.azure.com/azcmagent/1.61/AzureConnectedMachineAgent.msi","enabled":true}}"
# ---- 以降はすべて 1.61 ----
time="2026-02-25T09:55:23+09:00" level=debug msg="CloudData from service - {"automaticUpgrade":{"desiredVersion":"1.61", ...}}"
time="2026-02-25T10:50:44+09:00" level=debug msg="CloudData from service - {"automaticUpgrade":{"desiredVersion":"1.61", ...}}"
2026-02-25T09:50:19+09:00 が、エージェントとして初めて desiredVersion=1.61 を受信した瞬間です。これは ARM 側の変更(① のタイムスタンプ)とほぼ一致しています。少し時差があってもよさそうですが、細かいことは気にしないことにします。
ただし、受信してもすぐにはアップグレードは実行されません。自動アップグレードは内部のスケジューラによる試行タイミングまで待機します。
タスクスケジューラによるアップグレード処理
自動アップグレードの本体は、Windows タスクスケジューラに登録された \azcmagent タスクが azcmagent_check_updates.ps1 を PowerShell で実行する仕組みになっています。
タスクの XML 定義(azcmagent.xml)を確認すると、アクションは次の通りです。
<Actions Context="Author">
<Exec>
<Command>C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
<Arguments>-File "C:\Program Files\AzureConnectedMachineAgent\azcmagent_check_updates.ps1"</Arguments>
</Exec>
</Actions>
このタスクの実行ログは、Windows イベントログ(Microsoft-Windows-TaskScheduler/Operational)に記録されています。アップグレードが実行された前後のイベントを抜粋します。
注意: タスクスケジューラのイベントは TimeCreated が UTC で記録されています。以下の時刻に +9:00 を加えると JST になります。
# ---- タスク起動(UTC 16:54:01 = JST 01:54:01)----
[2026-02-25 16:54:01] EventId=107 Task Scheduler launched instance of task "\azcmagent" due to a time trigger condition.
[2026-02-25 16:54:01] EventId=129 Task Scheduler launch task "\azcmagent", instance "powershell.exe" with process ID 108.
[2026-02-25 16:54:01] EventId=100 Task Scheduler started instance of the "\azcmagent" task for user "NT AUTHORITY\SYSTEM".
[2026-02-25 16:54:01] EventId=200 Task Scheduler launched action "powershell.exe" in instance of task "\azcmagent".
# ---- アップグレード処理中にタスク定義が書き換えられる(UTC 16:55:32〜33 = JST 01:55:32〜33)----
[2026-02-25 16:55:32] EventId=141 User "NT AUTHORITY\System" deleted Task Scheduler task "\azcmagent"
[2026-02-25 16:55:32] EventId=111 Task Scheduler terminated instance of the "\azcmagent" task.
[2026-02-25 16:55:33] EventId=106 User "S-1-5-18" registered Task Scheduler task "\azcmagent"
[2026-02-25 16:55:33] EventId=140 User "S-1-5-18" updated Task Scheduler task "\azcmagent"
# ---- タスク完了(UTC 16:55:43 = JST 01:55:43)----
[2026-02-25 16:55:43] EventId=201 Task Scheduler successfully completed task "\azcmagent", action "powershell.exe" with return code 0.
[2026-02-25 16:55:43] EventId=102 Task Scheduler successfully finished instance of the "\azcmagent" task for user "NT AUTHORITY\SYSTEM".
注目すべきは途中の EventId=141 / 111 / 106 / 140 の連続です。アップグレード処理が自分自身のタスク定義を一度削除し、新バージョン用の定義で再登録しています。実際、更新後の azcmagent.xml を見るとトリガーが次のように設定されています。
<Triggers>
<CalendarTrigger>
<StartBoundary>2026-02-26T03:01:00</StartBoundary>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
2026-02-26T03:01:00 から1日おきに実行されるよう再登録されています。翌日 03:01 に実際にタスクが起動して return code 0 で正常終了しているイベントも確認でき、アップグレード後のエージェントが正常に動作していることが分かります。もともとタスクスケジューラは01:54に実行されていたので、アップグレードするたびに、アップグレードが試行される時間が変わるようです。
## ---- 翌日の定期実行(UTC 18:01:00 = JST 03:01:00)----
[2026-02-25 18:01:00] EventId=107 Task Scheduler launched instance of task "\azcmagent" due to a time trigger condition.
[2026-02-25 18:01:01] EventId=201 Task Scheduler successfully completed task "\azcmagent", action "powershell.exe" with return code 0.
[2026-02-25 18:01:01] EventId=102 Task Scheduler successfully finished instance of the "\azcmagent" task for user "NT AUTHORITY\SYSTEM".
アップグレード結果の書き込み
# ---- アップグレード前(バージョン 1.60 が動作中)----
time="2026-02-26T01:54:02+09:00" level=info msg="Agent Version: 1.60.03293.2680"
time="2026-02-26T01:54:02+09:00" level=info msg="Agent Command: get automaticupgrade.desiredversion"
time="2026-02-26T01:54:02+09:00" level=info msg="Configuration operation completed" property=automaticupgrade.desiredversion
time="2026-02-26T01:54:02+09:00" level=info msg="Agent Command: get automaticupgrade.lastattempt.status"
time="2026-02-26T01:54:02+09:00" level=info msg="Configuration operation completed" property=automaticupgrade.lastattempt.status
# ---- アップグレード後(バージョン 1.61 が起動)----
time="2026-02-26T01:55:34+09:00" level=info msg="Agent Version: 1.61.03319.2737"
time="2026-02-26T01:55:42+09:00" level=info msg="Agent Command: set automaticupgrade.lastattempt.status success"
time="2026-02-26T01:55:42+09:00" level=info msg="Configuration operation completed" property=automaticupgrade.lastattempt.status value=success
time="2026-02-26T01:55:43+09:00" level=info msg="Agent Command: set automaticupgrade.lastattempt.desiredversion 1.61"
time="2026-02-26T01:55:43+09:00" level=info msg="Configuration operation completed" property=automaticupgrade.lastattempt.desiredversion value=1.61
time="2026-02-26T01:55:43+09:00" level=info msg="Agent Command: set automaticupgrade.lastattempt.timestamp 1772070842"
time="2026-02-26T01:55:43+09:00" level=info msg="Configuration operation completed" property=automaticupgrade.lastattempt.timestamp value=1772070842
01:54:02 に 1.60 が最後の動作をして、01:55:34 には 1.61 が起動しています。約1分半でアップグレードが完了しています。アップグレードした 1.61 のエージェントは、完了後に lastattempt.status=success などの結果を自身の設定に書き込みます。この内容は azcmagent config get でも確認できます。
[Key] automaticupgrade.desiredversion
1.61
[Key] automaticupgrade.lastattempt.status
success
[Key] automaticupgrade.lastattempt.desiredversion
1.61
[Key] automaticupgrade.lastattempt.timestamp
1772070842
lastattempt.timestamp の 1772070842 は Unix 秒(サーバローカルタイム基準)で、JST に換算すると 2026-02-26 01:54:02 となり、ログのタイムスタンプと整合しています。
まとめ
ログを見る限りでは以下のような流れで自動アップグレードが動いていました。Azure Arc の自動アップグレードは、Azure サービス → エージェントへの通知 → スケジューラによる実行 → 完了報告 という流れで動作していそうです。早く一般公開になーれー
| 時刻 (JST) | イベント |
|---|---|
| 2026-02-25 09:50:19 | Azure 側で desiredVersion が 1.60 → 1.61 に更新 |
| 2026-02-25 09:50:19 | エージェントが CloudData ポーリングで 1.61 を初受信 |
| 2026-02-26 01:54:01 | タスクスケジューラが \azcmagent タスクを起動(time trigger) |
| 2026-02-26 01:54:02 | 自動アップグレード試行開始 |
| 2026-02-26 01:55:32 | アップグレード処理がタスク定義を削除・再登録 |
| 2026-02-26 01:55:34 | 1.61 のエージェントが起動(アップグレード完了) |
| 2026-02-26 01:55:43 | アップグレード結果(success)が設定に書き込まれる |
| 2026-02-26 01:55:43 | タスクスケジューラが \azcmagent タスクの完了を記録(return code 0) |
Note
- 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
- 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
- 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。