Как создать новый ресурс в шаблонах Azure ARM?

Хорошо, я сделал все, что описано здесь, с шаблоном ARM - https://azure.microsoft.com/en-us/documentation/articles/web-sites-integrate-with-vnet. За исключением одного — включение интеграции виртуальной сети с уже существующей виртуальной сетью.

Можно ли это сделать в шаблонах ARM? Спасибо!


person alvipeo    schedule 08.07.2016    source источник
comment
Можете ли вы поделиться своим шаблоном, чтобы мне не пришлось начинать заново?   -  person Jack Zeng    schedule 08.07.2016
comment
Я бы хотел, но это для клиента, и, кроме того, оно большое с большим количеством параметров и переменных. Извините, я не могу этого сделать.   -  person alvipeo    schedule 08.07.2016


Ответы (1)


Вот образец шаблона, который может вам помочь. Он изменен из этого примера быстрого запуска на GitHub

{
   "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "hostingPlanName": {
         "type": "string",
         "minLength": 1,
         "metadata": {
            "description": "Name of the hosting plan to use in Azure."
         }
      },
      "webSiteName": {
         "type": "string",
         "minLength": 1,
         "metadata": {
            "description": "Name of the Azure Web app to create."
         }
      },
      "vnetName": {
         "type": "string",
         "minLength": 1,
         "metadata": {
            "description": "Name of an existing Azure VNet which has a Gateway Subnet already, and is in the resource group you are going to deploy."
         }
      },
      "skuName": {
         "type": "string",
         "defaultValue": "S1",
         "allowedValues": [
            "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"
         }
      }
   },
   "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": "[parameters('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": "[parameters('webSiteName')]",
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
         },
         "resources": [
            {
               "apiVersion": "2015-08-01",
               "name": "web",
               "type": "config",
               "dependsOn": [
                  "[concat('Microsoft.Web/sites/', parameters('webSiteName'))]"
               ],
               "properties": {
                  "pythonVersion": "3.4"
               }
            },
            {
              "apiVersion": "2015-08-01",
              "name": "[parameters('vnetName')]",
              "type": "virtualNetworkConnections",
              "location": "[resourceGroup().location]",
              "dependsOn": [
                  "[concat('Microsoft.Web/sites/', parameters('webSiteName'))]"
              ],
              "properties": {
                  "vnetResourceId": "[concat(resourceGroup().id, '/providers/Microsoft.Network/virtualNetworks/', parameters('vnetName'))]"
              }
            }
         ]
      }
   ]
}

Вот 3 вещи, с которыми вы должны быть осторожны.

  1. Шаблон начинается с шаблона веб-приложения Python и добавляет ресурс «Microsoft.Web/sites/virtualNetworkConnections». Итак, если вы используете другой язык программирования, вы можете начать с другого шаблона.

  2. Существующая виртуальная сеть должна находиться в той же группе ресурсов, которую вы развертываете. Если используемая вами виртуальная сеть не находится в той же группе ресурсов, вам следует изменить «vnetResourceId» в «свойствах» «Microsoft.Web/sites/virtualNetworkConnections».

  3. В используемой виртуальной сети уже должен быть шлюз с адресом "точка-сеть". В противном случае вы не сможете интегрировать свое веб-приложение в виртуальную сеть. Дополнительные сведения см. в разделе Настроить подключение типа "точка-сеть" к виртуальной сети с помощью PowerShell

Обновление: о том, как я получаю эту информацию, в сети не так много об этом. Этот шаблон построен на основе решения PowerShell и моих знаний о шаблоне ARM. Решение PowerShell доступно в этой статье. Другой возможный способ получить шаблон ARM — создать эти ресурсы в одной группе ресурсов и экспортировать шаблон группы ресурсов на портал. Но в данном случае это не сработает, потому что тип ресурса "Microsoft.Web/sites/virtualNetworkConnections" пока не поддерживается. Однако вы по-прежнему можете просмотреть REST API с помощью команды PowerShell Get-AzureRmResource с параметром -debug.

Get-AzureRmResource -ResourceGroupName <resource group> -ResourceType Microsoft.Web/sites/virtualNetworkConnections -Name <web app>/<VNet> -debug -ApiVersion 2015-08-01

Вы получите следующий REST API.

Ури:

https://management.azure.com/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Web/sites/<web app>/virtualNetworkConnections/<VNet>?api-version=2015-08-01

Тело:

{
  "id": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Web/sites/<web app>/virtualNetworkConnections/<VNet>",
  "name": "<VNet>",
  "type": "Microsoft.Web/sites/virtualNetworkConnections",
  "location": "<Location>",
  "tags": null,
  "properties": {
    "vnetResourceId": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<VNet>"
    "certThumbprint": "<Thumbprint>",
    "certBlob": "<cert>",
    "routes": null,
    "resyncRequired": false,
    "dnsServers": null
  }
}

Пропустив некоторые автоматически сгенерированные значения, вы получите шаблон, который очень похож на тот, который я пишу:

{
  "name": "<VNet>",
  "type": "Microsoft.Web/sites/virtualNetworkConnections",
  "location": "<Location>",
  "properties": {
    "vnetResourceId": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<VNet>"
  }
}
person Jack Zeng    schedule 08.07.2016
comment
Не могли бы вы объяснить, как вы получили эту информацию? исследователь ресурсов? где вы взяли эту схему? Спасибо! - person alvipeo; 08.07.2016
comment
Спасибо за обновление! Я не знал о трюке с -debug ! Хороший! - person alvipeo; 11.07.2016
comment
Это отлично сработало и для меня! Поиск ресурса через обозреватель ресурсов по адресу resources.azure.com был для меня лучшим способом найти шаблон json. хотя. От поставщиков я перешел к: Microsoft.Web/sites/‹sitename›/virtualNetworkConnections, чтобы получить сетевой ресурс для создания - person Sam; 22.07.2016
comment
Я попробовал этот шаблон, но если я разверну шаблон, виртуальная сеть будет добавлена, но портал сообщает мне, что сертификаты не синхронизированы (и виртуальная сеть не работает). Я попытался добавить параметры certThumbprint и certBlob, но у меня все та же проблема. Если я проверю проводник ресурсов, я увижу, что certBlob установлен правильно, а отпечаток - нет. У вас есть идея, что может быть не так? - person Kenneth; 10.08.2016
comment
То же самое. Служба поддержки Azure говорит, что работает над этим (какая-то проблема) - person alvipeo; 26.08.2016
comment
Та же проблема здесь - после развертывания соединения VNET я буду выполнять ручную синхронизацию VNET :( (прошел почти год) - person Антон Курьян; 29.06.2017
comment
Все еще не исправлено. У кого-нибудь есть открытый билет поддержки / ссылка на проблемы GitHub для этой проблемы «сертификаты не синхронизированы»? - person Oliver Tomlinson; 17.08.2017
comment
Синхронизация сертификатов не может быть выполнена с помощью ARM. Для этого вы должны использовать Powershell: -vnet-doesnt-sync-certifcates?forum=WAVirtualMachinesVirtualNetwork" rel="nofollow noreferrer">social.msdn.microsoft.com/Forums/en-US/ - person Oliver Tomlinson; 12.09.2017