Настройки функций Azure не совпадают между порталом и локальным - PullRequest
1 голос
/ 20 июня 2019

Я работаю с функциями Azure и у меня возникла проблема.Я объявил файл local.settings.json с моими переменными следующим образом:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "TopicEndpoint": "my endpoint"
  }  
}

Это позволяет моей функции Azure читать настройки, используя:

var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();
var myTopic = config["Values:TopicEndpoint"];

Это позволяет мне публиковать и экспортировать моиПеременные для портала через:

func azure functionapp publish myfunctionapp --publish-local-settings -i

Однако после публикации и проверки того, что значение находится в «Настройках приложения» на портале, «Значения: TopicEndpoint» несуществовать.

Чтобы получить доступ к его значению, я должен поместить свои переменные непосредственно в корень json:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
  }  
  "TopicEndpoint": "my endpoint"
}

Таким образом, я могу безопасно использовать config['TopicEndpoint'] в своей локальной разработкесреда, а также на Azure.Тем не менее, это противоречит цели --publish-local-settings -i, так как он экспортирует только значения, найденные под клавишей «Значения», поэтому мне приходится создавать все мои настройки вручную.

Знаете ли вы, почему это происходит, или если возможноЯ что-то упустил?

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Я нашел проблему. Проблема заключалась в том, что я добавил отдельный файл secret.settings.json, как предложено здесь. https://www.tomfaltesek.com/azure-functions-local-settings-json-and-source-control/ Поэтому я загружал свои конфигурации так:

var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddJsonFile("secret.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

Мой локальный файл настроек выглядел так:

{
  "Values": {
      "TopicEndpoint": "my endpoint"
  }  
}

И мои секретные настройки, такие как:

{
  "Values": {
      "TopicKey": "my key"
  }  
}

Это вызвало конфликт, поэтому мне нужно было удалить ключ 'Значения' из secret.settings.json, чтобы он выглядел так:

{
  "TopicKey": "my key"
}

Таким образом, я могу использовать func azure functionapp publish myfunctionapp --publish-local-settings -i для развертывания значений внутри моего локального файла настроек и использовать оба файла в качестве переменных среды.

1 голос
/ 20 июня 2019

Полагаю, вы используете его немного по-другому, как и должно быть. Дело в том, что значения из local.settings.json автоматически становятся переменными окружения , поэтому вам вообще не нужно беспокоиться о работе с файлом. Вот как мы это делаем в нашем проекте, и он работает во всех средах.

// see, just env variables
var configuration = new ConfigurationBuilder().AddEnvironmentVariables().Build();

// and then use
var value = configuration["TopicEndpoint"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...