[Azure Automation] Proxy環境でのHybrid Runbook Worker のセットアップ

# はじめに
- 「Azure Automation + 拡張機能ベース(V2)のHybrid Runbook Worker(以降、HRWと呼ぶ)」の構成において、その間にProxy環境を使用する場合のセットアップ手順は、 [Azureドキュメント](https://docs.microsoft.com/ja-jp/azure/automation/extension-based-hybrid-runbook-worker-install?tabs=windows#proxy-server-use "拡張機能ベースの Windows または Linux ユーザー Hybrid Runbook Worker を Azure Automation にデプロイする (プレビュー) プロキシ サーバーの使用") に記述がありますが、ドキュメント通りでは正しくセットアップできませんでした。
試行錯誤し、正しく動作できた手順を記載します。
- 前提条件
    - Automationアカウント、ハイブリッド Worker グループ は作成済
    - HRW
        - Azure VM + Windows Server OS で構築済
        - 拡張機能ベース(V2)を使用
    - Firewall等で必要な通信は許可済

# 手順
1. (再セットアップの場合)
    1. Azure Portalから、[Automationアカウント]-[{HRWを使用するAutomationアカウント名}]-[ハイブリッド Worker グループ]-[{HRWグループ名}]-[{HRWのVM名}]を選択し、[削除]
　※一覧から"HRWのVM名"が無くなることを確認する
    2. HRWへリモートデスクトップ接続後、regeditを使用し、レジストリ [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HybridRunbookWorkerV2]の削除
    ※実施しなくても動作する場合がある。
2. PowerShellから下記コマンドを実行
    ```
    # Azureへ接続
    Connect-AzAccount
    
    # 変数
    #- サブスクリプションID
    $subscription="xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx"
    #- HRW VMのリソースグループ
    $rg = "aaaaa"
    #- HRW VMの場所 例:Japan East
    $location = "bbbbb"
    #- HRW VMのVM名
    $hybridVm = "ccccc"
    #- HRWを使用するAutomationアカウント名
    $ac = "ddddd"
    #- Proxyの情報 IPアドレス:Port 例:192.168.1.1:8080
    $proxy = "eee.eee.eee.eee:fff"
    
    # 事前処理
    #- Automation アカウントの詳細を取得するためのAPIエンドポイント
    $url="https://westcentralus.management.azure.com/subscriptions/${subscription}/resourceGroups/${rg}/providers/Microsoft.Automation/automationAccounts/${ac}?api-version-2021-06-22"
    #- Connect-AzAccountしたユーザのトークンの取得
    $token = (Get-AzAccessToken).Token
    #- Automation アカウントの詳細を取得
    $data = (Invoke-RestMethod -Uri $url -Method GET -Headers @[Authorization="Bearer $token"])
    #- Automation アカウントの詳細からproperties.automationHybridServiceUrlの取得
    # 補足) ドキュメントでは「"AutomationAccountURL"  = "<registrationurl>/<subscription-id>"」と記述しているが、正しくは「"AutomationAccountURL"  = "properties.automationHybridServiceUrl"」
    $automationHybridServiceUrl = $data.properties.automationHybridServiceUrl
    
    #- 拡張機能の設定情報
    # 補足) Proxy認証が無い場合は、"UserName"及び$protectedsettingsは削除する
    $settings = @{
        "AutomationAccountURL"  = $automationHybridServiceUrl;    
        "ProxySettings" = @{
            "ProxyServer" = $proxy;
            "UserName"="test";
        }
    };
    $protectedsettings = @{
        "ProxyPassword" = "password";
    };
    
    # 拡張機能の設定
    # 補足) Proxy認証が無い場合は、$protectedsettingsは削除する
    Set-AzVMExtension -ResourceGroupName $rs -Location $location -VMName $hybridVm -Name "HybridWorkerExtension" -Publisher "Microsoft.Azure.Automation.HybridWorker" -ExtensionType HybridWorkerForWindows -TypeHandlerVersion 0.1 -Settings $settings -ProtectedSettings $protectedSettings
    ```
    本コマンドを実行すると"Specified machineld is not associated with automation account."エラーとなり失敗するが問題無し。
    この時、HRWのレジストリ[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Azure\HybridWorker\Parameters]-[Http Connection Proxy Uri]へProxy情報($proxy)が記録

3. Azure Portalから、[Virtual Machines]-[{HRWのVM名}]　→　[設定]-[拡張機能とアプリケーション]　→　[HybridWorkerExtension]　→　[アンインストール] の順にクリック
　※一覧から"HybridWorkerExtension"が無くなることを確認する
　※本手順を実施しないと、No.4にて追加候補として一覧に表示しない
4. Azure Portalから、[Automationアカウント]-[{HRWを使用するAutomationアカウント名}]-[ハイブリッド Worker グループ]-[{HRWグループ名}]より、"HRWのVM名"を追加
　※数秒後に一覧へ"HRWのVM名"が表示することを確認する。
　※数分～数十分経過しても処理が完了しない場合は、通信タイムアウト(例:Proxy情報が誤っている)の可能性がある。その場合は、原因を特定/修正後に再度No.1から実行する。

設定が完了すると、下記の通りHRWのレジストリ内容が更新
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Azure\HybridWorker\Parameters]-[Http Connection Proxy Uri]からProxy情報が削除
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HybridRunbookWorkerV2]が作成

AutomationとHRW間で疎通が取れている場合は、No.4の画面にて"最終表示時刻"が表示する。但し、しばらく時間を要することがあるため、実際にジョブを実行し確認しても良い。

# 補足
No.1　→　4　→　2　の順番でも成功する場合がある