Share via


Cloud Services (uitgebreide ondersteuning) implementeren met behulp van een ARM-sjabloon

In dit artikel wordt beschreven hoe u een Arm-sjabloon (Azure Resource Manager) gebruikt om een Implementatie van Azure Cloud Services (uitgebreide ondersteuning) te maken.

Vereisten

Voer de volgende stappen uit als vereisten voor het maken van uw implementatie met behulp van ARM-sjablonen.

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

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

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

  4. Upload het pakketbestand (.cspkg of .zip) bestand en configuratiebestand (.cscfg) naar het opslagaccount met behulp van Azure Portal of Azure PowerShell. Sla de SAS-URI's (Shared Access Signature) op voor beide bestanden die in een latere stap aan de ARM-sjabloon moeten worden toegevoegd.

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

    • U kunt certificaten koppelen aan uw implementatie voor beveiligde communicatie naar en van de service. Als u certificaten gebruikt, moeten de vingerafdruk van het certificaat worden opgegeven in uw configuratiebestand (.cscfg) en worden geüpload naar een sleutelkluis. U kunt een sleutelkluis maken met behulp van Azure Portal of Azure PowerShell.
    • De gekoppelde sleutelkluis moet zich in dezelfde regio en hetzelfde abonnement bevinden als uw cloudservicesimplementatie (uitgebreide ondersteuning).
    • De gekoppelde sleutelkluis moet over de relevante machtigingen beschikken, zodat Cloud Services-resources (uitgebreide ondersteuning) certificaten kunnen ophalen uit de sleutelkluis. Zie Certificaten gebruiken met Cloud Services (uitgebreide ondersteuning) voor meer informatie.
    • Er moet naar de sleutelkluis worden verwezen in de osProfile sectie van de ARM-sjabloon, zoals wordt weergegeven in een latere stap.

Cloud Services implementeren (uitgebreide ondersteuning)

Cloud Services (uitgebreide ondersteuning) implementeren met behulp van een sjabloon:

Notitie

Een eenvoudigere en snellere manier om uw ARM-sjabloon en parameterbestand te genereren, is met behulp van Azure Portal. U kunt de gegenereerde ARM-sjabloon downloaden in de portal om uw Cloud Services (uitgebreide ondersteuning) te maken via Azure PowerShell.

  1. Maak een virtueel netwerk. De naam van het virtuele netwerk moet overeenkomen met verwijzingen naar het virtuele netwerk in het configuratiebestand (.cscfg). Als u een bestaand virtueel netwerk gebruikt, laat u deze sectie weg uit 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 de volgende regels toe aan de dependsOn sectie om ervoor te zorgen dat het platform het virtuele netwerk maakt voordat het cloudservicesexemplaren (uitgebreide ondersteuning) wordt gemaakt:

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. Maak een openbaar IP-adres en stel (optioneel) de eigenschap DNS-label van het openbare IP-adres in. Als u een statisch IP-adres gebruikt, moet u ernaar verwijzen als een gereserveerd IP-adres in het configuratiebestand (.cscfg). Als u een bestaand IP-adres gebruikt, slaat u deze stap over en voegt u de IP-adresgegevens rechtstreeks toe in de configuratie-instellingen van de load balancer in 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 de volgende regels toe aan de dependsOn sectie om ervoor te zorgen dat het platform het IP-adres maakt voordat het cloudservicesexemplaren (uitgebreide ondersteuning) wordt gemaakt:

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Maak een Cloud Services-object (uitgebreide ondersteuning). Voeg relevante dependsOn verwijzingen toe als u virtuele netwerken of openbare IP-adressen 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 implementatie en koppel het openbare IP-adres aan de front-end van de load balancer. Het Azure-platform maakt automatisch een load balancer.

    "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 sleutelkluisverwijzing toe in de osProfile sectie van de ARM-sjabloon. In een sleutelkluis worden certificaten opgeslagen die zijn gekoppeld aan Cloud Services (uitgebreide ondersteuning). Voeg de certificaten toe aan de sleutelkluis en verwijs vervolgens naar de vingerafdruk van het certificaat in het configuratiebestand (.cscfg). Stel ook het toegangsbeleid voor key vault in voor Azure Virtual Machines voor implementatie in Azure Portal, zodat de Cloud Services-resource (uitgebreide ondersteuning) de certificaten kan ophalen die zijn opgeslagen als geheimen in de sleutelkluis. De sleutelkluis moet zich in dezelfde regio en hetzelfde abonnement bevinden als uw cloudservicesresource (uitgebreide ondersteuning) 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

    sourceVaultin de ARM-sjabloon is de waarde van de resource-id voor uw sleutelkluis. U kunt deze informatie ophalen door de resource-id te vinden in de sectie Eigenschappen van uw sleutelkluis.

    • U kunt de waarde ophalen certificateUrl door naar het certificaat te gaan in de sleutelkluis met het label Geheime id. 
    • certificateUrl moet de vorm hebben van https://{keyvault-endpoint}/secrets/{secret-name}/{secret-id}.
  6. Maak een rolprofiel. Zorg ervoor dat het aantal rollen, het aantal exemplaren in elke rol, rolnamen en rolgrootten hetzelfde zijn in het configuratiebestand (.cscfg), het definitiebestand (.csdef) en de roleProfile sectie 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 cloudservicesimplementatie (uitgebreide ondersteuning). In het volgende voorbeeld worden de RDP-extensie (Remote Desktop Protocol) en de Azure Diagnostics-extensie toegevoegd.

    Notitie

    Het wachtwoord voor RDP moet van 8 tot 123 tekens lang zijn en moet voldoen aan ten minste drie van de volgende vereisten voor wachtwoordcomplexiteit:

    Bevat een hoofdletter.
    Bevat een kleine letter.
    Bevat een numeriek cijfer.
    Bevat een speciaal teken.
    Kan geen besturingselementteken bevatten.

        "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 package (.cspkg) file to deploy"
          }
        },
        "configurationSasUri": {
          "type": "securestring",
          "metadata": {
            "description": "SAS URI of the configuration (.cscfg) file"
          }
        },
        "roles": {
          "type": "array",
          "metadata": {
            "description": "Roles created in the cloud service application"
          }
        },
        "wadPublicConfig_WebRole1": {
          "type": "string",
          "metadata": {
             "description": "Public configuration of the Azure Diagnostics extension"
          }
        },
        "wadPrivateConfig_WebRole1": {
          "type": "securestring",
          "metadata": {
            "description": "Private configuration of the 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. Als u de implementatie van Cloud Services (uitgebreide ondersteuning) wilt maken, implementeert u het sjabloon- en parameterbestand (om parameters in het sjabloonbestand te definiëren). U kunt deze voorbeeldsjablonen gebruiken.

    New-AzResourceGroupDeployment -ResourceGroupName "ContosOrg" -TemplateFile "file path to your template file" -TemplateParameterFile "file path to your parameter file"
    
  • Bekijk veelgestelde vragen over Cloud Services (uitgebreide ondersteuning).
  • Implementeer Cloud Services (uitgebreide ondersteuning) met behulp van Azure Portal, Azure PowerShell of Visual Studio.
  • Ga naar de opslagplaats met voorbeelden van Cloud Services (uitgebreide ondersteuning).