Condividi tramite


Creare un'app del servizio app e distribuire un endpoint privato usando un modello di Azure Resource Manager

In questa guida di avvio rapido si usa un modello di Azure Resource Manager per creare un'app Web ed esporla con un endpoint privato.

Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione del progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione necessari per creare la distribuzione.

Prerequisito

È necessario un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.

Creare un endpoint privato

Questo modello crea un endpoint privato per un'app Web di Azure.

Rivedere il modello

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "virtualNetwork_name": {
            "type": "String",
            "metadata":{
                "description": "Name of the VNet"
            }
        },
        "serverFarm_name": {
            "type": "String",
            "defaultValue": "ServerFarm1",
            "metadata":{
                "description": "Name of the Web Farm"
            }
        },
        "site_name": {
            "type": "String",
            "metadata":{
                "description": "Web App name must be unique DNS name worldwide"
            }
        },
        "virtualNetwork_CIDR": {
            "type": "String",
            "defaultValue": "10.200.0.0/16",
            "metadata":{
                "description": "CIDR of your VNet"
            }
        },
        "subnet1_name": {
            "type": "String",
            "metadata":{
                "description": "Name of the Subnet"
            }
        },
        "subnet1_CIDR": {
            "type": "String",
            "defaultValue": "10.200.1.0/24",
            "metadata":{
                "description": "CIDR of your subnet"
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata":{
                "description": "Location for all resources."
            }
        },
        "SKU_name": {
            "type": "String",
            "defaultValue": "P1v2",
            "metadata":{
                "description": "SKU name, must be minimum P1v2"
            }
        },
        "SKU_tier": {
            "type": "String",
            "defaultValue": "PremiumV2",
            "metadata":{
                "description": "SKU tier, must be Premium"
            }
        },
        "SKU_size": {
            "type": "String",
            "defaultValue": "P1v2",
            "metadata":{
                "description": "SKU size, must be minimum P1v2"
            }
        },
        "SKU_family": {
            "type": "String",
            "defaultValue": "P1v2",
            "metadata":{
                "description": "SKU family, must be minimum P1v2"
            }
        },
        "privateEndpoint_name": {
            "type": "string",
            "metadata":{
                "description": "Name of your Private Endpoint"
            }
        },
        "privateLinkConnection_name": {
            "type": "string",
            "metadata":{
                "description": "Link name between your Private Endpoint and your Web App"
            }
        },
        "privateDNSZone_name": {
            "type": "string",
            "defaultValue": "privatelink.azurewebsites.net",
            "metadata":{
                "description": "Name must be privatelink.azurewebsites.net"
            }
        },
        "webapp_dns_name": {
            "type": "string",
            "defaultValue": ".azurewebsites.net",
            "metadata":{
                "description": "Name must be privatelink.azurewebsites.net"
            }
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/virtualNetworks",
            "apiVersion": "2020-04-01",
            "name": "[parameters('virtualNetwork_name')]",
            "location": "[parameters('location')]",
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "[parameters('virtualNetwork_CIDR')]"
                    ]
                }
            }
        },
        {
            "type": "Microsoft.Network/virtualNetworks/subnets",
            "apiVersion": "2020-04-01",
            "name": "[concat(parameters('virtualNetwork_name'),'/', parameters('subnet1_name'))]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetwork_name'))]"
            ],
            "properties": {
                "addressPrefix": "[parameters('subnet1_CIDR')]",
                "privateEndpointNetworkPolicies": "Disabled"
            }
        },
        {
            "type": "Microsoft.Web/serverfarms",
            "apiVersion": "2019-08-01",
            "name": "[parameters('serverFarm_name')]",
            "location": "[parameters('location')]",
            "sku": {
                "name": "[parameters('SKU_name')]",
                "tier": "[parameters('SKU_tier')]",
                "size": "[parameters('SKU_size')]",
                "family": "[parameters('SKU_family')]",
                "capacity": 1
            },
            "kind": "app"

        },
        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2019-08-01",
            "name": "[parameters('site_name')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/serverfarms', parameters('serverFarm_name'))]"
            ],
            "kind": "app",
            "properties": {
                "enabled": true,
                "hostNameSslStates": [
                    {
                        "name": "[concat(parameters('site_name'), parameters('webapp_dns_name'))]",
                        "sslState": "Disabled",
                        "hostType": "Standard"
                    },
                    {
                        "name": "[concat(parameters('site_name'), '.scm', parameters('webapp_dns_name'))]",
                        "sslState": "Disabled",
                        "hostType": "Repository"
                    }
                ],
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('serverFarm_name'))]"
            }
        },
        {
            "type": "Microsoft.Web/sites/config",
            "apiVersion": "2019-08-01",
            "name": "[concat(parameters('site_name'), '/web')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ],
            "properties": {
                "ftpsState": "AllAllowed"
            }
        },
        {
            "type": "Microsoft.Web/sites/hostNameBindings",
            "apiVersion": "2019-08-01",
            "name": "[concat(parameters('site_name'), '/', parameters('site_name'), parameters('webapp_dns_name'))]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ],
            "properties": {
                "siteName": "[parameters('site_name')]",
                "hostNameType": "Verified"
            }
        },
        {
            "type": "Microsoft.Network/privateEndpoints",
            "apiVersion": "2019-04-01",
            "name": "[parameters('privateEndpoint_name')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]",
                "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetwork_name'), parameters('subnet1_name'))]"
            ],
            "properties": {
                "subnet": {
                    "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetwork_name'), parameters('subnet1_name'))]"
                },
                "privateLinkServiceConnections": [
                    {
                        "name": "[parameters('privateLinkConnection_name')]",
                        "properties": {
                            "privateLinkServiceId": "[resourceId('Microsoft.Web/sites', parameters('site_name'))]",
                            "groupIds": [
                                "sites"
                            ]
                        }
                    }
                ]
            } 
        },
        {
            "type": "Microsoft.Network/privateDnsZones",
            "apiVersion": "2018-09-01",
            "name": "[parameters('privateDNSZone_name')]",
            "location": "global",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetwork_name'))]"
            ] 
        },
        {
            "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
            "apiVersion": "2018-09-01",
            "name": "[concat(parameters('privateDNSZone_name'), '/', parameters('privateDNSZone_name'), '-link')]",
            "location": "global",
            "dependsOn": [
                "[resourceId('Microsoft.Network/privateDnsZones', parameters('privateDNSZone_name'))]",
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetwork_name'))]"
            ],
            "properties": {
                "registrationEnabled": false,
                "virtualNetwork": {
                    "id": "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetwork_name'))]"
                }
            }
        },
        {
            "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
            "apiVersion": "2020-03-01",
            "name": "[concat(parameters('privateEndpoint_name'),'/dnsgroupname')]",
            "location": "[parameters('location')]",
            "dependsOn": [
               "[resourceId('Microsoft.Network/privateDnsZones', parameters('privateDNSZone_name'))]",
               "[resourceId('Microsoft.Network/privateEndpoints' , parameters('privateEndpoint_name'))]"
             ],
            "properties": {
                "privateDnsZoneConfigs": [
                    {
                        "name": "config1",
                        "properties": {
                             "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', parameters('privateDNSZone_name'))]"
                        }
                    }
                ]
            }
        }     
    ]
}

Distribuire il modello

Di seguito è riportata la procedura per distribuire il modello di Azure Resource Manager in Azure:

  1. Per accedere ad Azure e aprire il modello, selezionare questo collegamento: Distribuisci in Azure. Il modello crea la rete virtuale, l'app Web, l'endpoint privato e la zona DNS privato.
  2. Selezionare o creare un gruppo di risorse.
  3. Immettere il nome dell'app Web, del piano di servizio app e dell'endpoint privato.
  4. Leggere le condizioni per l'utilizzo del servizio. Per accettarle, selezionare Accetto le condizioni riportate sopra>Acquista. Il completamento della distribuzione può richiedere alcuni minuti.

Pulire le risorse

Quando le risorse create con l'endpoint privato non sono più necessarie, eliminare il gruppo di risorse. Oltre all'endpoint privato verranno rimosse tutte le risorse correlate.

Per eliminare il gruppo di risorse, chiamare il cmdlet Remove-AzResourceGroup:

Remove-AzResourceGroup -Name <your resource group name>

Passaggi successivi