Azure Batch にNET 4.7.1を仕込む備忘録。
NET4.7.1を仕込むには、まずインストーラを取得する必要がありますが、既定の状態だとCMDベースでCURLとかが使えないとかちょっと不自由。
Application Package
ただ、Azure Batchには、Application Packageと呼ばれるアプリケーションを仕込んでおく仕組みがあって、そこにNET4.7.1のパッケージを配置しておきます。
NET4.7.1のオフラインインストーラーは以下から取得します。
https://docs.microsoft.com/ja-jp/dotnet/framework/deployment/deployment-guide-for-developers
New Application から、EXEをZIP化してUploadしておくと所定のストレージに格納されます。
いちどタスクにApplication Packageを紐づけて環境変数を参照すると以下のように展開されています。
AZ_BATCH_APP_PACKAGE_netfx=D:\batch\tasks\apppackages\netfx4712018-03-15-01-59 AZ_BATCH_APP_PACKAGE_netfx#471=D:\batch\tasks\apppackages\netfx4712018-03-15-01-59
DIRすると
Directory of D:\batch\tasks\apppackages\netfx4712018-03-15-01-59 03/15/2018 02:02 AM <DIR> . 03/15/2018 02:02 AM <DIR> .. 03/15/2018 02:02 AM 68,742,112 NDP471-KB4033342-x86-x64-AllOS-ENU.exe 1 File(s) 68,742,112 bytes 2 Dir(s) 18,570,358,784 bytes free
こうなります。Docsでは以下のあたりを参照のこと。
コンピューティング ノードへのアプリケーション パッケージのインストール - Azure Batch | Microsoft Docs
Pool
PoolにApplication Packageを紐づけて、ノードをリブートします。
Start Task
Start Taskでインストーラーを起動します。
最初、/norestart
をつかたら、3010でエラーになりました。Rebootが必要なのに、/norestart
指定したからっぽいです。
MsiExec.exe and InstMsi.exe Error Messages (Windows)
今回使っているBatchノードはVMなので、不完全ながらインストールされてしまうと再度テストできないので、ノード数を 1->0->1 のように変更してさいどセットアップされるようにしてみます。
最終的には以下のコマンドライン。
cmd /c "%AZ_BATCH_APP_PACKAGE_netfx%\NDP471-KB4033342-x86-x64-AllOS-ENU.exe /q"
最後、RDPでのぞいて KB4033393が入っていればOK。
これで、ノードをスケールアップ、ダウンさせても各ノードにNET4.7.1が展開されるでしょう。
余談
DocsのAzure BatchサンプルのPortalは日本語なのに、現時点で英語になってたよくわからない。