Nasazení cloudové služby (s rozšířenou podporou) pomocí šablon ARM

Tento kurz vysvětluje, jak vytvořit nasazení cloudové služby (s rozšířenou podporou) pomocí šablon ARM.

Než začnete

  1. Projděte si požadavky na nasazení pro Cloud Services (rozšířená podpora) a vytvořte přidružené prostředky.

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

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

  4. Soubory package (.cspkg) a Service Configuration (.cscfg) nahrajte do účtu úložiště pomocí Azure Portal nebo PowerShellu. Získejte identifikátory URI SAS obou souborů, které se mají přidat do šablony ARM později v tomto kurzu.

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

    • Certifikáty je možné připojit ke cloudovým službám, aby bylo možné zabezpečenou komunikaci se službou a ze služby. Aby bylo možné používat certifikáty, musí být jejich kryptografické otisky zadané v souboru konfigurace služby (.cscfg) a nahrány do trezoru klíčů. Trezor klíčů je možné vytvořit prostřednictvím Azure Portal nebo PowerShellu.
    • Přidružený trezor klíčů musí být umístěný ve stejné oblasti a předplatném jako cloudová služba.
    • Přidružený trezor klíčů pro musí mít povolená příslušná oprávnění, aby prostředek Cloud Services (rozšířená podpora) mohl načítat certifikáty z Key Vault. Další informace najdete v tématu Certifikáty a Key Vault.
    • Na trezor klíčů je potřeba odkazovat v části OsProfile šablony ARM uvedené v následujících krocích.

Nasazení cloudové služby (rozšířená podpora)

Poznámka

Jednodušší a rychlejší způsob generování šablony ARM a souboru parametrů je prostřednictvím Azure Portal. Vygenerovanou šablonu ARM si můžete stáhnout přes portál a vytvořit cloudovou službu přes PowerShell.

  1. Vytvořte virtuální síť. Název virtuální sítě se musí shodovat s odkazy v souboru Konfigurace služby (.cscfg). Pokud používáte existující virtuální síť, v šabloně ARM tuto část vyněžte.

    "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 vytváříte novou virtuální síť, přidejte do dependsOn části následující informace, abyste měli jistotu, že platforma vytvoří virtuální síť před vytvořením cloudové služby.

    "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 rezervovanou IP adresu v souboru konfigurace služby (.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í vaší šablony 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 vytváříte novou IP adresu, přidejte do dependsOn části následující, abyste měli jistotu, že platforma vytvoří IP adresu před vytvořením cloudové služby.

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Vytvořte objekt cloudové služby (rozšířená podpora) a přidejte příslušné dependsOn odkazy, pokud v šabloně nasazujete virtuální sítě nebo veřejnou IP adresu.

    {
      "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 cloudovou službu a přidružte veřejnou IP adresu k front-endu nástroje pro vyrovnávání zatížení. Platforma 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. V části šablony ARM přidejte odkaz na OsProfile trezor klíčů. Key Vault slouží k ukládání certifikátů přidružených k Cloud Services (rozšířená podpora). Přidejte certifikáty do Key Vault a pak odkažte na kryptografické otisky certifikátu v souboru konfigurace služby (.cscfg). Musíte také povolit Key Vault zásady přístupu pro Azure Virtual Machines pro nasazení (na portálu), aby prostředek Cloud Services (rozšířená podpora) mohl načíst certifikát uložený jako tajné kódy z Key Vault. Trezor klíčů musí být umístěný ve stejné oblasti a předplatném jako cloudová služba a musí mít jedinečný název. Další informace najdete v tématu Používání certifikátů s 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

     SourceVault je ID prostředku ARM pro váš trezor klíčů. Tyto informace najdete vyhledáním ID prostředku v části vlastnosti trezoru klíčů.

    • certificateUrl najdete tak, že přejdete na certifikát v trezoru klíčů označeném jako Identifikátor tajného kódu. 
    • certificateUrl by měl mít formát https://{keyvault-endpoin}/secrets/{secretname}/{secret-id}
  6. Vytvořte profil role. Ujistěte se, že počet rolí, názvy rolí, počet instancí v každé roli a velikosti jsou stejné v části Konfigurace služby (.cscfg), Definice služby (.csdef) a profil role 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 cloudové služby. V tomto příkladu přidáváme rozšíření Remote Desktop a Windows Azure Diagnostics.

    Poznámka

    Heslo pro vzdálenou plochu musí mít délku 8 až 123 znaků a musí splňovat alespoň 3 požadavky na složitost hesla z následujících: 1) Obsahuje velké písmeno 2) Obsahuje malá písmena 3) Obsahuje číslici 4) Obsahuje speciální znak 5) Řídicí znaky nejsou povoleny.

        "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 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. Nasaďte šablonu a soubor parametrů (definující parametry v souboru šablony) a vytvořte nasazení cloudové služby (s rozšířenou podporou). Podle potřeby si projděte tyto ukázkové šablony .

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

Další kroky