Een cloudservice (uitgebreide ondersteuning) implementeren met behulp van ARM-sjablonen

In deze zelfstudie wordt uitgelegd hoe u een cloudserviceimplementatie (uitgebreide ondersteuning) maakt met behulp van ARM-sjablonen.

Voordat u begint

  1. Controleer de implementatievereisten voor Cloud Services (uitgebreide ondersteuning) en maak de bijbehorende resources.

  2. Maak een nieuwe resourcegroep met behulp van de Azure Portal of PowerShell. Deze stap is optioneel als u een bestaande resourcegroep gebruikt.

  3. Maak een nieuw opslagaccount met behulp van de Azure Portal of PowerShell. Deze stap is optioneel als u een bestaand opslagaccount gebruikt.

  4. Upload uw pakketbestanden (.cspkg) en serviceconfiguratie (.cscfg) naar het opslagaccount met behulp van de Azure Portal of PowerShell. Haal de SAS-URI's op van beide bestanden die verderop in deze zelfstudie moeten worden toegevoegd aan de ARM-sjabloon.

  5. (Optioneel) Maak een sleutelkluis en upload de certificaten.

    • Certificaten kunnen worden gekoppeld aan cloudservices om beveiligde communicatie van en naar de service mogelijk te maken. Als u certificaten wilt gebruiken, moeten de vingerafdruks worden opgegeven in uw serviceconfiguratiebestand (.cscfg) en worden geüpload naar een sleutelkluis. Een sleutelkluis kan worden gemaakt via de Azure Portal of PowerShell.
    • De gekoppelde sleutelkluis moet zich in dezelfde regio en hetzelfde abonnement bevinden als de cloudservice.
    • De bijbehorende sleutelkluis voor moet de juiste machtigingen hebben, zodat Cloud Services resource (uitgebreide ondersteuning) certificaten kan ophalen uit Key Vault. Zie Certificaten en Key Vault voor meer informatie
    • Naar de sleutelkluis moet worden verwezen in de sectie OsProfile van de ARM-sjabloon die in de onderstaande stappen wordt weergegeven.

Een cloudservice implementeren (uitgebreide ondersteuning)

Notitie

Een eenvoudigere en snellere manier om uw ARM-sjabloon en -parameterbestand te genereren, is via de Azure Portal. U kunt de gegenereerde ARM-sjabloon downloaden via de portal om uw cloudservice te maken via PowerShell

  1. Virtueel netwerk maken. De naam van het virtuele netwerk moet overeenkomen met de verwijzingen in het bestand Serviceconfiguratie (.cscfg). Als u een bestaand virtueel netwerk gebruikt, laat u deze sectie weg in de ARM-sjabloon.

    "resources": [ 
        { 
          "apiVersion": "2019-08-01", 
          "type": "Microsoft.Network/virtualNetworks", 
          "name": "[parameters('vnetName')]", 
          "location": "[parameters('location')]", 
          "properties": { 
            "addressSpace": { 
              "addressPrefixes": [ 
                "10.0.0.0/16" 
              ] 
            }, 
            "subnets": [ 
              { 
                "name": "WebTier", 
                "properties": { 
                  "addressPrefix": "10.0.0.0/24" 
                } 
              } 
            ] 
          } 
        } 
    ] 
    

    Als u een nieuw virtueel netwerk maakt, voegt u het volgende toe aan de dependsOn sectie om ervoor te zorgen dat het platform het virtuele netwerk maakt voordat de cloudservice wordt gemaakt.

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. Maak een openbaar IP-adres en stel (optioneel) de dns-labeleigenschap van het openbare IP-adres in. Als u een statisch IP-adres gebruikt, moet u ernaar verwijzen als een gereserveerd IP-adres in serviceconfiguratiebestand (.cscfg). Als u een bestaand IP-adres gebruikt, slaat u deze stap over en voegt u de IP-adresgegevens rechtstreeks toe aan de configuratie-instellingen van de load balancer van uw ARM-sjabloon.

    "resources": [ 
        { 
          "apiVersion": "2019-08-01", 
          "type": "Microsoft.Network/publicIPAddresses", 
          "name": "[parameters('publicIPName')]", 
          "location": "[parameters('location')]", 
          "properties": { 
            "publicIPAllocationMethod": "Dynamic", 
            "idleTimeoutInMinutes": 10, 
            "publicIPAddressVersion": "IPv4", 
            "dnsSettings": { 
              "domainNameLabel": "[variables('dnsName')]" 
            } 
          }, 
          "sku": { 
            "name": "Basic" 
          } 
        } 
    ] 
    

    Als u een nieuw IP-adres maakt, voegt u het volgende toe aan de dependsOn sectie om ervoor te zorgen dat het platform het IP-adres maakt voordat de cloudservice wordt gemaakt.

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Maak een cloudserviceobject (uitgebreide ondersteuning) en voeg de juiste dependsOn verwijzingen toe als u virtuele netwerken of openbaar IP-adres in uw sjabloon implementeert.

    {
      "apiVersion": "2021-03-01",
      "type": "Microsoft.Compute/cloudServices",
      "name": "[variables('cloudServiceName')]",
      "location": "[parameters('location')]",
      "tags": {
        "DeploymentLabel": "[parameters('deploymentLabel')]",
        "DeployFromVisualStudio": "true"
      },
      "dependsOn": [
        "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]",
        "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]"
      ],
      "properties": {
        "packageUrl": "[parameters('packageSasUri')]",
        "configurationUrl": "[parameters('configurationSasUri')]",
        "upgradeMode": "[parameters('upgradeMode')]"
      }
    }
    
  4. Maak een netwerkprofielobject voor uw cloudservice en koppel het openbare IP-adres aan de front-end van de load balancer. Er wordt automatisch een load balancer gemaakt door het platform.

    "networkProfile": { 
        "loadBalancerConfigurations": [ 
          { 
            "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/loadBalancers/', variables('lbName'))]", 
            "name": "[variables('lbName')]", 
            "properties": { 
              "frontendIPConfigurations": [ 
                { 
                  "name": "[variables('lbFEName')]", 
                  "properties": { 
                    "publicIPAddress": { 
                      "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
                    } 
                  } 
                } 
              ] 
            } 
          } 
        ] 
      } 
    
  5. Voeg uw sleutelkluisreferentie toe in de OsProfile sectie van de ARM-sjabloon. Key Vault wordt gebruikt voor het opslaan van certificaten die zijn gekoppeld aan Cloud Services (uitgebreide ondersteuning). Voeg de certificaten toe aan Key Vault en verwijs vervolgens naar de vingerafdruk van het certificaat in het serviceconfiguratiebestand (.cscfg). U moet ook Key Vault 'Toegangsbeleid' inschakelen voor 'Azure Virtual Machines voor implementatie' (op de portal), zodat Cloud Services resource (uitgebreide ondersteuning) certificaat kan ophalen dat is opgeslagen als geheimen van Key Vault. De sleutelkluis moet zich in dezelfde regio en hetzelfde abonnement bevinden als de cloudservice en een unieke naam hebben. Zie Certificaten gebruiken met Cloud Services (uitgebreide ondersteuning) voor meer informatie.

    "osProfile": { 
          "secrets": [ 
            { 
              "sourceVault": { 
                "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.KeyVault/vaults/{keyvault-name}" 
              }, 
              "vaultCertificates": [ 
                { 
                  "certificateUrl": "https://{keyvault-name}.vault.azure.net:443/secrets/ContosoCertificate/{secret-id}" 
                } 
              ] 
            } 
          ] 
        } 
    

    Notitie

     SourceVault is de ARM-resource-id voor uw sleutelkluis. U vindt deze informatie door de resource-id te zoeken in de sectie eigenschappen van uw sleutelkluis.

    • certificateUrl kunt u vinden door te navigeren naar het certificaat in de sleutelkluis met het label Geheime id. 
    • certificateUrl moet de vorm hebben https://{keyvault-endpoin}/secrets/{secretname}/{secret-id}
  6. Een rolprofiel maken. Zorg ervoor dat het aantal rollen, rolnamen, het aantal exemplaren in elke rol en grootte hetzelfde is in de sectie Serviceconfiguratie (.cscfg), Servicedefinitie (.csdef) en rolprofiel in de ARM-sjabloon.

    "roleProfile": {
      "roles": {
        "value": [
          {
            "name": "WebRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            }
          },
          {
            "name": "WorkerRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            } 
          } 
        ]
      }
    }   
    
  7. (Optioneel) Maak een extensieprofiel om extensies toe te voegen aan uw cloudservice. In dit voorbeeld voegen we de extensie Extern bureaublad en Diagnostische gegevens van Windows Azure toe.

    Notitie

    Het wachtwoord voor extern bureaublad moet tussen 8 en 123 tekens lang zijn en moet voldoen aan ten minste 3 vereisten voor wachtwoordcomplexiteit van de volgende: 1) Bevat een hoofdletter 2) Bevat een kleine letter 3) Bevat een numeriek cijfer 4) Bevat een speciaal teken 5) Besturingstekens zijn niet toegestaan

        "extensionProfile": {
          "extensions": [
            {
              "name": "RDPExtension",
              "properties": {
                "autoUpgradeMinorVersion": true,
                "publisher": "Microsoft.Windows.Azure.Extensions",
                "type": "RDP",
                "typeHandlerVersion": "1.2.1",
                "settings": "<PublicConfig>\r\n <UserName>[Insert Username]</UserName>\r\n <Expiration>1/21/2022 12:00:00 AM</Expiration>\r\n</PublicConfig>",
                "protectedSettings": "<PrivateConfig>\r\n <Password>[Insert Password]</Password>\r\n</PrivateConfig>"
              }
            },
            {
              "name": "Microsoft.Insights.VMDiagnosticsSettings_WebRole1",
              "properties": {
                "autoUpgradeMinorVersion": true,
                "publisher": "Microsoft.Azure.Diagnostics",
                "type": "PaaSDiagnostics",
                "typeHandlerVersion": "1.5",
                "settings": "[parameters('wadPublicConfig_WebRole1')]",
                "protectedSettings": "[parameters('wadPrivateConfig_WebRole1')]",
                "rolesAppliedTo": [
                  "WebRole1"
                ]
              }
            }
          ]
        }
    
  8. Bekijk de volledige sjabloon.

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "cloudServiceName": {
          "type": "string",
          "metadata": {
            "description": "Name of the cloud service"
          }
        },
        "location": {
          "type": "string",
          "metadata": {
            "description": "Location of the cloud service"
          }
        },
        "deploymentLabel": {
          "type": "string",
          "metadata": {
            "description": "Label of the deployment"
          }
        },
        "packageSasUri": {
          "type": "securestring",
          "metadata": {
            "description": "SAS Uri of the CSPKG file to deploy"
          }
        },
        "configurationSasUri": {
          "type": "securestring",
          "metadata": {
            "description": "SAS Uri of the service configuration (.cscfg)"
          }
        },
        "roles": {
          "type": "array",
          "metadata": {
            "description": "Roles created in the cloud service application"
          }
        },
        "wadPublicConfig_WebRole1": {
          "type": "string",
          "metadata": {
             "description": "Public configuration of Windows Azure Diagnostics extension"
          }
        },
        "wadPrivateConfig_WebRole1": {
          "type": "securestring",
          "metadata": {
            "description": "Private configuration of Windows Azure Diagnostics extension"
          }
        },
        "vnetName": {
          "type": "string",
          "defaultValue": "[concat(parameters('cloudServiceName'), 'VNet')]",
          "metadata": {
            "description": "Name of vitual network"
          }
        },
        "publicIPName": {
          "type": "string",
          "defaultValue": "contosocsIP",
          "metadata": {
            "description": "Name of public IP address"
          }
        },
        "upgradeMode": {
          "type": "string",
          "defaultValue": "Auto",
          "metadata": {
            "UpgradeMode": "UpgradeMode of the CloudService"
          }
        }
      },
      "variables": {
        "cloudServiceName": "[parameters('cloudServiceName')]",
        "subscriptionID": "[subscription().subscriptionId]",
        "dnsName": "[variables('cloudServiceName')]",
        "lbName": "[concat(variables('cloudServiceName'), 'LB')]",
        "lbFEName": "[concat(variables('cloudServiceName'), 'LBFE')]",
        "resourcePrefix": "[concat('/subscriptions/', variables('subscriptionID'), '/resourceGroups/', resourceGroup().name, '/providers/')]"
      },
      "resources": [
        {
          "apiVersion": "2019-08-01",
          "type": "Microsoft.Network/virtualNetworks",
          "name": "[parameters('vnetName')]",
          "location": "[parameters('location')]",
          "properties": {
            "addressSpace": {
              "addressPrefixes": [
                "10.0.0.0/16"
              ]
            },
            "subnets": [
              {
                "name": "WebTier",
                "properties": {
                  "addressPrefix": "10.0.0.0/24"
                }
              }
            ]
          }
        },
        {
          "apiVersion": "2019-08-01",
          "type": "Microsoft.Network/publicIPAddresses",
          "name": "[parameters('publicIPName')]",
          "location": "[parameters('location')]",
          "properties": {
            "publicIPAllocationMethod": "Dynamic",
            "idleTimeoutInMinutes": 10,
            "publicIPAddressVersion": "IPv4",
            "dnsSettings": {
              "domainNameLabel": "[variables('dnsName')]"
            }
          },
          "sku": {
            "name": "Basic"
          }
        },
        {
          "apiVersion": "2021-03-01",
          "type": "Microsoft.Compute/cloudServices",
          "name": "[variables('cloudServiceName')]",
          "location": "[parameters('location')]",
          "tags": {
            "DeploymentLabel": "[parameters('deploymentLabel')]",
            "DeployFromVisualStudio": "true"
          },
          "dependsOn": [
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]",
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]"
          ],
          "properties": {
            "packageUrl": "[parameters('packageSasUri')]",
            "configurationUrl": "[parameters('configurationSasUri')]",
            "upgradeMode": "[parameters('upgradeMode')]",
            "roleProfile": {
              "roles": [
                {
                  "name": "WebRole1",
                  "sku": {
                    "name": "Standard_D1_v2",
                    "capacity": "1"
                  }
                },
                {
                  "name": "WorkerRole1",
                  "sku": {
                    "name": "Standard_D1_v2",
                    "capacity": "1"
                  }
                }
              ]
            },
            "networkProfile": {
              "loadBalancerConfigurations": [
                {
                  "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/loadBalancers/', variables('lbName'))]",
                  "name": "[variables('lbName')]",
                  "properties": {
                    "frontendIPConfigurations": [
                      {
                        "name": "[variables('lbFEName')]",
                        "properties": {
                          "publicIPAddress": {
                            "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]"
                          }
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "osProfile": {
              "secrets": [
                {
                  "sourceVault": {
                    "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.KeyVault/vaults/{keyvault-name}"
                  },
                  "vaultCertificates": [
                    {
                      "certificateUrl": "https://{keyvault-name}.vault.azure.net:443/secrets/ContosoCertificate/{secret-id}"
                    }
                  ]
                }
              ]
            },
            "extensionProfile": {
              "extensions": [
                {
                  "name": "RDPExtension",
                  "properties": {
                    "autoUpgradeMinorVersion": true,
                    "publisher": "Microsoft.Windows.Azure.Extensions",
                    "type": "RDP",
                    "typeHandlerVersion": "1.2.1",
                    "settings": "<PublicConfig>\r\n <UserName>[Insert Username]</UserName>\r\n <Expiration>1/21/2022 12:00:00 AM</Expiration>\r\n</PublicConfig>",
                    "protectedSettings": "<PrivateConfig>\r\n <Password>[Insert Password]</Password>\r\n</PrivateConfig>"
                  }
                },
                {
                  "name": "Microsoft.Insights.VMDiagnosticsSettings_WebRole1",
                  "properties": {
                    "autoUpgradeMinorVersion": true,
                    "publisher": "Microsoft.Azure.Diagnostics",
                    "type": "PaaSDiagnostics",
                    "typeHandlerVersion": "1.5",
                    "settings": "[parameters('wadPublicConfig_WebRole1')]",
                    "protectedSettings": "[parameters('wadPrivateConfig_WebRole1')]",
                    "rolesAppliedTo": [
                      "WebRole1"
                  ]
                }
              }
            ]
          }
        }
       }
      ]
    }
    
  9. Implementeer de sjabloon en het parameterbestand (parameters definiëren in het sjabloonbestand) om de implementatie van de cloudservice (uitgebreide ondersteuning) te maken. Raadpleeg deze voorbeeldsjablonen indien nodig.

    New-AzResourceGroupDeployment -ResourceGroupName "ContosOrg" -TemplateFile "file path to your template file" -TemplateParameterFile "file path to your parameter file"
    

Volgende stappen