Como criar imagens de VM usando o Packer

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. Se você não estiver familiarizado com o Cloud Build, leia os guias de início rápido e a visão geral da configuração do Build primeiro.

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 de gcloud nesta página, instale a ferramenta de linha de comando gcloud.
  • 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, a conta de serviço do Cloud Build requer o papel de editor. Para conceder o papel de editor:

  1. Localize a conta de serviço do Cloud Build:

    CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT --filter="(bindings.role:roles/cloudbuild.builds.builder)"  --flatten="bindings[].members" --format="value(bindings.members[])")
    
  2. Adicione o papel de editor à conta:

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/editor
    

Como criar uma imagem do builder do Packer

O Cloud Build oferece uma imagem do builder da comunidade do Packer que pode ser usada 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:

  1. Clone o repositório cloud-builders-community:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Acesse a imagem do criador do Packer:

    cd cloud-builders-community/packer
    
  3. Envie o builder para seu projeto:

    gcloud builds submit .
    

Como usar o builder do Packer

  1. No diretório raiz do projeto, crie um arquivo de configuração da compilação com o nome cloudbuild.yaml ou cloudbuild.json.

  2. 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] é seu código do projeto do 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.
  3. Inicie a criação usando o arquivo de configuração de build:

    gcloud builds submit --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.

    Se você não especificar [CONFIG_FILE_PATH] e [SOURCE_DIRECTORY] no comando gcloud 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 Cloud.

A seguir