共用方式為


使用 Azure PowerShell 部署雲端服務 (延伸支援)

本文說明如何使用 Az.CloudService Azure PowerShell 模組,來建立具有多個角色 (WebRole 和 WorkerRole) 的 Azure 雲端服務 (延伸支援) 部署。

必要條件

使用 Azure PowerShell 建立部署的必要條件是完成下列步驟。

  1. 檢閱雲端服務 (延伸支援) 的部署必要條件,並建立必要資源。

  2. 安裝 Az.CloudService PowerShell 模組:

    Install-Module -Name Az.CloudService 
    
  3. 建立新的資源群組。 如果您使用現有的資源群組,則這是選用步驟。

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. 在 Azure 中建立儲存體帳戶和容器,以儲存雲端服務 (延伸支援) 部署的套件 (.cspkg 或 .zip) 檔案和設定 (.cscfg) 檔案。 您必須針對儲存體帳戶名稱使用唯一的名稱。 如果您使用現有的儲存體帳戶,則這是選用步驟。

    $storageAccount = New-AzStorageAccount -ResourceGroupName “ContosOrg” -Name “contosostorageaccount” -Location “East US” -SkuName “Standard_RAGRS” -Kind “StorageV2” 
    $container = New-AzStorageContainer -Name “contosocontainer” -Context $storageAccount.Context -Permission Blob 
    

部署雲端服務 (延伸支援)

若要部署雲端服務 (延伸支援),請使用下列任何 PowerShell Cmdlet 選項:

  • 使用儲存體帳戶快速建立部署

    • 此參數集會輸入部署的套件 (.cspkg 或 .zip) 檔案、設定 (.cscfg) 檔案和定義 (.csdef) 檔案來作為儲存體帳戶的輸入。
    • Cmdlet 會以最少的輸入建立雲端服務 (延伸支援) 的角色設定檔、網路設定檔和 OS 設定檔。
    • 若要輸入憑證,您必須指定金鑰保存庫名稱。 系統會根據您在部署的設定 (.cscfg) 檔案中指定的憑證來驗證金鑰保存庫中的憑證指紋。
  • 使用共用存取簽章 URI 快速建立部署

    • 此參數集會輸入套件 (.cspkg 或 .zip) 檔案的共用存取簽章 (SAS) URI,以及設定 (.cscfg) 檔案和定義 (.csdef) 檔案的本機路徑。 不需要輸入儲存體帳戶。
    • Cmdlet 會以最少的輸入建立雲端服務的角色設定檔、網路設定檔和 OS 設定檔。
    • 若要輸入憑證,您必須指定金鑰保存庫名稱。 系統會根據您在部署的設定 (.cscfg) 檔案中指定的憑證來驗證金鑰保存庫中的憑證指紋。
  • 使用角色設定檔、OS 設定檔、網路設定檔和延伸模組設定檔與共用存取簽章 URI 來建立部署

    • 此參數集會輸入套件 (.cspkg 或 .zip) 檔案和設定 (.cscfg) 檔案的 SAS URI。
    • 您必須指定設定檔物件:角色設定檔、網路設定檔、OS 設定檔和延伸模組設定檔。 設定檔必須符合您在設定 (.cscfg) 檔案和定義 (.csdef) 檔案中設定的值。

使用儲存體帳戶快速建立部署

使用套件 (.cspkg 或 .zip) 檔案、設定 (.cscfg) 檔案和定義 (.csdef) 檔案建立雲端服務 (延伸支援) 部署:

$cspkgFilePath = "<Path to .cspkg file>"
$cscfgFilePath = "<Path to .cscfg file>"
$csdefFilePath = "<Path to .csdef file>"
      
# Create a Cloud Services (extended support) deployment   
New-AzCloudService
-Name "ContosoCS" `
-ResourceGroupName "ContosOrg" `
-Location "EastUS" `
-ConfigurationFile $cscfgFilePath `
-DefinitionFile $csdefFilePath `
-PackageFile $cspkgFilePath `
-StorageAccount $storageAccount `
[-KeyVaultName <string>]

使用 SAS URI 快速建立部署

  1. 將部署的套件 (.cspkg 或 .zip) 檔案上傳至儲存體帳戶:

    $tokenStartTime = Get-Date 
    $tokenEndTime = $tokenStartTime.AddYears(1) 
    $cspkgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cspkg” -Container “contosocontainer” -Blob “ContosoApp.cspkg” -Context $storageAccount.Context 
    $cspkgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cspkgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cspkgUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri + $cspkgToken 
    $cscfgFilePath = "<Path to cscfg file>"
    $csdefFilePath = "<Path to csdef file>"
    
  2. 使用套件 (.cspkg 或 .zip) 檔案、設定 (.cscfg) 檔案和定義 (.csdef) 檔案 SAS URI 建立雲端服務 (延伸支援) 部署:

    New-AzCloudService
        -Name "ContosoCS" `
        -ResourceGroupName "ContosOrg" `
        -Location "EastUS" `
        -ConfigurationFile $cspkgFilePath `
        -DefinitionFile $csdefFilePath `
        -PackageURL $cspkgUrl `
        [-KeyVaultName <string>]
    

使用設定檔物件和 SAS URI 建立部署

  1. 將雲端服務 (延伸支援) 設定 (.cscfg) 檔案上傳至儲存體帳戶:

    $cscfgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cscfg” -Container contosocontainer -Blob “ContosoApp.cscfg” -Context $storageAccount.Context 
    $cscfgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cscfgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cscfgUrl = $cscfgBlob.ICloudBlob.Uri.AbsoluteUri + $cscfgToken 
    
  2. 將雲端服務 (延伸支援) 套件 (.cspkg 或 .zip) 檔案上傳至儲存體帳戶:

    $tokenStartTime = Get-Date 
    $tokenEndTime = $tokenStartTime.AddYears(1) 
    $cspkgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cspkg” -Container “contosocontainer” -Blob “ContosoApp.cspkg” -Context $storageAccount.Context 
    $cspkgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cspkgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cspkgUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri + $cspkgToken 
    
  3. 建立虛擬網路與子網路。 如果使用現有的網路和子網路,則這是選用步驟。 此範例會針對雲端服務 (延伸支援) 角色 (WebRole 和 WorkerRole) 使用單一虛擬網路和子網路。

    $subnet = New-AzVirtualNetworkSubnetConfig -Name "ContosoWebTier1" -AddressPrefix "10.0.0.0/24" -WarningAction SilentlyContinue 
    $virtualNetwork = New-AzVirtualNetwork -Name “ContosoVNet” -Location “East US” -ResourceGroupName “ContosOrg” -AddressPrefix "10.0.0.0/24" -Subnet $subnet 
    
  4. 建立公用 IP 位址,並設定公用 IP 位址的 DNS 標籤值。 雲端服務 (延伸支援) 只支援基本 SKU 公用 IP 位址。 標準 SKU 公用 IP 位址不適用於雲端服務 (延伸支援)。

    如果您使用靜態 IP 位址,則必須在部署的設定 (.cscfg) 檔案中將該位址參考為保留 IP 位址。

    $publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic 
    
  5. 建立網路設定檔物件,然後將公用 IP 位址與負載平衡器前端相關聯。 Azure 平台會自動在與雲端服務 (延伸支援) 資源相同的訂用帳戶中建立傳統 SKU 負載平衡器資源。 在 Azure Resource Manager 中,負載平衡器是唯讀資源。 您只能透過雲端服務 (延伸支援) 設定 (.cscfg) 檔案和部署 (.csdef) 檔案來更新資源。

    $publicIP = Get-AzPublicIpAddress -ResourceGroupName ContosOrg -Name ContosIp  
    $feIpConfig = New-AzCloudServiceLoadBalancerFrontendIPConfigurationObject -Name 'ContosoFe' -PublicIPAddressId $publicIP.Id 
    $loadBalancerConfig = New-AzCloudServiceLoadBalancerConfigurationObject -Name 'ContosoLB' -FrontendIPConfiguration $feIpConfig 
    $networkProfile = @{loadBalancerConfiguration = $loadBalancerConfig} 
    
  6. 建立金鑰保存庫。 金鑰保存庫會儲存與雲端服務 (延伸支援) 角色相關聯的憑證。 金鑰保存庫必須位於與雲端服務 (延伸支援) 部署相同的區域和訂用帳戶,而且具有唯一名稱。 如需詳細資訊,請參閱使用憑證搭配雲端服務 (延伸支援)

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. 更新金鑰保存庫的存取原則,並將憑證權限授與使用者帳戶:

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -EnabledForDeployment
    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete 
    

    或者,使用 ObjectId 值來設定存取原則。 若要取得 ObjectId 值,請執行 Get-AzADUser

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. 下列範例會將自我簽署憑證新增至金鑰保存庫。 您必須透過雲端服務 (延伸支援) 角色的設定 (.cscfg) 檔案來新增憑證指紋。

    $Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" -SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal 
    Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy 
    
  9. 建立 OS 設定檔記憶體內部物件。 OS 設定檔會指定與雲端服務 (延伸支援) 角色相關聯的憑證,這是您在上一個步驟中建立的憑證。

    $keyVault = Get-AzKeyVault -ResourceGroupName ContosOrg -VaultName ContosKeyVault 
    $certificate = Get-AzKeyVaultCertificate -VaultName ContosKeyVault -Name ContosCert 
    $secretGroup = New-AzCloudServiceVaultSecretGroupObject -Id $keyVault.ResourceId -CertificateUrl $certificate.SecretId 
    $osProfile = @{secret = @($secretGroup)} 
    
  10. 建立角色設定檔記憶體內部物件。 角色設定檔會定義角色的 SKU 特有的屬性,例如名稱、容量和階層。 此範例中定義了兩個角色:frontendRole 和 backendRole。 角色設定檔資訊必須符合部署設定 (.cscfg) 檔案和定義 (.csdef) 檔案中所定義的角色設定。

    $frontendRole = New-AzCloudServiceRoleProfilePropertiesObject -Name 'ContosoFrontend' -SkuName 'Standard_D1_v2' -SkuTier 'Standard' -SkuCapacity 2 
    $backendRole = New-AzCloudServiceRoleProfilePropertiesObject -Name 'ContosoBackend' -SkuName 'Standard_D1_v2' -SkuTier 'Standard' -SkuCapacity 2 
    $roleProfile = @{role = @($frontendRole, $backendRole)} 
    
  11. (選用) 建立要新增至雲端服務 (延伸支援) 部署的延伸模組設定檔記憶體內部物件。 此範例會新增遠端桌面通訊協定 (RDP) 延伸模組:

    $credential = Get-Credential 
    $expiration = (Get-Date).AddYears(1) 
    $rdpExtension = New-AzCloudServiceRemoteDesktopExtensionObject -Name 'RDPExtension' -Credential $credential -Expiration $expiration -TypeHandlerVersion '1.2.1' 
    
    $storageAccountKey = Get-AzStorageAccountKey -ResourceGroupName "ContosOrg" -Name "contosostorageaccount"
    $configFile = "<WAD public configuration file path>"
    $wadExtension = New-AzCloudServiceDiagnosticsExtension -Name "WADExtension" -ResourceGroupName "ContosOrg" -CloudServiceName "ContosCS" -StorageAccountName "contosostorageaccount" -StorageAccountKey $storageAccountKey[0].Value -DiagnosticsConfigurationPath $configFile -TypeHandlerVersion "1.5" -AutoUpgradeMinorVersion $true 
    $extensionProfile = @{extension = @($rdpExtension, $wadExtension)} 
    

    設定 (.cscfg) 檔案應該只有 PublicConfig 標籤,而且應該包含命名空間,如下列範例所示:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (選用) 在 PowerShell 雜湊表中,您可以定義要新增至部署的標籤:

    $tag=@{"Owner" = "Contoso"} 
    
  13. 使用您定義的設定檔物件和 SAS URI 來建立雲端服務 (延伸支援) 部署:

    $cloudService = New-AzCloudService ` 
        -Name “ContosoCS” ` 
        -ResourceGroupName “ContosOrg” ` 
        -Location “East US” ` 
        -PackageUrl $cspkgUrl ` 
        -ConfigurationUrl $cscfgUrl ` 
        -UpgradeMode 'Auto' ` 
        -RoleProfile $roleProfile ` 
        -NetworkProfile $networkProfile  ` 
        -ExtensionProfile $extensionProfile ` 
        -OSProfile $osProfile `
        -Tag $tag