使用 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 快速创建部署

    • 此参数集使用配置 (.cscfg) 文件和定义 (.csdef) 文件的本地路径输出包(.cspkg 或 .zip)文件的共享访问签名 (SAS) URI。 无需存储帐户输入。
    • cmdlet 使用最少的输入创建云服务角色配置文件、网络配置文件和 OS 配置文件最小输入。
    • 要输入证书,必须指定密钥保管库名称。 密钥保管库中的证书指纹会根据你在部署的配置 (.cscfg) 文件中指定的证书进行验证。
  • 使用具有共享访问签名 URI 的角色配置文件、OS 配置文件、网络配置文件和扩展配置文件创建部署

    • 此参数集会输入包(.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 资源管理器中的只读资源。 只能通过云服务(外延支持)配置 (.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) 文件和定义 (.cscfg) 文件中定义的角色配置相匹配。

    $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