Implantar um Serviço de Nuvem (suporte estendido) usando o Azure PowerShell

Este artigo mostra como usar o módulo Az.CloudService do PowerShell para implantar os Serviços de Nuvem (suporte estendido) no Azure que têm várias funções (WebRole e WorkerRole).

Pré-requisitos

  1. Examine os pré-requisitos de implantação dos Serviços de Nuvem (suporte estendido) e crie os recursos associados.

  2. Instalar o módulo Az.CloudService do PowerShell.

    Install-Module -Name Az.CloudService 
    
  3. Criar um grupo de recursos. Essa etapa é opcional se você está usando um grupo de recursos existente.

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Criar uma conta de armazenamento e um contêiner, que serão usados para armazenar o pacote do Serviço de Nuvem (.cspkg) e os arquivos de configuração de serviço (.cscfg). É necessário usar um nome exclusivo para a conta de armazenamento. Essa etapa é opcional se você está usando uma conta de armazenamento existente.

    $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 
    

Implantar Serviços de Nuvem (suporte estendido)

Use um dos seguintes cmdlets do PowerShell para implantar os Serviços de Nuvem (suporte estendido):

  1. Criação rápida de um serviço de nuvem usando uma conta de armazenamento

    • Esse conjunto de parâmetros insere os arquivos .cscfg, .cspkg e .csdef como entradas junto com a conta de armazenamento.
    • O perfil de função do serviço de nuvem, o perfil de rede e o perfil de sistema operacional são criados pelo cmdlet com a entrada mínima do usuário.
    • Para a entrada do certificado, o nome do cofre de chaves deve ser especificado. As impressões digitais do certificado no cofre de chaves são validadas em relação às especificadas no arquivo .cscfg.
  2. Criação rápida de um serviço de nuvem usando um URI de SAS

    • Esse conjunto de parâmetros insere o URI de SAS do .cspkg junto com os caminhos locais dos arquivos .csdef e .cscfg. Não é necessário fornecer nenhuma entrada da conta de armazenamento.
    • O perfil de função do serviço de nuvem, o perfil de rede e o perfil de sistema operacional são criados pelo cmdlet com a entrada mínima do usuário.
    • Para a entrada do certificado, o nome do cofre de chaves deve ser especificado. As impressões digitais do certificado no cofre de chaves são validadas em relação às especificadas no arquivo .cscfg.
  3. Criar um serviço de nuvem com um perfil de função, de sistema operacional, de rede e de extensão e URIs de SAS

    • Esse conjunto de parâmetros insere os URIs de SAS dos arquivos .cscfg e .cspkg.
    • O perfil de função, de rede, de sistema operacional e de extensão precisam ser especificados pelo usuário e corresponder aos valores indicados no .cscfg e no .csdef.

Criação rápida de um serviço de nuvem usando uma conta de armazenamento

Crie uma implantação do serviço de nuvem usando arquivos .cscfg, .csdef e .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>]

Criação rápida de um serviço de nuvem usando um URI de SAS

  1. Carregue seu arquivo do pacote do Serviço de Nuvem (.cspkg) na conta de armazenamento.

    $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. Crie uma implantação de serviço de nuvem usando o URI de SAS do .cscfg, do .csdef e do .cspkg.

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

Criar um serviço de nuvem usando objetos de perfil e URIs de SAS

  1. Carregue a configuração do Serviço de Nuvem (cscfg) na conta de armazenamento.

    $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. Carregue seu arquivo do pacote do Serviço de Nuvem (.cspkg) na conta de armazenamento.

    $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. Criar uma rede virtual e sub-rede. Essa etapa é opcional se você está usando uma rede e uma sub-rede existentes. Este exemplo usa apenas uma rede virtual e sub-rede para as duas funções do serviço de nuvem (WebRole e 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. Crie um endereço IP público e defina a propriedade rótulo DNS do endereço IP público. Os Serviços de Nuvem (suporte estendido) só dão suporte a endereços IP públicos do SKU Básico. Os IPs públicos do SKU Standard não funcionam com os Serviços de Nuvem. Se estiver usando um IP estático, precisará referenciá-lo como um IP Reservado no arquivo de configuração de serviço (.cscfg).

    $publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic 
    
  5. Crie um objeto de perfil de rede e associe o endereço IP público ao front-end do balanceador de carga. A plataforma Azure cria automaticamente um recurso de balanceador de carga de SKU 'clássico' na mesma assinatura que o recurso de serviço de nuvem. O recurso de balanceador de carga é um recurso somente leitura do Azure Resource Manager. Só há suporte para atualizações do recurso por meio dos arquivos de implantação do serviço de nuvem (.cscfg e .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. Criar um Cofre de Chaves. Esse Key Vault será usado para armazenar certificados associados às funções do Serviço de Nuvem (suporte estendido). O Key Vault precisa estar localizado na mesma região e assinatura que o Serviço de Nuvem e ter um nome exclusivo. Para obter mais informações, confira Usar certificados com os Serviços de Nuvem do Azure (suporte estendido).

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. Atualize a política de acesso para o Key Vault e conceda à sua conta de usuário permissões para o certificado.

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

    Como alternativa, defina a política de acesso por meio da ObjectId (que pode ser obtida com a execução de Get-AzADUser).

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. Neste exemplo, adicionaremos um certificado autoassinado a um cofre de chaves. A impressão digital do certificado precisa ser adicionada no arquivo de configuração do Serviço de Nuvem (.cscfg) para implantação em funções de serviço de nuvem.

    $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. Crie um objeto na memória de Perfil de SO. O Perfil de SO especifica os certificados que estão associados às funções de serviço de nuvem. Esse será o mesmo certificado criado na etapa anterior.

    $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. Crie um objeto na memória de Perfil de função. O perfil de função define as propriedades específicas do SKU de uma função, como nome, capacidade e camada. Neste exemplo, definimos duas funções: frontendRole e backendRole. As informações do perfil de função devem corresponder à configuração de função definida no arquivo de configuração (cscfg) e no arquivo de definição de serviço (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. (Opcional) Crie um objeto na memória do Perfil de Extensão que deseja adicionar ao serviço de nuvem. Neste exemplo, adicionaremos a extensão 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)} 
    

    O ConfigFile só deve ter marcas PublicConfig e deve conter um namespace, da seguinte maneira:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (Opcional) Defina marcas como a tabela de hash do PowerShell que deseja adicionar ao serviço de nuvem.

    $tag=@{"Owner" = "Contoso"} 
    
  13. Criar implantação de Serviço de Nuvem usando objetos de perfil e URLs de SAS.

    $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 
    

Próximas etapas