はじめに
Azure Functionsを動かすには、下記ドキュメントにあるようにStorageが必要となります。
この接続にマネージドIDを使うことができるということなので試してみました。
ドキュメント
ドキュメントは以下にあります。
複数のことが記載されているので分かりにくいのですが、「AzureWebJobsStorageにマネージドIDを使用する」が該当する部分です。
実装
今回は、従量課金プランのJavaで試してみました。まずは、Azure Storageを作成します。Azure Functionsを作成すると自動的に紐づけられたStorageが生成されますが、今回は検証用として別のStorageを生成します。
次にAzure FunctionsのマネージドIDにStorageの権限を付与します。上記ドキュメントに詳しく記述がありますが、「ストレージBLOBデータ所有者」のロールをマネージドIDに与えます。
権限を与えたらこんな感じになります。
次にAzure Functionsの「構成」を設定します。AzureWebJobsStorage
を編集し、名前をAzureWebJobsStorage__accountName
、値を作成したStorageの名前に変更します。
これで設定は完了です。実際にAzure Functionsを起動した場合、指定したStorageにAzure Functionsの関連情報が保存されました。
しかし...
これで当初の目的は達成されましたが、ドキュメントに以下の記載があります。
同様に、Linux 従量課金プランでサーバー側ビルドを使用する場合は、AzureWebJobsStorage がデプロイ成果物に使用されます。 Linux 従量課金プランで AzureWebJobsStorage に対して ID ベースの接続を有効にするときは、外部デプロイ パッケージを使ってデプロイする必要があります。
なんのこっちゃよく分かりませんでしたが、マネージドIDを使って接続する設定を行った後、Azure Plugins for Gradle
を使って再度関数をデプロイしようとすると、AzureWebJobsStorage
が設定されておらずにデプロイに失敗しました。
リンクされているドキュメントは以下なのですが、まだいい解決方法が見つかりませんでした。