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 で解説が行われており、現時点では既知の問題となるようです。

 

追記

2022/1/25 時点では、問題が解決され、Automation アカウントのマネージド ID が有効な状態でも、Runbook が実行できるようになりました。

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

現時点では、既知の問題により、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 も中の人が積極的に回答してくださっているんですね。

Share

Written by Masayuki.Ozawa

12月 1st, 2021 at 9:23 pm

Leave a Reply