O Packer é uma ferramenta de código aberto para criar imagens de máquinas virtuais (VMs, na sigla em inglês) idênticas para várias plataformas a partir de uma única configuração de origem. Nesta página, explicamos como usar o Packer e o Cloud Build para criar uma imagem de VM para uso no Compute Engine.
Antes de começar
Nas instruções desta página, pressupomos que você está familiarizado com Packer
. Além disso:
- Tenha em mãos seu código-fonte, incluindo o modelo do Packer.
- Se você quiser usar os comandos
gcloud
nesta página, instale a CLI do Google Cloud. Ative as APIs a seguir:
gcloud services enable sourcerepo.googleapis.com gcloud services enable compute.googleapis.com gcloud services enable servicemanagement.googleapis.com gcloud services enable storage-api.googleapis.com
Permissões do IAM obrigatórias
Para usar o Packer com o Cloud Build, conceda o papel de administrador de instância do Compute Engine (
roles/compute.instanceAdmin.v1
) à sua conta de serviço de build.Para armazenar imagens criadas no Artifact Registry, conceda o papel Gravador do Artifact Registry (
roles/artifactregistry.writer
) à conta de serviço de build.
Como criar uma imagem do builder do Packer
O Cloud Build oferece
Imagem do builder da comunidade do Packer
que podem ser usados para invocar comandos packer
no Cloud Build.
Antes de usar esse builder em um arquivo de configuração do Cloud Build, é necessário criar a imagem e enviá-la para o Container Registry no seu projeto:
Clone o repositório cloud-builders-community:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Acesse a imagem do criador do Packer:
cd cloud-builders-community/packer
Envie o builder para seu projeto:
gcloud builds submit .
Como usar o builder do Packer
Verifique se o arquivo packer.json está junto com o código-fonte.
No diretório raiz do projeto, crie um arquivo de configuração da compilação com o nome
cloudbuild.yaml
oucloudbuild.json
.No arquivo de configuração de build, adicione uma etapa de build para invocar o comando
packer build
:YAML
steps: - name: 'gcr.io/[PROJECT_ID]/packer' args: - build - -var - image_name=[IMAGE_NAME] - -var - project_id=[PROJECT_ID] - -var - image_family=[IMAGE_FAMILY] - -var - image_zone=[IMAGE_ZONE] - packer.json
JSON
{ "steps": [ { "name": "gcr.io/[PROJECT_ID]/packer", "args": [ "build", "-var", "image_name=[IMAGE_NAME]", "-var", "project_id=[PROJECT_ID]", "-var", "image_family=[IMAGE_FAMILY]", "-var", "image_zone=[IMAGE_ZONE]", "packer.json" ] } ] }
Em que:
[PROJECT_ID]
é o ID do projeto no Google Cloud.[IMAGE_NAME]
é o nome da imagem de VM que você está criando.[IMAGE_FAMILY]
é a família de imagens da imagem da VM.[IMAGE_ZONE]
é a zona de imagem.
Inicie a criação usando o arquivo de configuração de build:
gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
Em que:
[CONFIG_FILE_PATH]
é o caminho para o arquivo de configuração da compilação;[SOURCE_DIRECTORY]
é o caminho ou o URL do código-fonte.[REGION]
é uma das regiões de build com suporte.
Se você não especificar
[CONFIG_FILE_PATH]
e[SOURCE_DIRECTORY]
no comandogcloud builds submit
, o Cloud Build presumirá que o arquivo de configuração e o código-fonte estão no diretório de trabalho atual.
Depois que as imagens forem criadas, será possível visualizá-las na página "Imagem do Compute Engine" no console do Google Cloud.
A seguir
- Saiba como criar contêineres.
- Saiba como criar projetos
Go
. - Saiba como resolver erros de build.