web-dev-qa-db-ja.com

Azure Functionの環境変数を保存するのに最適な場所

複数のAPIキーを使用して、Azure機能をローカルでテストしています。環境変数を保存するのに最適な場所は何ですか?それらにアクセスするにはどうすればよいですか?私は試した

System.Environment.GetEnvironmentVariable("name")}

しかし、環境変数がどこに保存されているのかわかりません。

ありがとう!

16

Local.settings.jsonというファイルが必要です。 Functions-Run-Local のAzure Webサイトは次のとおりです。

それは述べています

これらの設定は、コード内で環境変数として読み取ることもできます。 C#では、System.Environment.GetEnvironmentVariableまたはConfigurationManager.AppSettingsを使用します。 JavaScriptでは、process.envを使用します。システム環境変数として指定された設定は、local.settings.jsonファイルの値よりも優先されます。

例local.settings.json

{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>" 
  },
  "Host": {
    "LocalHttpPort": 7071, 
    "CORS": "*" 
  },
  "ConnectionStrings": {
    "SQLConnectionString": "Value"
  }
}

Local.settings.json内のValuesプロパティの下にアプリケーション設定を配置する必要があると書かれています。

取得するには、接続文字列を取得できるようにConfigurationManager.AppSettings["CustomSetting"]を使用しました。

私はこれをいじってみましたが、文字列キーと文字列値が必要であることがわかりました。 (appsettings.jsonの場合のように)サブセクションを作成しようとしたときにエラーが発生しました。 local.settings.jsonを次のようにする必要がありました。

{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>" 
    "CustomSetting":"20"
  }
}
19
chris31389

APIキーを保存するには、アプリケーション設定を使用できます。詳細: https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-how-to-use-Azure-function-app-settings#application-settings

環境変数またはアプリの設定値を取得するには、次のコード例に示すように、System.Environment.GetEnvironmentVariableを使用します。

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    log.Info(GetEnvironmentVariable("AzureWebJobsStorage"));
    log.Info(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}

public static string GetEnvironmentVariable(string name)
{
    return name + ": " + 
        System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

詳細: https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-reference-csharp#environment-variables

ありがとう、アレクセイ

6
Alexey Rodionov

「値」プロパティの下のappsettings.jsonファイルにキー/値のペアを配置します。

3

Azure Functions 2では、ASP.NET Core構成に移行し、ConfigurationManagerはサポートされなくなりました。

ConfigurationBuilderのセットアップを機能させるために人々が苦労している多くの記事を見てきました。問題は、最近追加されたDIの実行を開始すると、Contextパラメーター(1)にアクセスできないためにいくつかの迷惑なシナリオが発生することです。 Environment.GetEnvironmentVariableを使用する方がはるかにクリーンです。

これは、Azure Functionsの構成モデルに完全に対応します。devでは、local.settings.json> Values配列の項目を取得し、運用環境では、環境変数を取得します。それはただ動作します。

MVCで行っていることとは異なる点を除いて、マイナス面はありません。しかし、これはMVCではなく、Functionsです。MSがこれらのプラットフォームをより良く調整するまで、ここで別のパラダイムを強制するのではなく、Functionsで最高のものに心を開かなければなりません。

Local.settings.jsonは次のようになります。

{
    "IsEncrypted": false,
    "Values": {
        "KeystoneDB": "[CONNECTION STRING HERE]"
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    }
}

本番環境では、ポータルで環境変数を設定します。

(1)私が知っているConfigurationBuilder()。SetBasePathを満たす他のクリーンな方法はありません。参照: Azure Function App v2のルートディレクトリを取得

3
Brian MacKay