Azure のマネージド ID は分かれば非常に有用な概念なのですが、いざ実装するとなった場合、インフラとアプリケーションが密接に関わっていることもあってハードルが高く思うケースがあると思います。

そんな皆様のために、いつもの当たり障りのない記事ではなく、しっかり実用的に使えるコードを用意しました。

早速全体像をご紹介します。

サンプルコードの概要

コードは下記にあります。

https://github.com/hirokimatsueda/azure-managed-id-sample

何らかのデータを Functions を経由して Cosmos DB に保管・取得するアプリとインフラのコードのサンプルです。

データは少なくとも id と category の値を持つことを想定します。こんな感じで。

{
  "id": "abc123",
  "category": "test",
  "data": "aaaabbbbcccc"
}

category は Cosmos DB 上のパーティションキーとして設定しますので、一定の法則で値が入ると良いことがありそうですね。

アーキテクチャ

Architecture

ユーザーからのリクエストを 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 上のアプリの解説記事もありますので、引き続きご確認いただければ幸いです。

インフラコードの説明

アプリコードの説明