🎼

[Azure] Service Connector の使い方を追ってみた

2022/06/04に公開

Azure の Service Connector が GA されたとのこと。

ドキュメントおよびチュートリアルを見ていたのですが、それだけだと使い方にピンとこなかったので調べてみました。

ドキュメントおよびチュートリアル

今回追ってみたサンプルは、上記のチュートリアルで使われている下記のサンプルです。

使い方

Service Connector の設定

App Service 側から Blob Storage へのアクセスは、App Service の Managed ID で接続するように構成しています。

az webapp connection create storage-blob -g ServiceConnector-tutorial-rg -n <app-name> --tg ServiceConnector-tutorial-rg --account <storage-name> --system-identity

アプリ側での呼び出し

直接の呼び出しは Pages/Index.cshtml.cs の下記の箇所。

Pages/Index.cshtml.cs
StorageHelper.UploadBlob(Environment.GetEnvironmentVariable(Const.ENDPOINT_ENV_KEY), Const.CONTAINER_NAME, Const.BLOB_NAME, content).Wait();

StorageHelper 側での UploadBlob 関数の定義は下記の通りです。

StorageHelper.cs
static public async Task UploadBlob(string containerEndpoint, string containerName, string blobName, string blobContents)
{
    var blobContainerUri = new Uri(new Uri(containerEndpoint), containerName);
    BlobContainerClient containerClient = new BlobContainerClient(blobContainerUri, new DefaultAzureCredential());
...

また、Const.ENDPOINT_ENV_KEY はアプリ内部で定義されています。

Const.cs
public class Const
{
    public const string ENDPOINT_ENV_KEY = "AZURE_STORAGEBLOB_RESOURCEENDPOINT";
    public const string CONTAINER_NAME = "default";
    public const string BLOB_NAME = "HelloWorld";
}

ということで、アクセスする URL は Environment.GetEnvironmentVariable(Const.ENDPOINT_ENV_KEY) つまり、環境変数の AZURE_STORAGEBLOB_RESOURCEENDPOINT を取得してきて加工しているということですね。

App Service (Service Connector) 側での動作

この AZURE_STORAGEBLOB_RESOURCEENDPOINT 環境変数が、Service Connector を作成した際に自動で定義されるようになっています。

結果として、今回のチュートリアルのような実装を行うことで Blob Storage へのアクセスを実現できるというわけでした。

まとめ

こういう処理を Service Connector 作成時に行ってくれることで、アプリ側での直接指定を無くしたり、個別に手動で環境変数を設定したりする手間を省いてくれている、ということですね!

Discussion