Tutorial: Criar imagens de VM do Windows com o Azure PowerShell

Aplicável a: ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis

Imagens podem ser usadas para inicializar implantações e garantir a consistência entre várias VMs. Neste tutorial, você cria uma imagem especializada de uma máquina virtual do Azure usando o PowerShell e a armazena em uma Galeria de Imagens Compartilhadas. Você aprenderá como:

  • Criar uma Galeria de Imagens Compartilhadas
  • Criar uma definição de imagem
  • Criar uma versão de imagem
  • Criar uma VM de uma imagem
  • Compartilhar uma galeria de imagens

Antes de começar

As etapas abaixo detalham como transformar uma VM existente em uma imagem personalizada reutilizável que você pode usar para criar VMs.

Para concluir o exemplo neste tutorial, você deverá ter uma máquina virtual. Se necessário, confira o Início rápido do PowerShell para criar uma VM a ser usada neste tutorial. Ao trabalhar no tutorial, substitua os nomes dos recursos se necessário.

Visão geral

Uma Galeria de Imagens Compartilhadas simplifica o compartilhamento da imagem personalizada em sua organização. Imagens personalizadas são como imagens do marketplace, mas você mesmo as cria. As imagens personalizadas podem ser usadas para configurações de inicialização como o pré-carregamento de aplicativos, configurações de aplicativos e outras configurações do sistema operacional.

A Galeria de Imagens Compartilhadas permite que você compartilhe suas imagens de VM personalizadas com outras pessoas. Escolha quais imagens você deseja compartilhar, em quais regiões deseja torná-las disponíveis e com quem deseja compartilhá-las.

O recurso Galeria de Imagens Compartilhadas tem vários tipos de recursos:

Recurso Descrição
Origem da imagem Este é um recurso que pode ser usado sozinho ou para criar uma versão da imagem em uma galeria de imagens. Uma origem de imagem pode ser uma VM do Azure existente generalizada ou especializada, uma imagem gerenciada, um instantâneo ou uma versão de imagem em outra galeria de imagens.
Galeria de imagens Como o Azure Marketplace, uma galeria de imagens é um repositório para gerenciar e compartilhar imagens, mas você controla quem tem acesso.
Definição da imagem As definições de imagem são criadas dentro de uma galeria e transportam informações sobre a imagem e os requisitos para usá-la internamente. Isso inclui se a imagem é Windows ou Linux, notas sobre a versão e requisitos mínimos e máximos de memória. É uma definição de um tipo de imagem.
Versão da imagem Uma versão da imagem é usada para criar uma VM ao usar uma galeria. Você pode ter diversas versões de uma imagem conforme necessário para seu ambiente. Como uma imagem gerenciada, quando você usa uma versão da imagem para criar uma VM, a versão da imagem é usada para criar novos discos para a VM. Versões de imagem podem ser usadas várias vezes.

Iniciar o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo grátis que pode ser usado para executar as etapas neste artigo. Ele tem ferramentas do Azure instaladas e configuradas para usar com sua conta.

Para abrir o Cloud Shell, basta selecionar Experimentar no canto superior direito de um bloco de código. Você também pode iniciar o Cloud Shell em uma guia separada do navegador indo até https://shell.azure.com/powershell. Selecione Copiar para copiar os blocos de código, cole o código no Cloud Shell e depois pressione Enter para executá-lo.

Obter a VM

Você pode ver uma lista das VMss que estão disponíveis em um grupo de recursos usando Get-AzVM. Depois que souber o nome da VM e em qual grupo de recursos ela está, você poderá usar Get-AzVM novamente para obter o objeto da VM e armazená-lo em uma variável para uso posterior. Este exemplo obtém uma VM chamada sourceVM do grupo de recursos "myResourceGroup" e a atribui à variável $sourceVM.

$sourceVM = Get-AzVM `
   -Name sourceVM `
   -ResourceGroupName myResourceGroup

Criar um grupo de recursos

Crie um grupo de recursos com o comando New-AzResourceGroup.

Um grupo de recursos do Azure é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados. No seguinte exemplo, um grupo de recursos chamado myGalleryRG é criado na região EastUS:

$resourceGroup = New-AzResourceGroup `
   -Name 'myGalleryRG' `
   -Location 'EastUS'

Uma galeria de imagens é o principal recurso usado para habilitar o compartilhamento de imagens. Os caracteres permitidos para o nome da galeria são letras maiúsculas ou minúsculas, dígitos, pontos e pontos finais. O nome da galeria não pode conter traços. Os nomes das galerias devem ser exclusivos dentro de sua assinatura.

Crie uma galeria de imagens usando New-AzGallery. O exemplo a seguir cria uma galeria chamada myGallery no grupo de recursos myGalleryRG.

$gallery = New-AzGallery `
   -GalleryName 'myGallery' `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -Description 'Shared Image Gallery for my organization'  

Criar uma definição de imagem

As definições de imagem criam um agrupamento lógico para as imagens. Elas são usadas para gerenciar informações sobre as versões da imagem que são criadas dentro delas. Os nomes das definições de imagem podem ser compostos por letras maiúsculas ou minúsculas, dígitos, pontos, traços e pontos finais. Para obter mais informações sobre os valores que pode especificar para uma definição de imagem, confira Definições de imagem.

Crie a definição de imagem usando New-AzGalleryImageDefinition. Neste exemplo, a imagem da galeria se chama myGalleryImage e foi criada para uma imagem especializada.

$galleryImage = New-AzGalleryImageDefinition `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $gallery.Location `
   -Name 'myImageDefinition' `
   -OsState specialized `
   -OsType Windows `
   -Publisher 'myPublisher' `
   -Offer 'myOffer' `
   -Sku 'mySKU'

Criar uma versão de imagem

Crie uma versão da imagem com base em uma VM usando New-AzGalleryImageVersion.

Caracteres permitidos para a versão da imagem são números e pontos. Os números devem estar dentro do intervalo de um inteiro de 32 bits. Formato: MajorVersion.MinorVersion.Patch.

Neste exemplo, a versão da imagem é 1.0.0 e ela é replicada para os datacenters Leste dos EUA e Centro-Sul dos EUA. Ao escolher as regiões de destino da replicação, você precisa incluir a região de origem como um destino para a replicação.

Para criar uma versão da imagem da VM, use $vm.Id.ToString() para o -Source.

   $region1 = @{Name='South Central US';ReplicaCount=1}
   $region2 = @{Name='East US';ReplicaCount=2}
   $targetRegions = @($region1,$region2)

New-AzGalleryImageVersion `
   -GalleryImageDefinitionName $galleryImage.Name`
   -GalleryImageVersionName '1.0.0' `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -TargetRegion $targetRegions  `
   -Source $sourceVM.Id.ToString() `
   -PublishingProfileEndOfLifeDate '2020-12-01'

Pode levar algum tempo para replicar a imagem para todas as regiões de destino.

Criar uma máquina virtual

Agora que tem uma imagem especializada, você pode criar uma ou mais VMs. Usando o cmdlet New-AzVM. Para usar a imagem, use Set-AzVMSourceImage e defina o -Id como a ID da definição de imagem ($galleryImage.ID, nesse caso) para sempre usar a versão mais recente da imagem.

Substitua os nomes dos recursos conforme necessário no exemplo.

# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "mySpecializedVM"

# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location

# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup -Location $location `
  -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Allow
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name $vmName -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration using $imageVersion.Id to specify the image version.
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $galleryImage.Id | `
Add-AzVMNetworkInterface -Id $nic.Id

# Create a virtual machine
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

Recomendamos que você compartilhe o acesso no nível da galeria de imagens. Use um endereço de email e o cmdlet Get-AzADUser para obter a ID do objeto do usuário e, em seguida, use New-AzRoleAssignment para conceder a ele acesso à galeria. Substitua o email de exemplo, alinne_montes@contoso.com neste exemplo, por suas informações.

# Get the object ID for the user
$user = Get-AzADUser -StartsWith alinne_montes@contoso.com
# Grant access to the user for our gallery
New-AzRoleAssignment `
   -ObjectId $user.Id `
   -RoleDefinitionName Reader `
   -ResourceName $gallery.Name `
   -ResourceType Microsoft.Compute/galleries `
   -ResourceGroupName $resourceGroup.ResourceGroupName

Limpar os recursos

Quando não forem mais necessários, você poderá usar o cmdlet Remove-AzResourceGroup para remover o grupo de recursos e todos os recursos relacionados:

# Delete the gallery 
Remove-AzResourceGroup -Name myGalleryRG

# Delete the VM
Remove-AzResourceGroup -Name myResoureceGroup

Construtor de Imagens do Azure

O Azure também oferece um serviço integrado ao Packer, o Construtor de Imagens de VM do Azure. Basta descrever suas personalizações em um modelo e ele cuidará da criação da imagem.

Próximas etapas

Neste tutorial, você criou uma imagem de VM especializada. Você aprendeu a:

  • Criar uma Galeria de Imagens Compartilhadas
  • Criar uma definição de imagem
  • Criar uma versão de imagem
  • Criar uma VM de uma imagem
  • Compartilhar uma galeria de imagens

Avance para o próximo tutorial para aprender como criar máquinas virtuais altamente disponíveis.