SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Automation を Azure Arc の 拡張機能ベースの Hybrid Runbook Worker で実行する際の注意点 (2021/11 時点の暫定対応)

leave a comment

Azure Automation の Runbook を任意の環境上で動作させる方法として、Hybrid Runbook Worker があります。

Hybrid Runbook Worker を使用することで、任意の環境上で Automation の Runbook を実行することができるようになりますので、オンプレミスの環境や Azure VM 上で Runbook を実行するということが可能となります。

Hybrid Runbook Worker の導入方法としては、エージェントベースワーカー (v1) と拡張機能ベースワーカー (v2) の 2 種類があります。

エージェントベースについては、Log Analytics ワークスペースへの接続が必要でした。

拡張機能ベースについては、Log Analytics ワークスペースに接続はする必要はなく、オンプレミスの環境であれば、Azure Arc Enabled Server の拡張機能としてインストールをすることができます。(Azure VM の場合は、Arc ではなく、Azure VM エージェントの拡張機能としてインストールできます)

image

Azure Arc が導入されている環境を Hybrid Runbook Worker でしようとした場合、現時点ではエラーとなるケースがあるようです。

原因都回避策については、次の Q&A で解説が行われており、現時点では既知の問題となるようです。

発生するエラーと回避方法

現時点では、既知の問題により、Azure Arc の拡張機能経由でHybrid Runbook Worker を使用する場合、Azure Automation (Automation アカウント) でマネージド ID を使用するようになっていると、Runbook 実行時にエラーとなります。

回避するためには、Automation アカウントのマネージド ID をオフにする必要があるようです。

image

デフォルトの設定ではマネージド 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 も中の人が積極的に回答してくださっているんですね。

Written by Masayuki.Ozawa

12月 1st, 2021 at 9:23 pm

Leave a Reply

Share via
Copy link
Powered by Social Snap