使用 Azure PowerShell 部署雲端服務 (延伸支援)
本文說明如何使用 Az.CloudService
PowerShell 模組在 Azure 中部署具有多個角色 (WebRole 和 WorkerRole) 的雲端服務 (延伸支援)。
必要條件
檢閱雲端服務 (延伸支援) 的部署必要條件,並建立相關聯的資源。
安裝 Az.CloudService PowerShell 模組。
Install-Module -Name Az.CloudService
建立新的資源群組。 如果使用現有的資源群組,則這是選用步驟。
New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US”
建立儲存體帳戶以及將用來儲存雲端服務套件 (.cspkg) 和服務設定 (.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 部署雲端服務 (延伸支援):
-
- 此參數會連同儲存體帳戶將 .cscfg、.cspkg 和 .csdef 檔案設定為輸入。
- 雲端服務角色設定檔、網路設定檔和 OS 設定檔是由 Cmdlet 以最少的使用者輸入所建立。
- 針對憑證輸入,將指定 keyvault 名稱。 keyvault 中的憑證指紋會根據 .cscfg 檔案中指定的憑證指紋進行驗證。
-
- 此參數會設定 .cspkg 的 SAS URI 以及 .csdef 和 .cscfg 檔案的本地路徑。 不需要儲存體帳戶輸入。
- 雲端服務角色設定檔、網路設定檔和 OS 設定檔是由 Cmdlet 以最少的使用者輸入所建立。
- 針對憑證輸入,將指定 keyvault 名稱。 keyvault 中的憑證指紋會根據 .cscfg 檔案中指定的憑證指紋進行驗證。
建立具有角色、OS、網路和延伸模組設定檔和SAS URI 的雲端服務
- 此參數會設定 .cscfg 和 .cspkg 檔案的 SAS URI。
- 角色、網路、OS 和延伸模組配置文件必須由使用者指定,而且必須符合 .cscfg 和 .csdef 中的值。
使用儲存體帳戶快速建立雲端服務
使用 .cscfg、.csdef 和 .cspkg 檔案建立雲端服務部署。
$cspkgFilePath = "<Path to cspkg file>"
$cscfgFilePath = "<Path to cscfg file>"
$csdefFilePath = "<Path to csdef file>"
# Create Cloud Service
New-AzCloudService
-Name "ContosoCS" `
-ResourceGroupName "ContosOrg" `
-Location "EastUS" `
-ConfigurationFile $cscfgFilePath `
-DefinitionFile $csdefFilePath `
-PackageFile $cspkgFilePath `
-StorageAccount $storageAccount `
[-KeyVaultName <string>]
使用 SAS URI 快速建立雲端服務
將您的雲端服務套件 (cspkg) 上傳至儲存體帳戶。
$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>"
使用 .cscfg、.csdef 和 .cspkg SAS URI 建立雲端服務部署。
New-AzCloudService -Name "ContosoCS" ` -ResourceGroupName "ContosOrg" ` -Location "EastUS" ` -ConfigurationFile $cspkgFilePath ` -DefinitionFile $csdefFilePath ` -PackageURL $cspkgUrl ` [-KeyVaultName <string>]
使用設定檔物件和 SAS URI 建立雲端服務
將雲端服務設定 (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
將您的雲端服務套件 (cspkg) 上傳至儲存體帳戶。
$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
建立虛擬網路與子網路。 如果使用現有的網路和子網路,則這是選用步驟。 此範例會針對雲端服務角色使用單一虛擬網路和子網路 (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
建立公用 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
建立網路設定檔物件,並將公用 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}
建立 Key Vault。 此金鑰保存庫將用來儲存與雲端服務 (延伸支援) 角色相關聯的憑證。 金鑰保存庫必須位於與雲端服務相同的區域和訂用帳戶,而且具有唯一名稱。 如需詳細資訊,請參閱使用憑證搭配 Azure 雲端服務 (延伸支援)。
New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US”
更新金鑰保存庫的存取原則,並將憑證權限授與使用者帳戶。
Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -EnabledForDeployment Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete
或者,透過 ObjectId 設定存取原則 (可藉由執行
Get-AzADUser
來取得)。Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete
在此範例中,我們會將自我簽署憑證新增至金鑰保存庫。 您需要在雲端服務設定 (.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
建立 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)}
建立角色設定檔記憶體內部物件。 角色設定檔會定義角色 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)}
(選用) 建立您想要新增至雲端服務的延伸模組設定檔記憶體內部物件。 在此範例中,我們將新增 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)}
ConfigFile 應該只有 PublicConfig 標記,而且應該包含命名空間,如下所示:
<?xml version="1.0" encoding="utf-8"?> <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration"> ............... </PublicConfig>
(選用) 將標籤定義為您想要新增至雲端服務的 PowerShell 雜湊表。
$tag=@{"Owner" = "Contoso"}
使用設定檔物件和 SAS URL 建立雲端服務部署。
$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
下一步
- 檢閱雲端服務 (延伸支援) 的常見問題集。
- 使用 Azure 入口網站、PowerShell、範本或 Visual Studio 部署雲端服務 (延伸支援)。
- 造訪雲端服務 (延伸支援) 範例存放庫。