A mídia de instalação de aplicativos do Windows geralmente é fornecida como um arquivo ISO. No entanto, o Compute Engine não permite expor um arquivo ISO como uma unidade de DVD virtual para uma instância de VM.
Para acessar o conteúdo do arquivo ISO em uma única VM do Windows, siga um destes procedimentos:
Copie o arquivo ISO para a VM e ative-o localmente. Essa abordagem funciona bem se você só precisar acessar o conteúdo do arquivo ISO em uma única instância de VM.
Crie um disco permanente no arquivo ISO e conecte o disco no modo somente leitura a uma ou mais instâncias de VM. Essa abordagem funciona bem se várias VMs precisarem acessar o conteúdo do arquivo ISO.
Neste documento, você verá como criar um disco permanente no arquivo ISO e anexar o disco no modo somente leitura a uma ou mais VMs.
Antes de começar
- Para usar os exemplos de linha de comando deste guia, faça o seguinte:
- Instale ou atualize para a versão mais recente da Google Cloud CLI.
- Defina uma região e uma zona padrão.
Preparar o arquivo ISO
Se o arquivo ISO estiver disponível publicamente via HTTP, você não precisará fazer o download do arquivo ISO primeiro. Para usar um arquivo ISO local, faça upload do arquivo ISO para o Cloud Storage.
URL HTTP
No Console do Google Cloud Platform, abra o Cloud Shell clicando no botão Ativar o Cloud Shell .
Crie uma variável de ambiente para o URL de download. O URL pode ser um URL HTTP ou HTTPS, mas precisa ser acessado anonimamente.
ISO_URL=https://example.com/big.iso
Arquivo ISO local
No Console do Google Cloud, crie um bucket do Cloud Storage.
Faça o upload do arquivo ISO usando o Console do Google Cloud ou o
gsutil
.Dependendo do tamanho do arquivo ISO, o upload pode levar vários minutos ou horas.
No navegador do Storage, navegue até o objeto enviado.
Na página Detalhes do objeto, copie o URI do objeto. O URI começa com
gs://
.Abra o Cloud Shell clicando no botão Ativar o Cloud Shell .
Crie uma variável de ambiente para o URL de download. Substitua
URI
pelo URI que você copiou.ISO_URL=URI
Criar um disco com o conteúdo do arquivo ISO
Para copiar o conteúdo do arquivo ISO para um novo disco, crie uma VM temporária e crie uma imagem do disco:
No Cloud Shell, especifique o nome que você quer atribuir ao novo disco:
DISK_NAME=iso
Crie um novo disco para copiar o conteúdo dos arquivos ISO:
gcloud compute disks create $DISK_NAME \ --size=10GB \ --zone=$(gcloud config get-value compute/zone)
Use um tamanho de disco maior se o arquivo ISO exceder 9 GB.
Crie um script de inicialização para a VM temporária. O script de inicialização executa as seguintes ações:
- Formate o disco secundário com o sistema de arquivos NTFS.
- Faça o download do arquivo ISO do URL HTTP ou do Cloud Storage especificado.
- Ative o arquivo ISO e copie o conteúdo dele para o disco secundário.
cat << "EOF" > startup.ps1 $DownloadDirectory = 'c:\download\' $ErrorActionPreference = 'Stop' $MetadataUrl = 'http://metadata.google.internal/computeMetadata/v1/instance' $DownloadUrl = (Invoke-RestMethod ` -Headers @{"Metadata-Flavor" = "Google"} ` -Uri "$MetadataUrl/attributes/iso") mkdir $DownloadDirectory\Source -Force Write-Host '== Formatting secondary disk... ===' -ForegroundColor Black -BackgroundColor Yellow Set-Disk -Number 1 -IsOffline $false Clear-Disk -Number 1 -RemoveData -Confirm:$false -ErrorAction SilentlyContinue Initialize-Disk -Number 1 -PartitionStyle MBR New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D -IsActive | Format-Volume -FileSystem 'NTFS' -Confirm:$false Write-Host '== Downloading ISO... =============' -ForegroundColor Black -BackgroundColor Yellow if ($DownloadUrl.StartsWith('gs:')) { & gsutil cp $DownloadUrl "$DownloadDirectory\Source\image.iso" | Out-Default } else { Import-Module BitsTransfer Start-BitsTransfer -Source $DownloadUrl -Destination "$DownloadDirectory\Source\image.iso" } Write-Host '== Mounting ISO... ================' -ForegroundColor Black -BackgroundColor Yellow Mount-DiskImage -ImagePath "$DownloadDirectory\Source\image.iso" -StorageType ISO Write-Host '== Copying ISO contents... ========' -ForegroundColor Black -BackgroundColor Yellow Copy-Item 'e:\*' 'd:\' -Force -Recurse -PassThru ` | Where-Object { -Not $_.PSIsContainer } ` | Set-ItemProperty -Name IsReadOnly -Value $False Write-Host '== Completed. =====================' -ForegroundColor Black -BackgroundColor Yellow Invoke-RestMethod ` -Headers @{'Metadata-Flavor'='Google'} ` -Method PUT ` -Uri "$MetadataUrl/guest-attributes/vm/ready" ` -Body true EOF
Crie uma VM que execute o Windows Server 2019 Core e conecte o disco secundário:
gcloud compute instances create iso-copier \ --machine-type=n1-standard-2 \ --image-family=windows-2019-core \ --image-project=windows-cloud \ --disk=name=$DISK_NAME,auto-delete=no \ --metadata=enable-guest-attributes=true,iso=$ISO_URL \ --metadata-from-file=windows-startup-script-ps1=startup.ps1 \ --scopes=https://www.googleapis.com/auth/devstorage.read_only
A VM leva cerca de dois minutos para ser iniciada. Dependendo do tamanho do arquivo ISO, pode levar de cinco a 15 minutos para que a operação de cópia de arquivos seja concluída. Para observar o progresso, execute o seguinte comando:
gcloud compute instances tail-serial-port-output iso-copier \ --zone=$(gcloud config get-value compute/zone)
Aguarde até que a VM termine de executar o script de inicialização:
until gcloud compute instances get-guest-attributes iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --query-path=vm/ready > /dev/null 2>&1 do sleep 5 && echo waiting for VM to finish... done
Encerre e exclua a VM:
gcloud compute instances delete iso-copier \ --zone=$(gcloud config get-value compute/zone) \ --quiet
O disco secundário não foi excluído porque foi ativado com o parâmetro
auto-delete=no
.
O disco está pronto para ser usado. É possível conectar o disco no modo somente leitura a uma ou mais instâncias de VM na mesma zona.
Criar uma imagem para compartilhar o disco entre zonas e regiões
Para disponibilizar o conteúdo do arquivo ISO em outras zonas ou regiões, crie uma imagem do Compute Engine:
No Cloud Shell, crie uma imagem do disco criado na seção anterior:
gcloud compute images create $DISK_NAME \ --source-disk=$DISK_NAME \ --source-disk-zone=$(gcloud config get-value compute/zone)
Limpar
Para evitar outros custos depois de concluir esse processo, exclua os recursos criados:
Exclua o disco:
gcloud compute disks delete $DISK_NAME \ --zone=$(gcloud config get-value compute/zone) \ --quiet
Exclua a imagem:
gcloud compute images delete $DISK_NAME
A seguir
Entenda como criar, excluir e suspender o uso de imagens personalizadas.
Aprenda a gerenciar o acesso a imagens personalizadas.
Saiba mais sobre cargas de trabalho do Windows no Compute Engine.