web-dev-qa-db-ja.com

Azure関数local.settings.jstings.jsets.jsthestings.json.jp ServiceBustrigger

私は現在ServiceBustriggerバインディングを使用してAzure機能を持っています

 [ServiceBusTrigger("%TopicName%", "%SubscripionName%", Connection = "MyConnection")]
         string  catclogueEventMsgs, ILogger log, ExecutionContext context)
 _

これはこのlocal.settings.jsonファイルを使用しています

   "Values": {
             …
    "MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
    "SubscriptionName": "testsubscriptionName"
    "TopicName": "testtopicName",
  }
 _

これをappsettings.jsonファイルに代表する方法を教えてください。それは以下のようになりますか?

   "Values": {
    "MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
    "SubscriptionName": "testsubscriptionName"
    "TopicName": "testtopicName",
  }
 _

「値」オブジェクトを使用する代わりに、次のように "mysubs"オブジェクトが使用できますか?

   "MySubs": {
    "MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
    "SubscriptionName": "testsubscriptionName"
    "TopicName": "testtopicName",
  }
 _

上記の設定を使用することが可能な場合は、ServiceBustriggerバインディングでこれをどのように表しますか。これに変更しますか?

 [ServiceBusTrigger("%MySubs.TopicName%", "%MySubs.SubscripionName%", Connection = "MySubs.MyConnection")]
         string  catclogueEventMsgs, ILogger log, ExecutionContext context)
 _
7
Oneil

私はそれが不可能であるのを恐れています。ローカルにAzure関数が_local.settings.json_ファイルを読んで、バインディングに関連する設定を取得するようにValuesを読み取るデザインです。

Values in local.settings.json の説明を確認してください。

ローカルに実行するときに使用されるアプリケーション設定と接続文字列のコレクション。これらの値は、AzureWebJobsStorageやAzureWebJobsDashboardなど、Azureの機能アプリのアプリ設定に対応しています。

多くのトリガとバインディングには、BLOBストレージトリガの接続など、接続文字列APP設定を参照するプロパティがあります。そのようなプロパティの場合は、値配列に定義されているアプリケーション設定が必要です。

生産のために、すなわちAzureサイトでは、 アプリケーション設定 バインディングに関連する設定を取得することができます。

3
Jerry Liu

ジェイソンのハイブリッドと幼児/リアムが正しいようです。

  • 私が知ることができるものから、 "%thequeuename%"のように展開され、関数構成 - >アプリケーション設定に入力されたときにlocal.settings.jsontings.jsontings.jsontings.jsonから来る必要があります。紺碧。

  • 実際の機能自体では、startup.csを介してJSONファイル注入を活用してから機能自体に値を含めることができます。

これは完全に別々のブログ投稿に値する(そして似ていますが、それでもまだ洗練された設定は言及されていませんが、ここで私がやったことで、年間プラス後に考え出しました。そして幻想的に動作します。

ファイル設定:

  1. Xyz.settings.jsonファイルを格納する関数プロジェクトにconfigフォルダがあります。ここでのファイルはコンテンツに設定され、次にビルドされても.csprojファイルに公開します。
  2. Configフォルダで、私は私が公開したくないすべての秘密を格納するsecrets.jsonファイルを持っています。 これはビルドされています.publishされていません各xyz.settings.jsonファイルには、秘密が欲しい値の値が "--secret--"の値があります。
  3. local.settings.jsonは、devに使用される "値"の値のペアを持っています。これはビルドのみです。次に、これらの値は、公開アプリケーションのAzureの関数ポータルに追加されます。これらの値は、関数名/宣言/定義にのみ使用されます。
  4. XYZ.Settings.jsonファイルの値に対応するクラスを作成しました。これにより、注入によって値にアクセスすることができます。また、関数アプリケーションの設定では、秘密値を入力するときの値によってこれらの値を参照できます。

設定設定: startup.cs.

(/ home/site/wwwrootと言うにもかかわらず、ファイルはプロジェクトのルートから始まります。

public override void Configure(IFunctionsHostBuilder builder)
  {
    var currentDirectory = "/home/site/wwwroot";
    var config = new ConfigurationBuilder()
        .SetBasePath(currentDirectory)
        .AddJsonFile("local.settings.json", optional: false, reloadOnChange: true)
        .AddJsonFile("Config/xyz.settings.json", optional: false, reloadOnChange: true)
        .AddJsonFile("Config/xyz.settings.dev.json", optional: true, reloadOnChange: true)
        .AddJsonFile("Config/secret.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();
    builder.Services.Configure<XyzSettings>(config.GetSection("XyzSettings"));
 _

これがどのようにして動作しているか

  • アプリケーション設定は、JSONファイルが追加された順序で適用されて、非常に具体的な順序で適用されます。重複した設定がある場合は、既存のファイルが上書きされます。
  • 私は最初に地元の異議申し立てがあります。その後、一般的なJSONファイル(XYZ.Settings.json)を続け、続いて環境固有の亜種(zyx.settings.dev.json)、続いてsecrets.json
  • 環境固有の変数が最後に移動します(これらはマシンに指定したものです - または同等のものが機能アプリケーション設定です)
  • このアプローチでは、本当に素敵で安定した設定を持つことができます。これは、さまざまな統合、APIなどを持つプロジェクトがある場合に特に便利です。それらはすべて異なるファイルになります。
  • 最後の2つのJSONファイルがオプションとしてマークされていることに注意してください。彼らは公開されたときに含まれていないので彼らはそうでなければなりません。必要とされていないJSONファイルはすべて失敗する原因となります。

秘密と言えば:

  • ローカルの秘密は、公開に設定されていない限り、secrets.jsonに保存できます。

  • Azureでは、Azure Key Vaultに手を差し伸べる機能アプリの設定に値を保存することをお勧めします。

  • それはどのように構成されているかの鮮やかです。関数アプリの設定ですることは、XYZSettings:SettingNameなどの設定内の変数に名前を付けることです。次のようにして、キーボルトの場所を参照してください。

    @ Microsoft.KeyVault(SecretURI = https://yourvalutname.vault.azure.net/secrets/secret-name/auto-generated-keyVaultGuid)

関数ファイル:(例としてキューのトリガーを使用するが同じように動作させる)

namespace Xyz.Functions
{
   public class Azure_Queue_Add_Xyz
   {
        private readonly XyzSettings _xyzSettings = null;

        public Azure_Queue_Add_Xyz(IOptions<AzureSettings> Azure_settings)
        {
            _azureSettings = Azure_settings.Value;
        }

        [FunctionName("Azure_Queue_Add_Xyz")]
      public void Run(
            [HttpTrigger(AuthorizationLevel.Function, "post",
            Route = "HttpTrigger/Azure_Queue_Add_Xyz")] xyzConfig input,
            [Queue("%TheQueueName%"), StorageAccount("StorageAccount")] ICollector<string> msgOutput,
            ILogger logger,
            ExecutionContext context)
      {
            logger.LogError("{0} is processing a request", context.FunctionName);
            logger.LogError("{0} - Queue: {1}", context.FunctionName, _xyzSettings.TheQueueName);
            logger.LogError("{0} - CloudQueueMessage: {1}", context.FunctionName, JsonConvert.SerializeObject(input));

            msgOutput.Add(JsonConvert.SerializeObject(input));
      }
   }
}
 _
0
drewid