protected async Task CheckConfigurationBlob(ConfigStorageAccess configStorage) { var container = new BlobContainerClient(configStorage.ConnectionString, configStorage.ContainerName); await container.CreateIfNotExistsAsync(PublicAccessType.None); var blobClient = container.GetBlobClient(ConfigFileName); if (await blobClient.ExistsAsync()) { return; } string content = JsonConvert.SerializeObject(GetDefaultSettings(), new JsonSerializerSettings() { Formatting = Formatting.Indented, ContractResolver = new CamelCasePropertyNamesContractResolver() }); using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content))) { await blobClient.UploadAsync(stream, new BlobHttpHeaders() { ContentType = "application/json" }); } }
/// <summary> /// Конфигурация загружается из переменных окружения /// И из Azure Storage если заданы переменные окружения /// ConfigStorageUri /// ConfigStorageSas /// ConfigStorageContainer /// /// или из файла appsettings.local.json если переменные не заданы /// </summary> /// <param name="builder"></param> public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) { FunctionsHostBuilderContext context = builder.GetContext(); //Get enviroment variables for config file access var configStorage = new ConfigStorageAccess(); if (!configStorage.Configured) { builder.ConfigurationBuilder .AddJsonFile(Path.Combine(context.ApplicationRootPath, ConfigFileNameLocal), false, false) .AddEnvironmentVariables(); } else { CheckConfigurationBlob(configStorage).Wait(); var azureBlobFileProvider = new AzureBlobFileProvider(new AzureBlobOptions() { ConnectionString = configStorage.ConnectionString, DocumentContainer = configStorage.ContainerName }); builder.ConfigurationBuilder .AddJsonFile(azureBlobFileProvider, ConfigFileName, false, false) .AddEnvironmentVariables(); } }