ARM Template.json动态连接字符串

时间:2017-01-04 07:26:04

标签: azure-cosmosdb azure-resource-manager

我从azure获取了一个部署模板,并将其添加到Visual Studio 2015中的部署项目中。创建和部署资源组时,除了网站连接字符串外,一切都运行正常。

我的TableStorage,DocumentDb和Redis实例都是由此创建的,无法弄清楚如何获取这些项的主连接字符串和主键,这样我就不必手动插入并添加它们。

查看ARM Template Functions ListKeys应该可以解决问题,但在部署之后,该值为空。此外,尝试一个简单的字符串(TestConnectionString)也会添加名称,但不会添加值。

   {
      "type": "Microsoft.Web/sites",
      "kind": "app",
      "name": "[parameters('WebAppName')]",
      "apiVersion": "2015-08-01",
      "properties": {
        "name": "[parameters('WebAppName')]",
        "resources": [],
        "siteConfig": {
          "connectionstrings": [
            {
              "name": "DocumentDbKey",
              "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('docDbName')), '2015-11-06').primaryMasterKey]",
              "type": "Custom"
            },
            {
              "name": "TestConnectionString",
              "value": "dummystring:pleaseignore;",
              "type": "Custom"
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('docDbName'))]",
      ]
    }

2 个答案:

答案 0 :(得分:4)

作为您的描述,我们可以使用ARM模板函数ListKeys来获取密钥。我们可以使用以下模板代码来设置连接字符串。我测试Azure存储连接字符串和Document DB密钥,它对我来说正常,请试一试。以下是我的详细步骤:

1.使用模板WebApp创建基本Azure资源组项目

2.从演示中移除不必要的资源。

3.添加连接字符串设置

"resources": [
        {
          "name": "connectionstrings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[concat('Microsoft.Web/sites/', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "tomConnectionString"
          },
          "properties": {
            "documentDB": {
              "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('docDbName')), '2015-11-06').primaryMasterKey]",
              "type": "Custom"
            },
            "storage": {
              "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',concat(listKeys(variables('storageAccountId'),'2015-05-01-preview').key1))]",
              "type": "Custom"
            }
          }
        }
      ]
  1. 添加相应的参数或变量,例如存储信息或docDbName
  2. enter image description here

    1. 部署网站

    2. 检查门户网站的结果

    3. enter image description here

      完整的模板代码:

      {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "hostingPlanName": {
            "type": "string",
            "minLength": 1
          },
          "skuName": {
            "type": "string",
            "defaultValue": "S1",
            "allowedValues": [
              "F1",
              "D1",
              "B1",
              "B2",
              "B3",
              "S1",
              "S2",
              "S3",
              "P1",
              "P2",
              "P3",
              "P4"
            ],
            "metadata": {
              "description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
            }
          },
          "storageAccountName": {
            "type": "string",
            "metadata": {
              "description": "Storage Account to access blob storage."
            }
          },
          "skuCapacity": {
            "type": "int",
            "defaultValue": 1,
            "minValue": 1,
            "metadata": {
              "description": "Describes plan's instance count"
            }
          }
        },
        "variables": {
          "webSiteName": "[concat('webSite', uniqueString(resourceGroup().id))]",
          "docDbName": "tomdocumentdb",
          "storageAccountId": "[concat(resourceGroup().id,'/providers/Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
        },
        "resources": [
          {
            "apiVersion": "2015-08-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[resourceGroup().location]",
            "tags": {
              "displayName": "HostingPlan"
            },
            "sku": {
              "name": "[parameters('skuName')]",
              "capacity": "[parameters('skuCapacity')]"
            },
            "properties": {
              "name": "[parameters('hostingPlanName')]"
            }
          },
          {
            "apiVersion": "2015-08-01",
            "name": "[variables('webSiteName')]",
            "type": "Microsoft.Web/sites",
            "location": "[resourceGroup().location]",
            "tags": {
              "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
              "displayName": "Website"
            },
            "dependsOn": [
              "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
            ],
            "properties": {
              "name": "[variables('webSiteName')]",
              "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
            },
      
            "resources": [
              {
                "name": "connectionstrings",
                "type": "config",
                "apiVersion": "2015-08-01",
                "dependsOn": [
                  "[concat('Microsoft.Web/sites/', variables('webSiteName'))]"
                ],
                "tags": {
                  "displayName": "tomConnectionString"
                },
                "properties": {
                  "documentDB": {
                    "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('docDbName')), '2015-11-06').primaryMasterKey]",
                    "type": "Custom"
                  },
                  "storage": {
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',concat(listKeys(variables('storageAccountId'),'2015-05-01-preview').key1))]",
                    "type": "Custom"
                  }
                }
              }
            ]
          }
        ]
      }
      

      <强>更新

      我们可以从azure resource获得有关ARM模板的更多有用信息。

      enter image description here

答案 1 :(得分:2)

我遇到了同样的问题,但事实证明,保存连接字符串的属性名称应该命名为connectionString,因此您的siteConfig对象应该如下所示:

"siteConfig": {
    "connectionstrings": [
    {
      "name": "DocumentDbKey",
      "connectionString": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('docDbName')), '2015-11-06').primaryMasterKey]",
      "type": "Custom"
    },
    {
      "name": "TestConnectionString",
      "connectionString": "dummystring:pleaseignore;",
      "type": "Custom"
    }
  ]
}