Cloud Service (kiterjesztett támogatás) üzembe helyezése ARM-sablonokkal

Ez az oktatóanyag bemutatja, hogyan hozhat létre felhőalapú szolgáltatás (kiterjesztett támogatás) üzembe helyezését ARM-sablonok használatával.

Előkészületek

  1. Tekintse át a Cloud Services (kiterjesztett támogatás) üzembehelyezési előfeltételeit, és hozza létre a társított erőforrásokat.

  2. Hozzon létre egy új erőforráscsoportot a Azure Portal vagy a PowerShell használatával. Ez a lépés nem kötelező, ha meglévő erőforráscsoportot használ.

  3. Hozzon létre egy új tárfiókot a Azure Portal vagy a PowerShell használatával. Ez a lépés nem kötelező, ha meglévő tárfiókot használ.

  4. Töltse fel a Package (.cspkg) és a Service Configuration (.cscfg) fájlokat a tárfiókba a Azure Portal vagy a PowerShell használatával. Szerezze be az oktatóanyag későbbi részében az ARM-sablonhoz hozzáadandó mindkét fájl SAS URI-ját.

  5. (Nem kötelező) Hozzon létre egy kulcstartót, és töltse fel a tanúsítványokat.

    • A tanúsítványok csatolhatók a felhőszolgáltatásokhoz, hogy biztonságosan kommunikálhassanak a szolgáltatással és a szolgáltatással. A tanúsítványok használatához az ujjlenyomatokat meg kell adni a szolgáltatáskonfigurációs (.cscfg) fájlban, és fel kell tölteni egy kulcstartóba. A kulcstartók a Azure Portal vagy a PowerShell használatával hozhatók létre.
    • A társított kulcstartónak ugyanabban a régióban és előfizetésben kell lennie, mint a felhőszolgáltatásnak.
    • A társított kulcstartónak engedélyeznie kell a megfelelő engedélyeket, hogy Cloud Services (kiterjesztett támogatású) erőforrás le tudja kérni a tanúsítványokat Key Vault. További információ: Tanúsítványok és Key Vault
    • A kulcstartóra az ARM-sablon OsProfile szakaszában kell hivatkozni, amely az alábbi lépésekben látható.

Felhőszolgáltatás üzembe helyezése (kiterjesztett támogatás)

Megjegyzés

Az ARM-sablon és paraméterfájl létrehozásának egyszerűbb és gyorsabb módja a Azure Portal. A létrehozott ARM-sablont a portálon keresztül töltheti le a Felhőszolgáltatás PowerShell-lel történő létrehozásához

  1. Virtuális hálózat létrehozása. A virtuális hálózat nevének meg kell egyeznie a Szolgáltatáskonfiguráció (.cscfg) fájlban szereplő hivatkozásokkal. Ha meglévő virtuális hálózatot használ, hagyja ki ezt a szakaszt az ARM-sablonból.

    "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" 
                } 
              } 
            ] 
          } 
        } 
    ] 
    

    Ha új virtuális hálózatot hoz létre, adja hozzá a következőt a dependsOn szakaszhoz, és győződjön meg arról, hogy a platform a felhőszolgáltatás létrehozása előtt hozza létre a virtuális hálózatot.

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. Hozzon létre egy nyilvános IP-címet, és (opcionálisan) állítsa be a nyilvános IP-cím DNS-címke tulajdonságát. Ha statikus IP-címet használ, fenntartott IP-címként kell hivatkoznia rá a Service Configuration (.cscfg) fájlban. Ha meglévő IP-címet használ, hagyja ki ezt a lépést, és adja hozzá az IP-címadatokat közvetlenül az ARM-sablon terheléselosztó konfigurációs beállításaihoz.

    "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" 
          } 
        } 
    ] 
    

    Ha új IP-címet hoz létre, adja hozzá a következőt a dependsOn szakaszhoz, hogy a platform a felhőszolgáltatás létrehozása előtt hozza létre az IP-címet.

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Hozzon létre egy cloud service (kiterjesztett támogatás) objektumot, és adjon hozzá megfelelő dependsOn hivatkozásokat, ha virtuális hálózatokat vagy nyilvános IP-címet helyez üzembe a sablonon belül.

    {
      "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. Hozzon létre egy hálózatiprofil-objektumot a felhőszolgáltatáshoz, és társítsa a nyilvános IP-címet a terheléselosztó előtéréhez. A platform automatikusan létrehoz egy terheléselosztót.

    "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. Adja hozzá a key vault-referenciát az OsProfile ARM-sablon szakaszához. Key Vault a Cloud Services (kiterjesztett támogatás) társított tanúsítványok tárolására szolgál. Adja hozzá a tanúsítványokat a Key Vault, majd hivatkozzon a tanúsítvány ujjlenyomatára a Service Configuration (.cscfg) fájlban. Emellett engedélyeznie kell Key Vault "Hozzáférési szabályzatokat" az "Azure Virtual Machines üzembe helyezéshez" (a portálon), hogy Cloud Services (kiterjesztett támogatású) erőforrás le tudja kérni a titkos kódként tárolt tanúsítványokat Key Vault. A kulcstartónak ugyanabban a régióban és előfizetésben kell lennie, mint a felhőszolgáltatásnak, és egyedi névvel kell rendelkeznie. További információ: Tanúsítványok használata Cloud Services (kiterjesztett támogatás) használatával.

    "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}" 
                } 
              ] 
            } 
          ] 
        } 
    

    Megjegyzés

     A SourceVault a kulcstartó ARM-erőforrás-azonosítója. Ezeket az információkat a kulcstartó tulajdonságok szakaszában található erőforrás-azonosító megkeresésével találja meg.

    • A certificateUrl a Titkos azonosító címkével ellátott kulcstartóban található tanúsítványra lépve található. 
    • A certificateUrl formátumnak https://{keyvault-endpoin}/secrets/{secretname}/{secret-id} formátumúnak kell lennie.
  6. Hozzon létre egy szerepkörprofilt. Győződjön meg arról, hogy az egyes szerepkörökben és méretekben lévő szerepkörök, szerepkörnevek, példányok száma megegyezik az ARM-sablon Szolgáltatáskonfiguráció (.cscfg), Szolgáltatásdefiníció (.csdef) és szerepkörprofil szakaszában.

    "roleProfile": {
      "roles": {
        "value": [
          {
            "name": "WebRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            }
          },
          {
            "name": "WorkerRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            } 
          } 
        ]
      }
    }   
    
  7. (Nem kötelező) Bővítményprofil létrehozása bővítmények felhőszolgáltatáshoz való hozzáadásához. Ebben a példában hozzáadjuk a távoli asztalt és a Windows Azure diagnosztikai bővítményt.

    Megjegyzés

    A távoli asztal jelszavának 8–123 karakter hosszúságúnak kell lennie, és legalább 3 jelszó-összetettségi követelménynek kell megfelelnie a következőkből: 1) Nagybetűt tartalmaz 2) Kisbetűt tartalmaz 3) Numerikus számjegyet tartalmaz 4) Speciális karaktert tartalmaz 5) A vezérlőkarakterek nem használhatók

        "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. Tekintse át a teljes sablont.

    {
      "$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. Telepítse a sablont és a paraméterfájlt (paramétereket definiáljon a sablonfájlban) a Cloud Service (kiterjesztett támogatás) üzembe helyezésének létrehozásához. Tekintse meg ezeket a mintasablonokat , ha szükséges.

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

Következő lépések