Implantar um serviço de nuvem (suporte estendido) usando o Azure PowerShell

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

Pré-requisitos

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

  2. Instale o módulo Az.CloudService PowerShell.

    Install-Module -Name Az.CloudService 
    
  3. Criar um novo grupo de recursos. Esta etapa é opcional se estiver usando um grupo de recursos existente.

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Crie uma conta de armazenamento e um contêiner, que serão usados para armazenar os arquivos do pacote do Serviço de Nuvem (.cspkg) e da Configuração do Serviço (.cscfg). É necessário um nome exclusivo para o nome da conta de armazenamento. Esta etapa é opcional se estiver 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 um serviço de nuvem (suporte estendido)

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

  1. Serviço de nuvem de criação rápida 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 do sistema operacional são criados pelo cmdlet com o mínimo de entrada do usuário.
    • Para entrada de certificado, o nome keyvault deve ser especificado. As impressões digitais do certificado no keyvault são validadas em relação às especificadas no arquivo .cscfg.
  2. Serviço de nuvem de criação rápida usando um URI SAS

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

    • Esse conjunto de parâmetros insere os URIs SAS dos arquivos .cscfg e .cspkg.
    • A função, a rede, o SO e o perfil de extensão devem ser especificados pelo usuário e devem corresponder aos valores em .cscfg e .csdef.

Serviço de nuvem de criação rápida usando uma conta de armazenamento

Crie a 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>]

Serviço de nuvem de criação rápida usando um URI SAS

  1. Carregue seu pacote de serviço de nuvem (cspkg) para a 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 a implantação do Serviço de Nuvem usando o URI SAS .cscfg, .csdef e .cspkg.

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

Criar serviço de nuvem usando objetos de perfil & URIs SAS

  1. Carregue sua configuração de serviço de nuvem (cscfg) para a 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 pacote de serviço de nuvem (cspkg) para a 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. Crie uma rede virtual e uma sub-rede. Esta etapa é opcional se estiver usando uma rede e uma sub-rede existentes. Este exemplo usa uma única rede virtual e sub-rede para ambas as funções de 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 DNS label do endereço IP público. Os Serviços de Nuvem (suporte estendido) suportam apenas endereços IP públicos SKU básicos . Os IPs públicos de SKU padrão não funcionam com os Serviços de Nuvem. Se você estiver usando um IP estático, precisará fazer referência a ele 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 frontend do balanceador de carga. A plataforma Azure cria automaticamente um recurso de balanceador de carga SKU 'Clássico' na mesma assinatura que o recurso de serviço de nuvem. O recurso do balanceador de carga é um recurso somente leitura no Gerenciador de Recursos do Azure. Quaisquer atualizações do recurso são suportadas apenas por meio dos arquivos de implantação do serviço de nuvem (.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. Criar um Key Vault. Este Cofre de Chaves será usado para armazenar certificados associados às funções do Serviço de Nuvem (suporte estendido). O Cofre da Chave deve estar localizado na mesma região e assinatura do serviço de nuvem e ter um nome exclusivo. Para obter mais informações, consulte 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 ao Cofre da Chave e conceda permissões de certificado à sua conta de usuário.

    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 via ObjectId (que pode ser obtida executando 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 do perfil do sistema operacional. O Perfil do SO especifica os certificados, que estão associados a funções de serviço de nuvem. Este 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 Role Profile na memória. O perfil de função define propriedades específicas de uma função de sku, como nome, capacidade e camada. Neste exemplo, definimos duas funções: frontendRole e backendRole. As informações de 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 você deseja adicionar ao seu serviço de nuvem. Para este 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)} 
    

    ConfigFile deve ter apenas tags PublicConfig e deve conter um namespace da seguinte forma:

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

    $tag=@{"Owner" = "Contoso"} 
    
  13. Crie a implantação do Serviço de Nuvem usando objetos de perfil & URLs 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óximos passos