Как использовать службу конфигурации приложений Azure в Azure Function v1 (.NET Framework)

TL;DR. Как использовать идентификаторы управляемых служб в функции Azure v1 для настройки через конфигурацию приложения Azure?

Я пытаюсь использовать конфигурацию приложения Azure из функции Azure v1, используя.NET Framework. В идеале я хотел бы использовать ConfigurationBuilders.

Это будет означать использование SimpleJsonConfigBuilder класс при работе на машине разработчика, но с использованием AzureAppConfigurationBuilder когда размещается в Azure.

Он работает с нашими проектами веб-API, но я застрял, когда дело доходит до функций Azure.

Проблема, на мой взгляд, заключается в том, что узел функции Azure использует свой собственный файл web.config и поэтому не может быть изменен с помощью конфигурации, которую я использовал бы в веб-проекте.

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
      <add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=1.0.0.0, Culture=neutral" />
      <add name="Json" optional="true" mode="Greedy" jsonFile="~/App_Data/settings.json" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" />
      <add name="AzureViaConnectionString" optional="true" mode="Greedy" connectionString="${AppConfigConnectionString}" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration" />
      <add name="AzureViaMsi" optional="true" mode="Greedy" endPoint="${AppConfigEndpoint}" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration" />
    </builders>
  </configBuilders>
  <appSettings configBuilders="Environment,Json">
...

Даже если я не использую конфигурацию xml, которая, как я предполагаю, будет невозможна, есть ли способ изменить ConfigurationManager.AppSettings как это происходит с ConfigBuilders?

ConfigurationManager.AppSettings только для чтения в точке, к которой я обращаюсь, поэтому я не могу обновить ее самостоятельно.

У нас есть IAppSettings интерфейс, для которого я написал реализацию для использования API REST конфигурации приложения Azure. Однако это означает сохранение секрета, связанного со службой, в настройках приложения обычной функции, а не возможность использования идентификаторов управляемых служб.

Кроме того, во время выполнения функции требуются некоторые другие настройки, прежде чем она достигнет точки выполнения любого моего кода, а это означает, что я не могу переместить все настройки из стандартного местоположения.

Переход на функции Azure V2 в настоящее время невозможен.

1 ответ

Решение

1. Установите пакет Microsoft.Extensions.Configuration.AzureAppConfiguration

2. Создайте Function .net в VS и используйте код как показано ниже:

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");
    var builder = new ConfigurationBuilder();
    builder.AddAzureAppConfiguration(Environment.GetEnvironmentVariable("ConnectionString"));
    var config = builder.Build();
    string message = config["TestApp:Settings:Messagejoey"];
    return message == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + message);
}

3. Результат снимок: 4. Пакет, который я использовал:

Для более подробной информации, вы можете обратиться к этой статье (она также подходит для.net Framework).

Другие вопросы по тегам