【问题标题】:Azure functions: Read config from host.json after deployAzure 功能:部署后从 host.json 读取配置
【发布时间】:2019-01-23 14:59:09
【问题描述】:

我在 C# 中创建了一个 azure 函数。 我使用 local.settings.json 在本地进行测试。

一切正常
ConfigurationManager.Appsettings["key"]

现在我已经发布了。什么都没有了。 Host.json 在那里,我可以浏览函数应用设置选项卡,我可以在那里看到配置 host.json 以及所有值。

Host.json 格式与 local.settings.json 相同:

{
  "IsEncrypted": false,
  "Values": {
    "MYCONFIG": "HEY",
    "THEOTHERCONFIG" : "WHASSUP"
  }
}

如果我在本地运行,一切正常。 如果我发布,我会在所有值中得到 null。

我试过了

    ConfigurationManager.Appsettings["key"]

System.Environment.GetEnvironmentVariable("MYCONFIG", EnvironmentVariableTarget.Process);

没有任何作用。

Microsoft 文档并未揭示读取配置文件的神圣秘密。

Here 我看到他们甚至没有提到 host.json 文件,他们只是说您必须手动将它们放入 azure 门户中......这是非常不切实际的。

有什么建议吗? 谢谢

【问题讨论】:

  • 您需要将您的配置放在 azure 函数(门户)的 appsettings 刀片中

标签: c# json configuration azure-functions


【解决方案1】:

local.settings.json 文件中的设置仅在本地运行时由 Functions 工具使用。默认情况下,当项目发布到 Azure 时,这些设置不会自动迁移。 我们可以使用Azure Functions Core Tools 轻松地将local.setting.json 发布到Azure。

func azure functionapp publish azurefunctionname --publish-local-settings

host.json 元数据文件包含影响函数应用的所有函数的全局配置选项。

host.json 不适用于配置 Azure 函数 appsettings。

或者正如 Thomas 提到的,您可以在 azure 功能的 appsettings 刀片中对其进行配置。

更新:

如果你想委托一些开发和测试,你必须给他们凭据......多么荒谬

您可以使用Key vaultAzure function MSI 来避免共享您的凭据。

【讨论】:

  • 好吧,这似乎是唯一的方法。没有配置文件,一切都在线。如果你想委托一些开发和测试,你必须给他们凭据......多么荒谬
  • If you want to delegate some developement and testing you have to give them credentials... how ridiculous。您可以在 azure 门户上的 azure function appsetting 中配置凭据,以避免将您的凭据共享给其他人。或者您可以使用 keyvault 和 Azure function MSI 来避免共享您的凭据。
  • @TomSun 是否可以将我的自定义设置放入 host.json 文件并使用它?
  • 谢谢汤姆。您的评论 host.json is not for config Azure function appsettings. 是我能找到的唯一参考,说明您的应用不应将其用于一般配置选项,而应使用 Azure 刀片中的应用设置。
【解决方案2】:

我很欣赏 host.json 可能无法配置 appsettings,但只是作为问题的答案......

如阅读docs

当运行时找到格式为 AzureFunctionsJobHost__path__to__setting 的应用程序设置时,它会覆盖等效的 host.json 设置

示例。您将覆盖以下 host.json 文件:

{
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
              "isEnabled": true
            }
        }
    }
}

appsettings.json/local.settings.json:

{
...
    "Values": {
"AzureFunctionsJobHost__logging__applicationInsights__samplingSettings__isEnabled":"false"
...
    }
}

这意味着您可以通过这种方式动态控制 host.json 中的内容。不是对 OPs 问题的完全回答,因为它不是访问而是覆盖,但我认为这是控制host.json 中内容的一种有效方式。如果这是一个好习惯,或者不是 - 不是我来决定:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2023-01-27
    • 2022-12-15
    相关资源
    最近更新 更多