Azure FunctionsにてStorageの接続にマネージドIDを使って接続する

はじめに

Azure Functionsを動かすには、下記ドキュメントにあるようにStorageが必要となります。

learn.microsoft.com

この接続にマネージドIDを使うことができるということなので試してみました。

ドキュメント

ドキュメントは以下にあります。

learn.microsoft.com

複数のことが記載されているので分かりにくいのですが、「AzureWebJobsStorageにマネージドIDを使用する」が該当する部分です。

実装

今回は、従量課金プランのJavaで試してみました。まずは、Azure Storageを作成します。Azure Functionsを作成すると自動的に紐づけられたStorageが生成されますが、今回は検証用として別のStorageを生成します。

生成したStorage

次にAzure FunctionsのマネージドIDにStorageの権限を付与します。上記ドキュメントに詳しく記述がありますが、「ストレージBLOBデータ所有者」のロールをマネージドIDに与えます。

ストレージBLOBデータ所有者権限の付与

権限を与えたらこんな感じになります。

権限付与

次にAzure Functionsの「構成」を設定します。AzureWebJobsStorageを編集し、名前をAzureWebJobsStorage__accountName、値を作成したStorageの名前に変更します。

Azure Functionsの「構成」

これで設定は完了です。実際にAzure Functionsを起動した場合、指定したStorageにAzure Functionsの関連情報が保存されました。

Storageに保存されたAzure Functionsの関連情報

しかし...

これで当初の目的は達成されましたが、ドキュメントに以下の記載があります。

同様に、Linux 従量課金プランでサーバー側ビルドを使用する場合は、AzureWebJobsStorage がデプロイ成果物に使用されます。 Linux 従量課金プランで AzureWebJobsStorage に対して ID ベースの接続を有効にするときは、外部デプロイ パッケージを使ってデプロイする必要があります。

なんのこっちゃよく分かりませんでしたが、マネージドIDを使って接続する設定を行った後、Azure Plugins for Gradleを使って再度関数をデプロイしようとすると、AzureWebJobsStorageが設定されておらずにデプロイに失敗しました。

github.com

リンクされているドキュメントは以下なのですが、まだいい解決方法が見つかりませんでした。

learn.microsoft.com