Partager via


Créer une application App Service et déployer un point de terminaison privé en utilisant un modèle Azure Resource Manager

Dans ce guide de démarrage rapide, vous allez utiliser un modèle Azure Resource Manager (ARM) pour créer une application web et l’exposer avec un point de terminaison privé.

Un modèle Azure Resource Manager est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez votre déploiement prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Prérequis

Vous devez avoir un compte Azure avec un abonnement actif. Créez un compte gratuitement.

Créer un Private Endpoint

Ce modèle crée un point de terminaison privé pour une application web Azure.

Vérifier le modèle

{
    "$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'))]"
                        }
                    }
                ]
            }
        }     
    ]
}

Déployer le modèle

Voici comment déployer le modèle Azure Resource Manager sur Azure :

  1. Pour vous connecter à Azure et ouvrir le modèle, sélectionnez ce lien :Déploiement vers Azure. Le modèle crée le réseau virtuel, l’application web, le point de terminaison privé et la zone DNS privée.
  2. Sélectionnez ou créez votre groupe de ressources.
  3. Entrez le nom de votre application web, du plan App Service et du point de terminaison privé.
  4. Lisez la politique des conditions générales. Si vous acceptez, sélectionnez J’accepte les conditions générales mentionnées ci-dessus>Acheter. Le déploiement peut prendre plusieurs minutes.

Nettoyer les ressources

Quand vous n’avez plus besoin des ressources que vous avez créées avec le point de terminaison privé, supprimez le groupe de ressources. Cette action supprime le point de terminaison privé et toutes les ressources qui y sont associées.

Pour supprimer le groupe de ressources, appelez l’applet de commande Remove-AzResourceGroup :

Remove-AzResourceGroup -Name <your resource group name>

Étapes suivantes

  • Vous trouverez d’autres modèles Azure Resource Manager pour les applications web Azure App Service dans les exemples de modèle ARM.