Static Web Appsはお手軽に静的なWebサイトを提供するだけでなく、APIもデプロイできます。
APIをデプロイした場合、Azureの他のリソースにアクセスする処理が必要なケースが多いと思います。
APIから他のリソースにアクセスするには接続情報を環境変数に持たせる手もありますが、マネージドIDを使用するとより安全でスマートなコードが組めるので良いですよね。
Static Web AppsのAPIは2種類
Static Web AppsのAPIはマネージド関数と独自の関数の使用という 2 つの構成が存在します。
マネージド関数の方がお手軽に使えますが、下記の表にあるようにマネージドID(現状の和訳だと「管理対象 ID」になっている)が使えません。
https://docs.microsoft.com/ja-jp/azure/static-web-apps/apis
このため、独自の関数の使用を選択する必要があります。
・・・とキレイに書いてみましたが、実際はこの仕様を知らず、Static Web AppsのマネージドIDを有効化してIAM設定をして「動かないなぁ。。」と悩んでいました。
マネージド関数でマネージドIDを使おうとして、169.254.169.254:80 にアクセスできない旨のエラーを見て気づきました。
上記IPアドレスは下記のドキュメント等に登場しますが、Azureに対する何らかの問い合わせに使われるIPアドレスです。
独自の関数の使用
下記のドキュメントを参考に、Azureポータルからポチポチ設定すれば連携できます。
https://docs.microsoft.com/ja-jp/azure/static-web-apps/functions-bring-your-own
ドキュメントを見なくてもできちゃうくらい簡単です。
まずはマネージドIDを有効化したFunctionsを用意し、その後Static Web Appsの「関数」のところからリンクすればOKです。
注意点としては、GitHub ActionsでCI/CDを既にマネージド関数仕様で組んでいる場合、api_locationのパスを空文字にしておく必要があります。
ちなみにAzureポータル以外にもREST APIを叩いても設定できますので、自動構築もできちゃいますね。
まとめ
Static Web AppsのAPIでマネージドIDを使用したい場合はマネージドIDが有効なFunctionsを用意し、独自の関数の使用 の設定を行いリンクしましょう。