0

下面 Http 触发了 Azure 函数在消费模式下运行,即使在 1 小时的空闲时间后也不会从 Azure Keyvault 返回最新的秘密值

根据az func scaling的假设:当 -20 分钟内未收到任何请求时,Azure 函数应用程序将被删除(或)缩小到零。

如果上述假设成立,则 Startup.cs 将在空闲时间后的下一次调用中被调用,这将依次连接到 keyvault 以获取最新的秘密值并相应地使用最新的秘密值更新 appconfig.cs 但这不会发生,即使在空闲时间之后仍然返回旧的秘密值。此行为意味着即使在空闲时间之后,函数应用程序也可能不会按比例缩小。

为什么托管 http 触发功能的功能应用程序即使在空闲时间后也不会缩小?

为什么会观察到上述返回陈旧秘密值的行为?需要做什么来克服秘密值的陈旧性?

PS:目前功能应用重启仅从键值返回最新的秘密值。

不知道我对 Azure 功能的无服务器架构有什么误解?

在 Startup.cs 上

[assembly: FunctionsStartup(typeof(Startup))]
namespace SampleAzureFunction
{
     public class Startup : FunctionsStartup
     {
        private AppConfig _appConfig;
        public IConfigurationRoot _configuration;

        public override void Configure(IFunctionsHostBuilder builder)
        {      ​

            var configurationBuilder = new ConfigurationBuilder()
               .SetBasePath(currentDirectory)
               .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
               .AddEnvironmentVariables();

            ​_appConfig = new AppConfig();
            ​_configuration = configurationBuilder.Build();
            ​ConfigurationBinder.Bind(_configuration, _appConfig);
             
            //here c# code to Update appConfig=>DBConfig=>PrimaryKey with secret value mentioned in keyvault using "KeyVaultClient" class in  Microsoft.Azure.KeyVault namespace
             .....
             .....

            builder.Services.AddSingleton<IAppConfig>(_appConfig);
        }
    }
}

在 MyClass.cs 上

    namespace SampleAzureFunction
    {
        public class MyClass
        {
            private readonly IAppConfig _appConfig;
            public MyClass(IAppConfig appConfig)
            {
                _appConfig = appConfig;
            }

            [FunctionName("myfunc")]
            public async Task<IActionResult> RunAsync([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req)
            {
                var secret= _appConfig.PrimaryKey;
                return secret; //always return old secret not the new secret update in keyvault even after fun app idletime of >1hour
            }
        }
    }

应用设置.cs

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": ""
      },
      "AzureKeyVaultConfig: {
        "VaultUrl": ""   
      },
      "DBConfig": {
        "DBUri": "",
        "PrimaryKey": "", //not configured in appsettings but in keyvault
        "DBName": ""
      }
    }
4

0 回答 0