下記のサンプル実装のアプリコード部分を解説します。

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

アプリ処理詳細

コードはこちら: https://github.com/hirokimatsueda/azure-managed-id-sample/blob/main/applications/DataApis

詳細と言うほどのものではないですが・・・。

GetData

リクエストパラメータから idcategory を読み取って、対象のデータを Cosmos DB から取得し返却します。

PutData

リクエストボディのデータを Cosmos DB に Upsert します。

実装のポイント

マネージド ID という観点で言うと、CosmosClient に渡すクレデンシャル情報に new DefaultAzureCredential() を指定するくらいです。

private static CosmosClient InitializeCosmosClient()
{
    return new CosmosClient(Environment.GetEnvironmentVariable("COSMOS_ENDPOINT", EnvironmentVariableTarget.Process), new DefaultAzureCredential());
}

これにより Functions 上ではマネージド ID のクレデンシャルが使用されます。

ローカル PC 上で実行する場合は、ローカル PC 上の認証情報を使用してくれるので、例えば az login したユーザーが Cosmos DB のデータへのアクセス権限を持っていればローカル PC でデバッグが可能です。

ほかのポイントとしては、CosmosClient をメソッド呼び出し時に生成するのではなく Static 変数として持っておき、Lazy クラスを活用した初期化を実施しています。

private static Lazy<CosmosClient> lazyClient = new Lazy<CosmosClient>(InitializeCosmosClient);

これにより CosmosClient の初期化というコストの高い処理回数を削減しています。

まとめ

アプリ開発のポイントを整理しました。

ポイントと言いつつも、インターネットで探せば見つかる情報ばかりではありますね。

インフラの設定が整っていればアプリの実装はシンプルなのでありがたいです。

これでマネージド ID の使用有無はプロジェクトの進行に影響なしですね?