配置应用程序设置

已完成

在应用服务中,应用设置是作为环境变量传递给应用程序代码的变量。 对于 Linux 应用和自定义容器,应用服务使用 --env 标志将应用设置传递给容器,以在容器中设置环境变量。 无论是这两种情况中的哪一种,它们都会在应用启动时注入到应用环境。 在添加、删除或编辑应用设置时,应用服务会触发应用重启。

对于 ASP.NET 和 ASP.NET Core 开发人员而言,在应用服务中设置应用设置类似于在 Web.config 或 appsettings.json 中的 <appSettings> 内进行设置,但应用服务中的值会替代 Web.config 或 appsettings.json 中的值。 可在 Web.config 或 appsettings.json 中保留开发设置(例如本地 MySQL 密码),并在应用服务中保护生产机密(例如 Azure MySQL 数据库密码)。 这个代码在本地调试时使用你的开发设置,在部署到 Azure 时使用你的生产机密。

应用设置在存储时始终加密(静态加密)。 应用设置名称只能包含字母、数字 (0-9)、句点 (“.”) 和下划线 (“_”)。应用设置值中的特殊字符必须根据目标操作系统的需要进行转义。

可以通过导航到应用的管理页并选择“环境变量”>“应用程序设置”访问应用程序设置

导航到“环境变量”>“应用程序设置”的屏幕截图。

添加和编辑设置

若要添加新的应用设置,请选择“+ 添加”。 如果使用的是部署槽位,则可以指定设置是否可交换。 在对话框中,你可以将设置固定到当前槽。

选择部署槽位设置以将设置固定到当前槽。

完成后,选择“应用”。 不要忘记返回“环境变量”页并选择“应用”

注意

在默认 Linux 应用服务或自定义 Linux 容器中,名为 ApplicationInsights:InstrumentationKey 的应用设置中的任何嵌套 JSON 密钥结构都需要在密钥名称为 ApplicationInsights__InstrumentationKey 的应用服务中进行配置。 换句话说,将任何:替换为__(即双下划线)。 应用设置名称中的任何句点都将替换为 _(单个下划线)。

批量编辑应用程序设置

若要批量添加或编辑应用设置,请选择“高级”编辑按钮。 完成后,选择“确定”。 不要忘记返回“环境变量”页并选择“应用”。 应用设置具有以下 JSON 格式:

[
  {
    "name": "<key-1>",
    "value": "<value-1>",
    "slotSetting": false
  },
  {
    "name": "<key-2>",
    "value": "<value-2>",
    "slotSetting": false
  },
  ...
]

配置连接字符串

对于 ASP.NET 和 ASP.NET Core 开发人员,在应用服务中设置连接字符串类似于在 Web.config 中的 <connectionStrings> 内进行设置,但在应用服务中设置的值会替代 Web.config 中相应的值。对于其他语言堆栈,最好改用应用设置,因为连接字符串需要在变量键中进行特殊格式设置才能访问值

提示

在一种情况下,你可能想要使用连接字符串而不是 non-.NET 语言的应用设置:只有在应用服务应用中为数据库配置了连接字符串时,才会将某些 Azure 数据库类型与应用一起备份。

添加和编辑连接字符串遵循与其他应用设置相同的原则,也可绑定到部署槽位。 你将用于批量添加或编辑的 JSON 格式设置中的连接字符串示例:

[
  {
    "name": "name-1",
    "value": "conn-string-1",
    "type": "SQLServer",
    "slotSetting": false
  },
  {
    "name": "name-2",
    "value": "conn-string-2",
    "type": "PostgreSQL",
    "slotSetting": false
  },
  ...
]

注意

面向 PostgreSQL 的 .NET 应用应将连接字符串设置为 “自定义 ”,以便在 .NET EnvironmentVariablesConfigurationProvider中解决已知问题。

在运行时,连接字符串可用作环境变量,其前缀为以下连接类型:

  • SQLServer:SQLCONNSTR_
  • MySQL: MYSQLCONNSTR_
  • SQLAzure:SQLAZURECONNSTR_
  • 自定义:CUSTOMCONNSTR_
  • PostgreSQL:POSTGRESQLCONNSTR_
  • 通知中心:NOTIFICATIONHUBCONNSTR_
  • 服务总线:SERVICEBUSCONNSTR_
  • 事件中心:EVENTHUBCONNSTR_
  • 文档 DB:DOCDBCONNSTR_
  • Redis 缓存:REDISCACHECONNSTR_

例如,可以使用环境变量 的形式访问名为 connectionstring1 的 MySQL 连接字符串。

为自定义容器配置环境变量

自定义容器可能会使用需要在外部提供的环境变量。 可以通过 Cloud Shell 传递这些环境变量。 在 Bash 中:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings key1=value1 key2=value2

在 PowerShell 中:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}

当应用运行时,应用服务应用设置会自动作为环境变量注入到进程中。 可以通过 URL https://<app-name>.scm.azurewebsites.net/Env 来验证容器环境变量。