本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「実用性重視!AzureのマネージドID活用のサンプルコード(アプリコード)」を再編集したものです。
下記のサンプル実装のアプリコード部分を解説します。
https://github.com/hirokimatsueda/azure-managed-id-sample
アプリ処理詳細
コードはこちら:https://github.com/hirokimatsueda/azure-managed-id-sample/blob/main/applications/DataApis
詳細と言うほどのものではないですが…。
GetData
リクエストパラメーターからIDとcategoryを読み取って、対象のデータをCosmos DBから取得し返却します。
PutData
リクエストボディのデータをCosmos DBにUpsertします。
実装のポイント
マネージドIDという観点で言うと、CosmosClientに渡すクレデンシャル情報に new DefaultAzureCredential() を指定するくらいです。
private static CosmosClientInitializeCosmosClient() { 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 lazyClient = new Lazy(InitializeCosmosClient);
これにより CosmosClientの初期化というコストの高い処理回数を削減しています。
まとめ
アプリ開発のポイントを整理しました。
ポイントと言いつつも、インターネットで探せば見つかる情報ばかりではありますね。
インフラの設定が整っていればアプリの実装はシンプルなのでありがたいです。
これでマネージドIDの使用有無はプロジェクトの進行に影響なしですね?
松枝 宏樹/FIXER
愛知県在住、リモートワーク気味なエンジニア。
得意分野はC#、ASP.NET、terraform、AKSなど。