Azure Automation の Runbook を任意の環境上で動作させる方法として、Hybrid Runbook Worker があります。
Hybrid Runbook Worker を使用することで、任意の環境上で Automation の Runbook を実行することができるようになりますので、オンプレミスの環境や Azure VM 上で Runbook を実行するということが可能となります。
Hybrid Runbook Worker の導入方法としては、エージェントベースワーカー (v1) と拡張機能ベースワーカー (v2) の 2 種類があります。
- Automation でエージェントベースの Windows Hybrid Runbook Worker をデプロイする
- 拡張機能ベースの Windows または Linux ユーザー Hybrid Runbook Worker を Automation にデプロイする (プレビュー)
エージェントベースについては、Log Analytics ワークスペースへの接続が必要でした。
拡張機能ベースについては、Log Analytics ワークスペースに接続はする必要はなく、オンプレミスの環境であれば、Azure Arc Enabled Server の拡張機能としてインストールをすることができます。(Azure VM の場合は、Arc ではなく、Azure VM エージェントの拡張機能としてインストールできます)
Azure Arc が導入されている環境を Hybrid Runbook Worker でしようとした場合、現時点ではエラーとなるケースがあるようです。
原因都回避策については、次の Q&A で解説が行われており、現時点では既知の問題となるようです。
追記
2022/1/25 時点では、問題が解決され、Automation アカウントのマネージド ID が有効な状態でも、Runbook が実行できるようになりました。
発生するエラーと回避方法
現時点では、既知の問題により、Azure Arc の拡張機能経由でHybrid Runbook Worker を使用する場合、Azure Automation (Automation アカウント) でマネージド ID を使用するようになっていると、Runbook 実行時にエラーとなります。
回避するためには、Automation アカウントのマネージド ID をオフにする必要があるようです。
デフォルトの設定ではマネージド ID がオンの状態となっており、Runbook を実行するとステータスが「キューに挿入済み」から変更されず、Runbook の実行先として指定した Hybrid Runbook Worker のイベントビューアー (アプリケーションとサービスログ -> Microsoft-SMA -> Operational) に次のようなエラーが出力され、Runbook を実行することができません。
Exception in the JobRuntimeDataService SandboxHub implementation [accountId={10e9aea7-f687-4ad6-98f1-cab76bd9c745}][sandboxId={ea1b7cf9-a9aa-45b6-aad8-1daebc56703b}][methodName=GetJobAction][exception=JobRuntimeData.Client.JobRuntimeDataServiceClientException: Bad Request {"Message":"Could not authenticate. Certificate is not attached to request."} [JobRuntimeData.Common.TransientFaultHandling.HttpRequestWithStatusException: Bad Request {"Message":"Could not authenticate. Certificate is not attached to request."}] 場所 JobRuntimeData.Client.JwtTokenAuthorizationHeaderBuilder.GetAuthorizationHeader() 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\JwtTokenAuthorizationHeaderBuilder.cs:行 56 場所 JobRuntimeData.Client.JobRuntimeDataServiceClient.AddAuthentication(WebClient webClient) 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\JobRuntimeDataServiceClient.cs:行 465 場所 JobRuntimeData.Client.JobRuntimeDataServiceClient.Get[T](String suffixUri, IDictionary`2 queryParameters, IDictionary`2 headers) 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\JobRuntimeDataServiceClient.cs:行 353 場所 JobRuntimeData.Client.Operations.JobOperations.JobOperations.GetJobActions(Guid accountId, Guid sandboxId) 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\Operations\JobOperations\JobOperations.cs:行 62 場所 Orchestrator.Runtime.JobRuntimeDataProvider.JobRuntimeDataProvider.GetJobAction(Guid sandboxId) 場所 X:\bt\1222199\repo\src\Shared\Orchestrator.Runtime\JobRuntimeDataProvider\JobRuntimeDataProvider.cs:行 70 場所 Orchestrator.Runtime.JobRuntimeDataProvider.JobRuntimeDataProviderExceptionHandler.GetJobAction(Guid sandboxId) 場所 X:\bt\1222199\repo\src\Shared\Orchestrator.Runtime\JobRuntimeDataProvider\JobRuntimeDataProviderExceptionHandler.cs:行 71 inner exception -> JobRuntimeData.Common.TransientFaultHandling.HttpRequestWithStatusException: Bad Request {"Message":"Could not authenticate. Certificate is not attached to request."} 場所 JobRuntimeData.Client.ImdsClient.<InvokeRequest>d__10`1.MoveNext() 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\ImdsClient.cs:行 111 --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所 JobRuntimeData.Client.ImdsClient.<GetMsiTokenAsync>d__9`1.MoveNext() 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\ImdsClient.cs:行 0 --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所 JobRuntimeData.Client.JwtTokenAuthorizationHeaderBuilder.<>c.<GetAuthorizationHeader>b__12_0() 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\JwtTokenAuthorizationHeaderBuilder.cs:行 46 場所 JobRuntimeData.Common.TransientFaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func) 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Common\TransientFaultHandling\RetryPolicy.cs:行 137 場所 JobRuntimeData.Client.JwtTokenAuthorizationHeaderBuilder.GetAuthorizationHeader() 場所 X:\bt\1222199\repo\src\Shared\JobRuntimeData.Client\JwtTokenAuthorizationHeaderBuilder.cs:行 46 ]
上記のエラーが発生している場合、Automation アカウントのマネージド ID が無効 (オフ) の状態に設定することで、Runbook を実行することができます。
通常のトラブルシューティングであれば Automation で VM 拡張機能ベースの Hybrid Runbook Worker の問題をトラブルシューティングする に記載されている内容で対応できると思うのですが、今回のケースでは取得したログからは、エラーの根本原因を判断することは難しそうでした。
調べ物をしていて、Answers の回答にあたるのは初めてだったのですが、Answers も中の人が積極的に回答してくださっているんですね。