将 Azure Function App 连接到 VNet

Connect Azure Function App to VNet

如何使用 arm 模板部署附加到 VNet 的函数应用程序?

现在我的 arm 模板很好地部署了一个基于 AppServicePlan 的函数应用程序,并在 "site" 资源 "properties" 部分中设置了 "vnetName"...但是在部署函数应用程序之后对于任何 VNet,仍显示为 "not configured"。然后,我可以进入门户并单击几下即可添加到所需的 VNet……但为什么它不能通过 arm 模板工作?有人可以提供示例手臂模板来执行此操作吗?

经过进一步审查,这仅通过 ARM 是不可能的。以下是将 Web 应用连接到 VNet 的说明:https://docs.microsoft.com/en-gb/azure/app-service-web/app-service-vnet-integration-powershell


旧答案:这是另一个 post 试图通过 Web 应用程序实现同样的效果(函数是基于 Web 应用程序构建的):


如果我不得不根据 powershell 命令进行猜测,请尝试将子资源添加到类型为 config 且名称为 web 的站点,类似于 [=28= 的 arm 模板]部署:https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/app-service-web/app-service-web-arm-from-github-provision.md#web-app

然而,引擎盖下可能会发生一些神奇的事情。

{
  "name": "[parameters('siteName')]",
  "type": "Microsoft.Web/sites"
  "location": ...,
  "apiVersion": ...,
  "properties": ...,
  "resources": [
    "name": "web",
    "type": "config",
    "apiVersion": "2015-08-01",
    "dependsOn": [
      "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]"
    ],
    "properties": {
      "vnetName": "[parameters('vnetName')]"
    },
  ]
}

除了创建 VPN 包之外,我可以用 ARM 做任何事情 - 这就是设置资源属性和实际使应用程序正确连接到 VNET 之间的区别。

本文 (https://docs.microsoft.com/en-gb/azure/app-service-web/app-service-vnet-integration-powershell) 中的所有内容都可以轻松地从 PowerShell 转换为 ARM,但 Get-AzureRmVpnClientPackage

除外

假设,如果您使用的是旧版 VNET,您可以通过 ARM 获取 VPN 客户端包 URL,因为旧版 VNET 资源提供程序支持该操作 (https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-resource-provider-operations):

Microsoft.ClassicNetwork/virtualNetworks/gateways/listPackage/action

ARM VNET 提供程序似乎没有