Шаблон ARM для настройки служб приложений с новой функцией интеграции с виртуальной сетью?

Я работаю над шаблонами ARM. Я создал файл шаблона с двумя или более службами приложений Azure вместе с планом обслуживания приложений, а затем настроил интеграцию VNET для каждой службы приложений.

Это пример кода JSON:

    {
  "comments": "Web-App-01",
  "name": "[variables('app_name_01')]",
  "type": "Microsoft.Web/sites",
  "location": "[variables('location')]",
  "apiVersion": "2016-08-01",
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', variables('asp_name_01'))]"
  ],
  "tags": {
    "displayName": "[variables('app_name_01')]"
  },
  "properties": {
    "name": "[variables('app_name_01')]",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('asp_name_01'))]",
    "siteConfig": {
      "alwaysOn": true
    }
  },
    "resources": [
      {
        "type": "Microsoft.Web/sites/virtualNetworkConnections",
        "name": "[concat(variables('app_name_01'), '/', variables('vnet_connection_name'),uniqueString('asdsdaxsdsd'))]",
        "apiVersion": "2016-08-01",
        "location": "[variables('location')]",
        "properties": {
          "vnetResourceId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vm_vnet_name'), variables('web_subnet_name'))]"
        },
        "dependsOn": [
          "[resourceId('Microsoft.Web/sites', variables('app_name_01'))]",
          "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vm_vnet_name'), variables('web_subnet_name'))]"
        ]
      }
    ]
},
{
  "comments": "Web-App-02",
  "name": "[variables('app_name_02')]",
  "type": "Microsoft.Web/sites",
  "location": "[variables('location')]",
  "apiVersion": "2016-08-01",
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', variables('asp_name_02'))]"
  ],
  "tags": {
    "displayName": "[variables('app_name_02')]"
  },
  "properties": {
    "name": "[variables('app_name_02')]",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('asp_name_01'))]",
    "siteConfig": {
      "alwaysOn": true
    }
  },
    "resources": [
      {
        "type": "Microsoft.Web/sites/virtualNetworkConnections",
        "name": "[concat(variables('app_name_02'), '/', variables('vnet_connection_name'),uniqueString('asdsdaxsdsd'))]",
        "apiVersion": "2016-08-01",
        "location": "[variables('location')]",
        "properties": {
          "vnetResourceId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vm_vnet_name'), variables('web_subnet_name'))]"
        },
        "dependsOn": [
          "[resourceId('Microsoft.Web/sites', variables('app_name_02'))]",
          "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vm_vnet_name'), variables('web_subnet_name'))]"
        ]
      }
    ]
}

Приведенный выше код отлично работает для нескольких служб приложений Azure, но для остальных служб приложений я получаю внутреннюю ошибку сервера или конфликт или неверный запрос во время интеграции виртуальной сети со службой приложений Azure.

Note: When I deployed the above the JSON Code, the old VNET integration is configured instead of New VNET (Preview) feature. So, I need to configure New VNET (Preview) feature for each app service.

Итак, может ли кто-нибудь предложить мне, как решить вышеуказанную проблему.

Постоянно ли он выходит из строя в одних и тех же сервисах приложений или случайным образом?

Ryan Hill - MSFT 20.02.2019 19:25

Нет, он случайным образом дает сбой в разных службах приложений.

Pradeep 21.02.2019 10:10

Отслеживание такой проблемы будет немного сложнее. Вы можете получить бесплатную техническую поддержку, связавшись с @AzureSupport.

Ryan Hill - MSFT 22.02.2019 20:54
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
13
3
7 741
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я нашел рабочий пример для этого в сообщении Azure Docs GitHub:

Как интегрировать новую интеграцию vnet с шаблонами ARM?

Похоже, новая интеграция с виртуальной сетью работает по-другому, в которой используется подресурс Microsoft.Web/sites/config с именем virtualNetwork вместо подресурса Microsoft.Web/sites/virtualNetworkConnections.

А также несколько требований, которые необходимо установить в целевой подсети/всети (описано по ссылке). Часть интеграции выглядит примерно так:

   {
      "apiVersion": "2018-02-01",
      "type": "Microsoft.Web/sites",
      "name": "[parameters('appName')]",
      "location": "[resourceGroup().location]",

...

      "resources": [
        {
          "name": "virtualNetwork",
          "type": "config",
          "apiVersion": "2018-02-01",
          "location": "[resourceGroup().location]",
          "properties": {
            "subnetResourceid": "[parameters('subnetResourceId')]",
            "swiftSupported": true
          },
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', parameters('appName'))]"
          ]
        }
      ]
   },

Помимо этого, я не нашел много другой документации, за исключением ссылки на него в azure-rest-api-specs, в которой определена конечная точка "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/networkConfig/virtualNetwork":

azure-rest-api-specs / WebApps.json

Также кажется (как предполагает спецификация), что замена "type": "config" на "type": "networkConfig" также работает.

Спасибо за ссылку! Лично я столкнулся с некоторыми несоответствиями вокруг этой функции, мы могли бы открыть проблему, но на данный момент она работает только в том случае, если виртуальная сеть создана в том же шаблоне с указанием зависимости.

reim 10.07.2019 10:00

Это действительно помогло нам, обязательно установите делегирование в подсети, чтобы это работало. (как также указано в верхней ссылке на github)

Jurjen Ladenius 08.08.2019 12:35

Действительно, тем более, что без делегирования просто получаете лаконичные 500 от API; для параметра swift также должно быть установлено значение true.

reim 03.11.2020 12:06

Я разговаривал с главным инженером Microsoft.

Ключ в том, чтобы заменить шаблон автоматизации

    {
        "type": "Microsoft.Web/sites/virtualNetworkConnections",
        "apiVersion": "2018-11-01",
        "name": "[concat(parameters('sites_FelixOFA_name'), '/xxxxxxx_Functions')]",
        "location": "West Europe",
        "dependsOn": [
            "[resourceId('Microsoft.Web/sites', parameters('sites_FelixOFA_name'))]"
        ],
        "properties": {
            "vnetResourceId": "[concat(parameters('virtualNetworks_FelixODevPremNet_externalid'), '/subnets/Functions')]",
            "isSwift": true
        }
    }

с участием

{
  "type": "Microsoft.Web/sites/networkConfig",
  "name": "[concat(parameters('webAppName'),'/VirtualNetwork')]",
  "apiVersion": "2016-08-01",
  "properties":
              {
                            "subnetResourceId": "[parameters('subnetResourceId')]"
              }
}

Где subnetResourceId — идентификатор ресурса их подсети — он должен выглядеть так: /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}

просто чтобы очистить .. sub ожидает идентификатор подписки, где rg ожидает имя группы ресурсов

Manish Rawat 11.05.2021 02:19

Чтобы исправить это, я просто изменил параметр isSwift или swiftSupported на false.

Не нужно ничего менять, просто удалите этот параметр целиком, чтобы он заработал.

Gregory Suvalian 16.12.2020 20:02

Я попытался достичь той же функциональности с помощью файла Bicep, наконец, используя

virtualNetworkSubnetId:

работал на меня. Например:

resource webAppName_resource 'Microsoft.Web/sites@2020-12-01' =  {
  name: '${webAppName}'
  location: location
  properties: {
    serverFarmId: appServicePlanPortalName.id
    virtualNetworkSubnetId: '${vnetDeploy_module.outputs.vnetid}/subnets/${vnetDeploy_module.outputs.subnetname}'
    siteConfig: {
      linuxFxVersion: linuxFxVersion
      minTlsVersion: minTlsVersion
      http20Enabled: http20Enabled
    }
    httpsOnly: httpsOnly
  }
}

См. шаблоны в https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.web/app-service-regional-vnet-integration.

Результат в ARM:

{
  "type": "Microsoft.Web/sites",
  "apiVersion": "2021-01-01",
  "name": "[parameters('appName')]",
  "location": "[parameters('location')]",
  "kind": "app",
  "properties": {
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
    "virtualNetworkSubnetId": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))).subnets[0].id]",
    "httpsOnly": true,
    "siteConfig": {
      "vnetRouteAllEnabled": true,
      "http20Enabled": true
    }
  },
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
    "[resourceId('Microsoft.Network/virtualNetworks', variables('vnetName'))]"
  ]
}

Другие вопросы по теме