快速入门:使用 ARM 模板创建 Azure 应用程序配置存储

本快速入门介绍如何:

  • 使用 Azure 资源管理器模板(ARM 模板)部署应用程序配置存储。
  • 使用 ARM 模板在应用程序配置存储中创建键值。
  • 从 ARM 模板读取应用程序配置存储中的键值。

提示

功能标志和 Key Vault 引用是特殊类型的键值。 有关使用 ARM 模板创建它们的示例,请查看后续步骤

资源管理器模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 模板使用声明性语法。 在声明性语法中,你可以在不编写创建部署的编程命令序列的情况下,描述预期部署。

如果你的环境满足先决条件,并且你熟悉如何使用 ARM 模板,请选择“部署到 Azure”按钮。 Azure 门户中会打开模板。

部署到 Azure

先决条件

如果没有 Azure 订阅,请在开始前创建一个试用版订阅

授权

访问 ARM 模板内的键值数据需要 Azure 资源管理器角色,例如参与者或所有者。 目前不支持通过 Azure 应用程序配置数据平面角色之一进行访问。

注意

如果访问密钥身份验证被禁用,则 ARM 模板内的键值数据访问会被禁用。

查看模板

本快速入门中使用的模板来自 Azure 快速启动模板。 它创建新的应用程序配置存储,其中包含两个键值。 然后,它使用 reference 函数输出这两个键值资源的值。 通过这种方式读取键的值,就能在模板的其他位置使用键值。

本快速入门使用 copy 元素来创建多个键值资源实例。 若要详细了解 copy 元素,请参阅 ARM 模板中的资源迭代

重要

此模板需要的应用程序配置资源提供程序版本为 2020-07-01-preview 或更高版本。 此版本使用 reference 函数来读取键值。 从 2020-07-01-preview 版本开始,将不再提供以前的版本中用于读取键值的 listKeyValue 函数。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.4.1318.3566",
      "templateHash": "2545519807081080362"
    }
  },
  "parameters": {
    "configStoreName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the App Configuration store."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the Azure location where the app configuration store should be created."
      }
    },
    "keyValueNames": {
      "type": "array",
      "defaultValue": [
        "myKey",
        "myKey$myLabel"
      ],
      "metadata": {
        "description": "Specifies the names of the key-value resources. The name is a combination of key and label with $ as delimiter. The label is optional."
      }
    },
    "keyValueValues": {
      "type": "array",
      "defaultValue": [
        "Key-value without label",
        "Key-value with label"
      ],
      "metadata": {
        "description": "Specifies the values of the key-value resources. It's optional"
      }
    },
    "contentType": {
      "type": "string",
      "defaultValue": "the-content-type",
      "metadata": {
        "description": "Specifies the content type of the key-value resources. For feature flag, the value should be application/vnd.microsoft.appconfig.ff+json;charset=utf-8. For Key Value reference, the value should be application/vnd.microsoft.appconfig.keyvaultref+json;charset=utf-8. Otherwise, it's optional."
      }
    },
    "tags": {
      "type": "object",
      "defaultValue": {
        "tag1": "tag-value-1",
        "tag2": "tag-value-2"
      },
      "metadata": {
        "description": "Adds tags for the key-value resources. It's optional"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.AppConfiguration/configurationStores",
      "apiVersion": "2021-10-01-preview",
      "name": "[parameters('configStoreName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "standard"
      }
    },
    {
      "copy": {
        "name": "configStoreKeyValue",
        "count": "[length(parameters('keyValueNames'))]"
      },
      "type": "Microsoft.AppConfiguration/configurationStores/keyValues",
      "apiVersion": "2021-10-01-preview",
      "name": "[format('{0}/{1}', parameters('configStoreName'), parameters('keyValueNames')[copyIndex()])]",
      "properties": {
        "value": "[parameters('keyValueValues')[copyIndex()]]",
        "contentType": "[parameters('contentType')]",
        "tags": "[parameters('tags')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.AppConfiguration/configurationStores', parameters('configStoreName'))]"
      ]
    }
  ],
  "outputs": {
    "reference_key_value_value": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.AppConfiguration/configurationStores/keyValues', parameters('configStoreName'), parameters('keyValueNames')[0])).value]"
    },
    "reference_key_value_object": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.AppConfiguration/configurationStores/keyValues', parameters('configStoreName'), parameters('keyValueNames')[1]), '2021-10-01-preview', 'full')]"
    }
  }
}

该模板中定义了两个 Azure 资源:

提示

keyValues 资源的名称是键和标签的组合。 键和标签由 $ 分隔符联接。 标签是可选的。 在上面的示例中,名称为 myKeykeyValues 资源创建了一个不带标签的键值。

使用百分号编码(也称为 URL 编码),就能在键或标签中包含 ARM 模板资源名称中不允许使用的字符。 % 也不是允许使用的字符,因此在其位置使用了 ~。 若要正确对名称编码,请按照以下步骤操作:

  1. 应用 URL 编码
  2. ~ 替换为 ~7E
  3. % 替换为 ~

例如,若要创建键名为 AppName:DbEndpoint 且标签名为 Test 的键值对,资源名应为 AppName~3ADbEndpoint$Test

注意

借助应用程序配置,可通过虚拟网络上的专用链接访问键值数据。 默认情况下,启用此功能后,通过公用网络对你的应用程序配置数据的所有请求都会被拒绝。 ARM 模板在你的虚拟网络外部运行,因此不允许从 ARM 模板访问数据。 若要在使用专用链接时允许从 ARM 模板访问数据,可使用以下 Azure CLI 命令启用公共网络访问。 在这种情况下,请务必考虑启用公用网络访问的安全隐患。

az appconfig update -g MyResourceGroup -n MyAppConfiguration --enable-public-network true

部署模板

选择下图登录到 Azure 并打开一个模板。 该模板创建应用程序配置存储,其中包含两个键值。

部署到 Azure

你也可以使用以下 PowerShell cmdlet 部署模板。 键值将位于 PowerShell 控制台的输出中。

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. chinaeast)"
$templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.appconfiguration/app-configuration-store-kv/azuredeploy.json"

$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Name $resourceGroupName -Location "$location"
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri

Read-Host -Prompt "Press [ENTER] to continue ..."

查看已部署的资源

  1. 登录到 Azure 门户
  2. 在 Azure 门户搜索框中,键入“应用程序配置”。 从列表中选择“应用程序配置”。
  3. 选择新创建的应用程序配置资源。
  4. 在“操作”下,单击“配置资源管理器” 。
  5. 验证有两个键值。

清理资源

如果不再需要本教程中所述的资源组、应用程序配置存储和所有相关资源,请将其删除。 如果将来还打算使用该应用程序配置存储,可以跳过删除它的步骤。 如果不打算继续使用该存储,请运行以下 cmdlet,删除本快速入门中创建的所有资源:

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
Remove-AzResourceGroup -Name $resourceGroupName
Write-Host "Press [ENTER] to continue..."

后续步骤

若要了解如何将功能标志和 Key Vault 引用添加到应用程序配置存储,请查看以下 ARM 模板示例。