Bagikan melalui


Menyebarkan Cloud Services (dukungan yang diperluas) dengan menggunakan templat ARM

Artikel ini memperlihatkan kepada Anda cara menggunakan templat Azure Resource Manager (templat ARM) untuk membuat penyebaran Azure Cloud Services (dukungan yang diperluas).

Prasyarat

Selesaikan langkah-langkah berikut sebagai prasyarat untuk membuat penyebaran Anda dengan menggunakan templat ARM.

  1. Tinjau prasyarat penyebaran untuk Cloud Services (dukungan yang diperluas) dan buat sumber daya yang diperlukan.

  2. Buat grup sumber daya baru dengan menggunakan portal Azure atau Azure PowerShell. Langkah ini bersifat opsional jika Anda menggunakan grup sumber daya yang ada.

  3. Buat akun penyimpanan baru dengan menggunakan portal Azure atau Azure PowerShell. Langkah ini bersifat opsional jika Anda menggunakan akun penyimpanan yang sudah ada.

  4. Unggah file dan konfigurasi paket (.cspkg atau .zip) (.cscfg) ke akun penyimpanan dengan menggunakan portal Azure atau Azure PowerShell. Simpan URI tanda tangan akses bersama (SAS) untuk kedua file untuk ditambahkan ke templat ARM di langkah selanjutnya.

  5. (Opsional) Buat brankas kunci dan unggah sertifikat.

    • Anda dapat melampirkan sertifikat ke penyebaran Anda untuk komunikasi yang aman ke dan dari layanan. Jika Anda menggunakan sertifikat, thumbprint sertifikat harus ditentukan dalam file konfigurasi (.cscfg) Anda dan diunggah ke brankas kunci. Anda dapat membuat brankas kunci dengan menggunakan portal Azure atau Azure PowerShell.
    • Brankas kunci terkait harus berada di wilayah dan langganan yang sama dengan penyebaran Cloud Services (dukungan yang diperluas).
    • Brankas kunci terkait harus memiliki izin yang relevan sehingga sumber daya Cloud Services (dukungan yang diperluas) dapat mengambil sertifikat dari brankas kunci. Untuk informasi selengkapnya, lihat Menggunakan sertifikat dengan Cloud Services (dukungan yang diperluas).
    • Brankas kunci harus dirujuk di bagian osProfile templat ARM seperti yang ditunjukkan di langkah selanjutnya.

Menyebarkan Azure Cloud Services (dukungan yang diperluas)

Untuk menyebarkan Cloud Services (dukungan yang diperluas) dengan menggunakan templat:

Catatan

Cara yang lebih mudah dan lebih cepat untuk menghasilkan templat ARM dan file parameter Anda adalah dengan menggunakan portal Azure. Anda dapat mengunduh templat ARM yang dihasilkan di portal untuk membuat Cloud Services (dukungan yang diperluas) melalui Azure PowerShell.

  1. Buat jaringan virtual. Nama jaringan virtual harus cocok dengan referensi jaringan virtual dalam file konfigurasi (.cscfg). Jika Anda menggunakan jaringan virtual yang ada, hilangkan bagian ini dari templat 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" 
                } 
              } 
            ] 
          } 
        } 
    ] 
    

    Jika Anda membuat jaringan virtual baru, tambahkan baris berikut ke dependsOn bagian untuk memastikan bahwa platform membuat jaringan virtual sebelum membuat instans Cloud Services (dukungan yang diperluas):

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. Buat alamat IP publik dan (secara opsional) atur properti label DNS alamat IP publik. Jika Anda menggunakan alamat IP statis, Anda harus mereferensikannya sebagai alamat IP yang dipesan dalam file konfigurasi (.cscfg). Jika Anda menggunakan alamat IP yang ada, lewati langkah ini dan tambahkan informasi alamat IP langsung di pengaturan konfigurasi load balancer di templat ARM Anda.

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

    Jika Anda membuat alamat IP baru, tambahkan baris berikut ke dependsOn bagian untuk memastikan bahwa platform membuat alamat IP sebelum membuat instans Cloud Services (dukungan yang diperluas):

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. Buat objek Cloud Services (dukungan yang diperluas). Tambahkan referensi yang relevan dependsOn jika Anda menyebarkan jaringan virtual atau alamat IP publik di templat Anda.

    {
      "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. Buat objek profil jaringan untuk penyebaran Anda, dan kaitkan alamat IP publik dengan ujung depan load balancer. Platform Azure secara otomatis membuat 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. Tambahkan referensi brankas kunci Anda di bagian osProfile templat ARM. Brankas kunci menyimpan sertifikat yang terkait dengan Cloud Services (dukungan yang diperluas). Tambahkan sertifikat ke brankas kunci, lalu referensikan thumbprint sertifikat dalam file konfigurasi (.cscfg). Selain itu, atur kebijakan akses brankas kunci untuk Azure Virtual Machines untuk penyebaran di portal Azure sehingga sumber daya Cloud Services (dukungan diperluas) dapat mengambil sertifikat yang disimpan sebagai rahasia di brankas kunci. Brankas kunci harus berada di wilayah dan langganan yang sama dengan sumber daya Cloud Services (dukungan yang diperluas) Anda dan memiliki nama yang unik. Untuk informasi selengkapnya, lihat Menggunakan sertifikat dengan Cloud Services (dukungan yang diperluas).

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

    Catatan

    sourceVaultdalam templat ARM adalah nilai ID sumber daya untuk brankas kunci Anda. Anda bisa mendapatkan informasi ini dengan menemukan ID Sumber Daya di bagian Properti di brankas kunci Anda.

    • Anda bisa mendapatkan nilai dengan certificateUrl masuk ke sertifikat di brankas kunci yang berlabel Pengidentifikasi Rahasia. 
    • certificateUrl harus dalam bentuk https://{keyvault-endpoint}/secrets/{secret-name}/{secret-id}.
  6. Buat profil peran. Pastikan bahwa jumlah peran, jumlah instans dalam setiap peran, nama peran, dan ukuran peran sama di seluruh file konfigurasi (.cscfg), file definisi (.csdef), dan roleProfile bagian dalam templat ARM.

    "roleProfile": {
      "roles": {
        "value": [
          {
            "name": "WebRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            }
          },
          {
            "name": "WorkerRole1",
            "sku": {
              "name": "Standard_D1_v2",
              "capacity": "1"
            } 
          } 
        ]
      }
    }   
    
  7. (Opsional) Buat profil ekstensi untuk menambahkan ekstensi ke penyebaran Cloud Services (dukungan yang diperluas). Contoh berikut menambahkan ekstensi Protokol Desktop Jauh (RDP) dan ekstensi Azure Diagnostics.

    Catatan

    Kata sandi untuk RDP harus dari 8 hingga 123 karakter dan harus memenuhi setidaknya tiga persyaratan kompleksitas kata sandi berikut:

    Berisi karakter huruf besar.
    Berisi karakter huruf kecil.
    Berisi digit numerik.
    Berisi karakter khusus.
    Tidak boleh memuat karakter kontrol.

        "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. Tinjau templat lengkap:

    {
      "$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. Untuk membuat penyebaran Cloud Services (dukungan diperluas), sebarkan file templat dan parameter (untuk menentukan parameter dalam file templat). Anda dapat menggunakan templat sampel ini.

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