Azure のマネージド ID は分かれば非常に有用な概念なのですが、いざ実装するとなった場合、インフラとアプリケーションが密接に関わっていることもあってハードルが高く思うケースがあると思います。
そんな皆様のために、いつもの当たり障りのない記事ではなく、しっかり実用的に使えるコードを用意しました。
早速全体像をご紹介します。
サンプルコードの概要
コードは下記にあります。
https://github.com/hirokimatsueda/azure-managed-id-sample
何らかのデータを Functions を経由して Cosmos DB に保管・取得するアプリとインフラのコードのサンプルです。
データは少なくとも id と category の値を持つことを想定します。こんな感じで。
{
"id": "abc123",
"category": "test",
"data": "aaaabbbbcccc"
}
category は Cosmos DB 上のパーティションキーとして設定しますので、一定の法則で値が入ると良いことがありそうですね。
アーキテクチャ
ユーザーからのリクエストを Functions で受け取り、Cosmos DB とデータのやり取りをするシンプルな構成です。
Functions の認証は Functions の webbook の API キーを利用します。
Functions から Cosmos DB にアクセスする手段は様々なものがありますが、表題の通りマネージド ID を使用を想定しています。
コードの構成
applications フォルダに Functions 上で動作する C#のアプリケーションがあり、infrastructure フォルダに Azure リソースを構築するための terraform のコードがあります。
infrastructure フォルダの terraform を実行して Azure 上に Functions と Cosmos DB、その他関連リソースを作成した後、applications フォルダのアプリを Functions にデプロイすればアプリにアクセス可能になります。
まとめ
サンプルコードの概要をご説明しました。
アーキテクチャ図はシンプルなので、少し安心してもらえたのではないかと思います。
terraform と Functions 上のアプリの解説記事もありますので、引き続きご確認いただければ幸いです。