yotiky Tech Blog

とあるエンジニアの備忘録

Azure Functions で Azure Storage への接続情報

目次

検証環境

  • Azure Functions v3
  • Azure Blob Storage
  • Azure.Storage.Blobs v12.8.0 (ライブラリ)

直書き

サンプルコード向けなら直書き。

var blobServiceClient = new BlobServiceClient("connectionString");
var blobContainerClient = blobServiceClient.GetBlobContainerClient("blobContainerName");
var blobClient = blobContainerClient.GetBlobClient("blobName");

設定情報から取得

設定

ポータルで Azure Functions の構成からアプリケーション設定と接続文字列を設定できる。

アプリケーション設定には環境変数を設定する。
接続文字列にはDBの接続文字列を設定する。一応 Custom を選択するとストレージの接続文字列も使えなくはない。

f:id:yotiky:20210128202527p:plain:w300

tech-blog.cloud-config.jp

Azure Functions をローカル実行する時は、local.settings.json が設定として使われる。

AzureWebJobsStorage は、Azure Functions 作成時にリンクしたストレージの接続文字列が設定される。local.settings.jsonUseDevelopmentStorage=true が設定されている場合は、ストレージエミュレーターに接続される。

今回は、ValuesAPPLICTION_SETTINGS_VALUEConnectionStringsDB_CONNECTION_STRING を追加した。

ポータル上だと次の通り。

f:id:yotiky:20210128212501p:plain

local.settings.json では次のようになる。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "APPLICTION_SETTINGS_VALUE": "ApplicationSettingsValue"
  },
  "ConnectionStrings": {
    "DB_CONNECTION_STRING": "DBConnectionString"
  }
}

f:id:yotiky:20210128210604p:plain

実装

.NET Framework 版である v1 では、ConfigurationManager を使用していた。
.NET Core 版である v2 以降では、ConfigurationMBuilder を使用する。

ConfigurationMBuilderlocal.settings.json を追加してから Build() する。 ローカル実行の設定が不要な場合は、Configuration = new ConfigurationBuilder().Build(); でも動く。

Values は、Configuration[<key>] で取得する。
ConnectionStrings は、Configuration.GetConnectionString(<key>) で取得する。

using Microsoft.Extensions.Configuration;

public static class Function1
{
    private static IConfigurationRoot Configuration { get; }
    static Function1()
    {
        var builder = new ConfigurationBuilder()
            .AddJsonFile("local.settings.json", true)
            .AddEnvironmentVariables();
    
        Configuration = builder.Build();
    }

    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        var appSettingsValue = Configuration["APPLICTION_SETTIGS_VALUE"];
        var connectionString = Configuration.GetConnectionString("DB_CONNECTION_STRING");

f:id:yotiky:20210128213716p:plain

実際は接続に必要な情報を設定した上で利用する。

var blobServiceClient = new BlobServiceClient(Configuration["connectionString"]);
var blobContainerClient = blobServiceClient.GetBlobContainerClient(Configuration["blobContainerName"]);
var blobClient = blobContainerClient.GetBlobClient(Configuration["blobName"]);

参考

blog.shibayan.jp

関連記事