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

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

Pré-requisitos

Conclua as etapas a seguir como pré-requisitos para criar sua implantação usando o Azure PowerShell.

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

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

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

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Crie uma conta de armazenamento e um contêiner no Azure para armazenar o arquivo de pacote (.cspkg ou .zip) e o arquivo de configuração (.cscfg) para a implantação dos Serviços de Nuvem (suporte estendido). Você deve usar um nome exclusivo para o nome da conta de armazenamento. Esta etapa é opcional se você usar 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)

Para implantar os Serviços de Nuvem (suporte estendido), use qualquer uma das seguintes opções de cmdlet do PowerShell:

  • Criar rapidamente uma implantação usando uma conta de armazenamento

    • Esse conjunto de parâmetros insere o arquivo de pacote (.cspkg ou .zip), o arquivo de configuração (.cscfg) e o arquivo de definição (.csdef) para a implantação como entradas com a conta de armazenamento.
    • O cmdlet cria o perfil de função Serviços de Nuvem (suporte estendido), o perfil de rede e o perfil do sistema operacional com entrada mínima.
    • Para inserir um certificado, você deve especificar um nome de cofre de chaves. As impressões digitais do certificado no cofre de chaves são validadas em relação aos certificados especificados no arquivo de configuração (.cscfg) para a implantação.
  • Criar rapidamente uma implantação usando um URI de assinatura de acesso compartilhado

    • Esse conjunto de parâmetros insere o URI de assinatura de acesso compartilhado (SAS) do arquivo de pacote (.cspkg ou .zip) com os caminhos locais para o arquivo de configuração (.cscfg) e o arquivo de definição (.csdef). Nenhuma entrada de conta de armazenamento é necessária.
    • O cmdlet cria o perfil de função de serviço de nuvem, o perfil de rede e a entrada mínima do perfil do sistema operacional.
    • Para inserir um certificado, você deve especificar um nome de cofre de chaves. As impressões digitais do certificado no cofre de chaves são validadas em relação aos certificados especificados no arquivo de configuração (.cscfg) para a implantação.
  • Criar uma implantação usando um perfil de função, perfil de sistema operacional, perfil de rede e perfil de extensão com URIs de assinatura de acesso compartilhado

    • Esse conjunto de parâmetros insere os URIs SAS do arquivo de pacote (.cspkg ou .zip) e do arquivo de configuração (.cscfg).
    • Você deve especificar objetos de perfil: perfil de função, perfil de rede, perfil do sistema operacional e perfil de extensão. Os perfis devem corresponder aos valores definidos no arquivo de configuração (.cscfg) e no arquivo de definição (.csdef).

Criar rapidamente uma implantação usando uma conta de armazenamento

Crie uma implantação de Serviços de Nuvem (suporte estendido) usando o arquivo de pacote (.cspkg ou .zip), o arquivo de configuração (.cscfg) e os arquivos de definição (.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>]

Criar rapidamente uma implantação usando um URI SAS

  1. Carregue o arquivo do pacote (.cspkg ou .zip) para a implantação 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 a implantação dos Serviços de Nuvem (suporte estendido) usando o arquivo de pacote (.cspkg ou .zip), o arquivo de configuração (.cscfg) e o arquivo de definição (.csdef) URI SAS:

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

Criar uma implantação usando objetos de perfil e URIs SAS

  1. Carregue seu arquivo de configuração (.cscfg) dos Serviços de Nuvem (suporte estendido) 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 arquivo de pacote de Serviços de Nuvem (suporte estendido) (.cspkg ou .zip) 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 você usar uma rede e uma sub-rede existentes. Este exemplo usa uma única rede virtual e sub-rede para ambas as funções de Serviços de Nuvem (suporte estendido) (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 um valor de rótulo DNS para o endereço IP público. Os Serviços de Nuvem (suporte estendido) suportam apenas um endereço IP público de SKU Básico . Os endereços IP públicos SKU padrão não funcionam com os Serviços de Nuvem (suporte estendido).

    Se você usar um endereço IP estático, deverá fazer referência a ele como um endereço IP reservado no arquivo de configuração (.cscfg) para a implantação.

    $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 SKU clássico na mesma assinatura que o recurso Serviços de Nuvem (suporte estendido). O balanceador de carga é um recurso somente leitura no Gerenciador de Recursos do Azure. Você pode atualizar recursos somente por meio do arquivo de configuração (.cscfg) e do arquivo de implantação (.csdef) dos Serviços de Nuvem (suporte estendido).

    $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. O cofre de chaves armazena certificados associados a funções de Serviços de Nuvem (suporte estendido). O cofre de chaves deve estar na mesma região e assinatura que a implantação dos Serviços de Nuvem (suporte estendido) e ter um nome exclusivo. Para obter mais informações, consulte Usar certificados com serviços de nuvem (suporte estendido).

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. Atualize a política de acesso ao cofre de chaves 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 usando o ObjectId valor. Para obter o ObjectId valor, execute Get-AzADUser:

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. O exemplo a seguir adiciona um certificado autoassinado a um cofre de chaves. Você deve adicionar a impressão digital do certificado por meio do arquivo de configuração (.cscfg) para funções de Serviços de Nuvem (suporte estendido).

    $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. Um perfil de sistema operacional especifica os certificados associados às funções de Serviços de Nuvem (suporte estendido), que é o certificado que você criou 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 de perfil de função na memória. Um perfil de função define as propriedades específicas de SKU de uma função, como nome, capacidade e camada. Neste exemplo, duas funções são definidas: frontendRole e backendRole. As informações de perfil de função devem corresponder à configuração de função definida no arquivo de configuração de implantação (.cscfg) e no arquivo de definiçã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 de perfil de extensão na memória para adicionar à sua implantação de Serviços de Nuvem (suporte estendido). Este exemplo adiciona uma extensão RDP (Remote Desktop Protocol):

    $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 arquivo de configuração (.cscfg) deve ter apenas PublicConfig tags e deve conter um namespace, conforme mostrado no exemplo a seguir:

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (Opcional) Em uma tabela de hash do PowerShell, você pode definir tags para adicionar à sua implantação:

    $tag=@{"Owner" = "Contoso"} 
    
  13. Crie a implantação dos Serviços de Nuvem (suporte estendido) usando os objetos de perfil e URIs SAS que você definiu:

    $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