Sdílet prostřednictvím


Nasazení cloudových služeb (rozšířená podpora) pomocí šablony ARM

V tomto článku se dozvíte, jak pomocí šablony Azure Resource Manageru (šablona ARM) vytvořit nasazení Azure Cloud Services (rozšířená podpora).

Požadavky

Podle požadavků na vytvoření nasazení pomocí šablon ARM proveďte následující kroky.

  1. Projděte si požadavky na nasazení cloudových služeb (rozšířená podpora) a vytvořte požadované prostředky.

  2. Vytvořte novou skupinu prostředků pomocí webu Azure Portal nebo Azure PowerShellu. Tento krok je nepovinný, pokud používáte existující skupinu prostředků.

  3. Vytvořte nový účet úložiště pomocí webu Azure Portal nebo Azure PowerShellu. Tento krok je volitelný, pokud používáte existující účet úložiště.

  4. Nahrajte soubor a konfiguraci balíčku (.cspkg nebo .zip) do účtu úložiště pomocí webu Azure Portal nebo Azure PowerShellu. Uložte identifikátory URI sdíleného přístupového podpisu (SAS) pro oba soubory, které se mají přidat do šablony ARM v pozdějším kroku.

  5. (Volitelné) Vytvořte trezor klíčů a nahrajte certifikáty.

    • K nasazení můžete připojit certifikáty pro zabezpečenou komunikaci se službou a z této služby. Pokud používáte certifikáty, musí být kryptografické otisky certifikátu zadány v konfiguračním souboru (.cscfg) a musí se nahrát do trezoru klíčů. Trezor klíčů můžete vytvořit pomocí webu Azure Portal nebo Azure PowerShellu.
    • Přidružený trezor klíčů musí být ve stejné oblasti a předplatném jako vaše nasazení cloudových služeb (rozšířená podpora).
    • Přidružený trezor klíčů musí mít příslušná oprávnění, aby prostředky cloudových služeb (rozšířené podpory) mohly načítat certifikáty z trezoru klíčů. Další informace najdete v tématu Použití certifikátů se službou Cloud Services (rozšířená podpora).
    • Na trezor klíčů se musí odkazovat v osProfile části šablony ARM, jak je znázorněno v pozdějším kroku.

Nasazení Cloud Services (rozšířená podpora)

Nasazení cloudových služeb (rozšířená podpora) pomocí šablony:

Poznámka:

Jednodušším a rychlejším způsobem, jak vygenerovat šablonu a soubor parametrů ARM, je použití webu Azure Portal. Vygenerovanou šablonu ARM si můžete stáhnout na portálu a vytvořit tak cloudovou službu (rozšířenou podporu) prostřednictvím Azure PowerShellu.

  1. Vytvořte virtuální síť. Název virtuální sítě musí odpovídat odkazům na virtuální síť v souboru konfigurace (.cscfg). Pokud používáte existující virtuální síť, vynecháte tuto část ze šablony ARM.

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

    Pokud vytvoříte novou virtuální síť, přidejte do dependsOn části následující řádky, abyste zajistili, že platforma vytvoří virtuální síť před vytvořením instance Cloud Services (rozšířená podpora):

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. Vytvořte veřejnou IP adresu a (volitelně) nastavte vlastnost popisku DNS veřejné IP adresy. Pokud používáte statickou IP adresu, musíte na ni odkazovat jako na vyhrazenou IP adresu v souboru konfigurace (.cscfg). Pokud používáte existující IP adresu, přeskočte tento krok a přidejte informace o IP adrese přímo do nastavení konfigurace nástroje pro vyrovnávání zatížení v šabloně ARM.

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

    Pokud vytvoříte novou IP adresu, přidejte do oddílu dependsOn následující řádky, abyste před vytvořením instance Cloud Services (rozšířená podpora) zajistili, že platforma vytvoří IP adresu:

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Vytvoření objektu Cloud Services (rozšířená podpora) Pokud nasazujete virtuální sítě nebo veřejné IP adresy ve své šabloně, přidejte relevantní dependsOn odkazy.

    {
      "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. Vytvořte objekt profilu sítě pro vaše nasazení a přidružte veřejnou IP adresu k front-endu nástroje pro vyrovnávání zatížení. Platforma Azure automaticky vytvoří nástroj pro vyrovnávání zatížení.

    "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. Přidejte referenční informace k trezoru klíčů v osProfile části šablony ARM. Trezor klíčů ukládá certifikáty přidružené ke cloudovým službám (rozšířená podpora). Přidejte certifikáty do trezoru klíčů a potom v souboru konfigurace (.cscfg) odkazujte na kryptografické otisky certifikátu. Nastavte také zásady přístupu trezoru klíčů pro azure Virtual Machines pro nasazení na webu Azure Portal, aby prostředek Cloud Services (rozšířená podpora) mohl načíst certifikáty, které jsou uložené jako tajné kódy v trezoru klíčů. Trezor klíčů musí být ve stejné oblasti a předplatném jako prostředek cloudových služeb (rozšířená podpora) a musí mít jedinečný název. Další informace najdete v tématu Použití certifikátů se službou Cloud Services (rozšířená podpora).

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

    Poznámka:

    sourceVaultv šabloně ARM je hodnota ID prostředku pro váš trezor klíčů. Tyto informace získáte vyhledáním ID prostředku v části Vlastnosti trezoru klíčů.

    • Hodnotu certificateUrl můžete získat tak, že přejdete na certifikát v trezoru klíčů, který je označený jako tajný identifikátor. 
    • certificateUrl by měla mít formu https://{keyvault-endpoint}/secrets/{secret-name}/{secret-id}.
  6. Vytvořte profil role. Ujistěte se, že počet rolí, počet instancí v jednotlivých rolích, názvy rolí a velikosti rolí jsou stejné v rámci souboru konfigurace (.cscfg), souboru definice (.csdef) a roleProfile oddílu v šabloně ARM.

    "roleProfile": {
      "roles": {
        "value": [
          {
            "name": "WebRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            }
          },
          {
            "name": "WorkerRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            } 
          } 
        ]
      }
    }   
    
  7. (Volitelné) Vytvořte profil rozšíření pro přidání rozšíření do nasazení Cloud Services (rozšířená podpora). Následující příklad přidá rozšíření RDP (Remote Desktop Protocol) a rozšíření Azure Diagnostics.

    Poznámka:

    Heslo pro protokol RDP musí mít 8 až 123 znaků a musí splňovat alespoň tři z následujících požadavků na složitost hesla:

    Obsahuje velká písmena.
    Obsahuje malá písmena.
    Obsahuje číselnou číslici.
    Obsahuje speciální znak.
    Nelze obsahovat řídicí znak.

        "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. Zkontrolujte úplnou šablonu:

    {
      "$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. Nasaďte šablonu a soubor parametrů (pro definování parametrů v souboru šablony) a vytvořte nasazení Cloud Services (rozšířená podpora). Tyto ukázkové šablony můžete použít.

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