Как использовать строку подключения DocumentDB (MongoDB) в качестве переменной среды в шаблоне управления ресурсами Azure

Я хочу использовать строку подключения DocumentDB(MongoDB) в качестве переменной среды в шаблоне управления ресурсами Azure. Например, у меня есть группа ресурсов, в которой есть приложение wep и база данных DocumentDB (MongoDB).

"siteConfig": {
          "appSettings": [
            {
              "name": "db",
              "value": "connection string"
            }
          ]
        }

Как я могу назначить переменную среды строке подключения в шаблоне?


person Pythonist    schedule 30.03.2017    source источник


Ответы (2)


Шаблон ARM поддерживает функции listKeys и list{Value}, более подробную информацию можно найти на странице Функция шаблона ARM. Мы можем найти DocumentDB API списка строк подключения, поэтому мы можем использовать функцию listconnectionstrings, чтобы получить строку подключения documentdb в шаблоне ARM.

"appSettings": [
            {
              "name": "db",
              "value": " [listConnectionStrings(resourceId('Microsoft.DocumentDb/databaseAccounts', parameters('documentdb')), '2015-04-08').connectionStrings[0].connectionString]"
            }

На моей стороне работает корректно. Если мы хотим добавить настройку приложения для WebApp, мы также можем использовать следующий код

  "resources": [
      {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
              "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
              "displayName": "appsetting"
          },
        "properties": {
          "db": "[listConnectionStrings(resourceId('Microsoft.DocumentDb/databaseAccounts', parameters('documentdb')), '2015-04-08').connectionStrings[0].connectionString]"
        }
      }

  ]

введите здесь описание изображения

Проверьте результат на портале Azure.

введите здесь описание изображения

Обновление:

Демонстрационный код шаблона ARM

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string",
      "minLength": 1
    },
    "documentdb": {
      "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/"
      }
    },
    "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": "appsettings",
              "type": "config",
              "apiVersion": "2015-08-01",
              "dependsOn": [
                  "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
              ],
              "tags": {
                  "displayName": "appsetting"
              },
            "properties": {
              "db": "[listConnectionStrings(resourceId('Microsoft.DocumentDb/databaseAccounts', parameters('documentdb')), '2015-04-08').connectionStrings[0].connectionString]"
            }
          }

      ]
    }
  ]
}

Файл параметров

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "hostingPlanName": {
            "value": "tomtest" //your hostingplan name
        },
        "skuName": {
            "value": "B1"
        },
        "documentdb": {
            "value": "tomdocument" // your documentdb name
        }

    }
}
person Tom Sun - MSFT    schedule 31.03.2017
comment
Привет, @Tom Sun, если я определяю строку подключения в свойствах, она выдает эту ошибку. Ошибка проверки шаблона развертывания: «Параметр шаблона documentdb» не найден. Подробнее об использовании см. aka.ms/arm-template/#parameters.'. (Код: InvalidTemplate) И если я в настройках приложения определяю, то он не дает никакого значения, кроме кода ссылки ').connectionStrings[0].connectionString] - person Pythonist; 31.03.2017
comment
нам нужно определить параметр documentdb в шаблоне. documentdb — это имя documentdb (MongoDB). Вы также можете получить определение со снимка экрана в разделе параметров. - person Tom Sun - MSFT; 31.03.2017
comment
да, я пробовал с его именем в свойствах, но оно тоже не приняло, теперь я тестирую с помощью appSettings - person Pythonist; 31.03.2017
comment
Это не сработало, в моем шаблоне параметр определен как: databaseAccounts_feedsdb_name_1: { defaultValue: feedsdb, type: String }, я не знаю, что я делаю неправильно - person Pythonist; 31.03.2017

После небольшой борьбы:

"appSettings": [{
                    "Name": "DOCUMENTDB_ENDPOINT",
                    "Value": "[reference(concat('Microsoft.DocumentDb/databaseAccounts/', parameters('databaseAccountName'))).documentEndpoint]"
                }, {
                    "Name": "DOCUMENTDB_PRIMARY_KEY",
                    "Value": "[listKeys(resourceId('Microsoft.DocumentDb/databaseAccounts', parameters('databaseAccountName')), '2015-04-08').primaryMasterKey]"
                }]
person 4c74356b41    schedule 30.03.2017
comment
Привет @ 4c74356b41, это строка подключения MongoDB. - person Pythonist; 30.03.2017
comment
Да :) спасибо, но они разные и выдает ошибку. - person Pythonist; 30.03.2017
comment
ну, это дает ответ, из которого вы можете легко создать свой собственный, я понятия не имею, как выглядит строка подключения mongodb, но это дает вам все, что вам нужно для ее создания, я почти уверен, что @LeventOner - person 4c74356b41; 30.03.2017
comment
Я не хочу отнимать у вас время, но я действительно не могу найти, в MongoDB я должен определить только пароль. var url = 'mongodb://‹emailList›:‹пароль›@‹emailList›.documents.azure.com:10250/?ssl=true'; - person Pythonist; 31.03.2017