Azure Functions 用に Save-Module する

2022/05/30に公開

一般的に、PowerShell で module を使うときには Install-Module を叩くわけですが、Azure Functions の PowerShell 開発者向けガイド には以下のように書かれています。

まぁ確かに Functions が動くたびに Install-Module してたら無駄だなという感じは分かります。
実際に試してみると意外とシンプルではなかったので手順を記載しておきます。


まず、これらのコマンドの実行環境ですが、Azure Portal 自体のコンソールでは PowerShell 環境が上がってこないので、Kudu から開く形になります。
Kudu > Debug console > PowerShell と進みます。

PowerShell on Kudu

で、Save-Module を叩こうと思っても Nuget がないと怒られるのでこれを解消します。
Install-PackageProvider すればいいはずなんですがまたこれがエラーを吐きます。
んで、結果としては TLS 1.2 への対応かー、という感じでした。

PS C:\home> cd site\wwwroot
PS C:\home\site\wwwroot> mkdir modules
PS C:\home\site\wwwroot> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
PS C:\home\site\wwwroot> Install-PackageProvider nuget -Force -Scope CurrentUser
PS C:\home\site\wwwroot> Save-Module Az.DesktopVirtualization -Path .\modules 

modules フォルダに PowerShell module があれば自動的に読み込んでくれるので、明示的に Import-Module を叩かなくてもいいような感じです。

2022-05-27T12:52:08.977 [Information] INFORMATION: Loaded Module 'Az.DesktopVirtualization'

ちなみにこれは Functions を作るときに同時に作られる Storage Account の Files 領域に保存されています。

PowerShell modules in Azure Files


参考サイトはこちらなど。

  • 開発ガイドにはそれ以外にもいっぱい参考になる内容が書いてあります

https://learn.microsoft.com/azure/azure-functions/functions-reference-powershell

  • そもそも Save-Module の使い方的なところ なんかアクセスできなくなっちゃったのでコメントアウト

  • TLS 1.2 周りの対応

https://azurelessons.com/install-packageprovider-no-match-was-found-nuget/

Microsoft (有志)

Discussion