ARM şablonlarını kullanarak Bulut Hizmeti (genişletilmiş destek) dağıtma

Bu öğreticide ARM şablonlarını kullanarak Bulut Hizmeti (genişletilmiş destek) dağıtımı oluşturma adımları açıklanmaktadır.

Başlamadan önce

  1. Cloud Services (genişletilmiş destek) için dağıtım önkoşullarını gözden geçirin ve ilişkili kaynakları oluşturun.

  2. Azure portal veya PowerShell kullanarak yeni bir kaynak grubu oluşturun. Mevcut bir kaynak grubunu kullanıyorsanız bu adım isteğe bağlıdır.

  3. Azure portal veya PowerShell kullanarak yeni bir depolama hesabı oluşturun. Mevcut bir depolama hesabı kullanıyorsanız bu adım isteğe bağlıdır.

  4. Azure portal veya PowerShell kullanarak Paket (.cspkg) ve Hizmet Yapılandırması (.cscfg) dosyalarınızı depolama hesabına yükleyin. Bu öğreticinin devamında ARM şablonuna eklenecek her iki dosyaya ait SAS URI'lerini alın.

  5. (İsteğe bağlı) Bir anahtar kasası oluşturun ve sertifikaları karşıya yükleyin.

    • Hizmetle ve hizmetten güvenli iletişim sağlamak için bulut hizmetlerine sertifikalar eklenebilir. Sertifikaları kullanabilmek için parmak izlerinin Hizmet Yapılandırması (.cscfg) dosyanızda belirtilmesi ve bir anahtar kasasına yüklenmesi gerekir. Anahtar kasası Azure portal veya PowerShell aracılığıyla oluşturulabilir.
    • İlişkili anahtar kasası, bulut hizmetiyle aynı bölgede ve abonelikte bulunmalıdır.
    • Cloud Services (genişletilmiş destek) kaynağının Key Vault'dan sertifikaları alabilmesi için için ilişkili anahtar kasasının uygun izinler etkinleştirilmesi gerekir. Daha fazla bilgi için bkz. Sertifikalar ve Key Vault
    • Aşağıdaki adımlarda gösterilen ARM şablonunun OsProfile bölümünde anahtar kasasına başvuru yapılması gerekir.

Bulut Hizmeti dağıtma (genişletilmiş destek)

Not

ARM şablonunuzu ve parametre dosyanızı oluşturmanın daha kolay ve daha hızlı bir yolu Azure portal. Bulut Hizmetinizi PowerShell aracılığıyla oluşturmak için oluşturulan ARM şablonunu portal üzerinden indirebilirsiniz

  1. Sanal ağ oluşturma. Sanal ağın adı, Hizmet Yapılandırması (.cscfg) dosyasındaki başvurularla eşleşmelidir. Mevcut bir sanal ağ kullanıyorsanız ARM şablonundan bu bölümü atla.

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

    Yeni bir sanal ağ oluşturuyorsanız, bulut hizmetini oluşturmadan önce platformun dependsOn sanal ağı oluşturduğundan emin olmak için aşağıdakini bölümüne ekleyin.

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. Bir genel IP adresi oluşturun ve (isteğe bağlı olarak) genel IP adresinin DNS etiketi özelliğini ayarlayın. Statik IP kullanıyorsanız, buna Hizmet Yapılandırması (.cscfg) dosyasında Ayrılmış IP olarak başvurmanız gerekir. Mevcut bir IP adresi kullanıyorsanız, bu adımı atlayın ve IP adresi bilgilerini doğrudan ARM şablonunuzun yük dengeleyici yapılandırma ayarlarına ekleyin.

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

    Yeni bir IP adresi oluşturuyorsanız, bulut hizmetini oluşturmadan önce platformun dependsOn IP adresini oluşturduğundan emin olmak için aşağıdakini bölümüne ekleyin.

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Şablonunuz içinde Sanal Ağlar veya Genel IP dağıtıyorsanız uygun dependsOn başvurular ekleyerek bir Bulut Hizmeti (Genişletilmiş Destek) nesnesi oluşturun.

    {
      "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. Bulut Hizmetiniz için bir Ağ Profili Nesnesi oluşturun ve genel IP adresini yük dengeleyicinin ön ucuyla ilişkilendirin. Platform tarafından otomatik olarak bir Yük dengeleyici oluşturulur.

    "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. ARM şablonunun OsProfile bölümüne anahtar kasası başvurunuzu ekleyin. Key Vault, Cloud Services (genişletilmiş destek) ile ilişkili sertifikaları depolamak için kullanılır. Sertifikaları Key Vault ekleyin, ardından Hizmet Yapılandırması (.cscfg) dosyasındaki sertifika parmak izlerine başvurun. Ayrıca Cloud Services (genişletilmiş destek) kaynağının Key Vault'dan gizli dizi olarak depolanan sertifikayı alabilmesi için 'Dağıtım için Azure Sanal Makineler' (portalda) için Key Vault 'Erişim ilkeleri'ni etkinleştirmeniz gerekir. Anahtar kasasının bulut hizmetiyle aynı bölgede ve abonelikte bulunması ve benzersiz bir ada sahip olması gerekir. Daha fazla bilgi için bkz. Cloud Services (genişletilmiş destek) ile sertifikaları kullanma.

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

    Not

     SourceVault, anahtar kasanızın ARM Kaynak Kimliğidir. Anahtar kasanızın özellikler bölümünde Kaynak Kimliğini bularak bu bilgileri bulabilirsiniz.

    • certificateUrl, anahtar kasasında Gizli Dizi Tanımlayıcısı olarak etiketlenen sertifikaya giderek bulunabilir. 
    • certificateUrl https://{keyvault-endpoin}/secrets/{secretname}/{secret-id} biçiminde olmalıdır
  6. Rol Profili oluşturun. Arm şablonundaki Hizmet Yapılandırması (.cscfg), Hizmet Tanımı (.csdef) ve rol profili bölümünde rol sayısının, rol adlarının, her rol ve boyuttaki örnek sayısının aynı olduğundan emin olun.

    "roleProfile": {
      "roles": {
        "value": [
          {
            "name": "WebRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            }
          },
          {
            "name": "WorkerRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            } 
          } 
        ]
      }
    }   
    
  7. (İsteğe bağlı) Bulut hizmetinize uzantı eklemek için bir uzantı profili oluşturun. Bu örnekte uzak masaüstü ve Windows Azure tanılama uzantısını ekliyoruz.

    Not

    Uzak masaüstü parolası 8-123 karakter uzunluğunda olmalı ve aşağıdakilerden en az 3 parola karmaşıklığı gereksinimini karşılamalıdır: 1) Büyük harf karakter içerir 2) Küçük harf karakter içerir 3) Sayısal basamak içerir 4) Özel karakter içerir 5) Denetim karakterlerine izin verilmez

        "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. Şablonun tamamını gözden geçirin.

    {
      "$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. Bulut Hizmeti (genişletilmiş destek) dağıtımını oluşturmak için şablon ve parametre dosyasını (şablon dosyasında parametreleri tanımlama) dağıtın. Lütfen bu örnek şablonlara gerektiği gibi başvurun.

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

Sonraki adımlar