Criar imagens de VMs com o Packer

O Packer é uma ferramenta de código aberto para criar imagens de máquinas virtuais (VMs) idênticas para várias plataformas a partir de uma configuração de origem única. Esta página explica como usar o Packer e o Cloud Build para criar uma imagem de VM para utilização no Compute Engine.

Antes de começar

As instruções nesta página pressupõem que conhece o Packer. Além disso:

  • Tenha o código-fonte, incluindo o modelo do Packer, à mão.
  • Se quiser usar os comandos gcloud nesta página, instale a CLI do Google Cloud.
  • Ative as seguintes APIs:

    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
    

Autorizações de IAM necessárias

Criar uma imagem do criador do Packer

O Cloud Build fornece uma imagem do criador da comunidade do Packer que pode usar para invocar comandos packer no Cloud Build. Antes de usar este criador num ficheiro de configuração do Cloud Build, tem de criar a imagem e enviá-la para o Artifact Registry:

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

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

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

    gcloud builds submit .
    

Usar o criador do Packer

  1. Certifique-se de que tem o ficheiro packer.json juntamente com o código fonte.

  2. No diretório raiz do projeto, crie um ficheiro de configuração de compilação denominado cloudbuild.yaml ou cloudbuild.json.

  3. No ficheiro de configuração da compilação, adicione um passo de compilação 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"
           ]
        }
       ]
    }
    

    Onde:

    • [PROJECT_ID] é o ID do seu Google Cloud projeto.
    • [IMAGE_NAME] é o nome da imagem da VM que está a criar.
    • [IMAGE_FAMILY] é a família de imagens da imagem da VM.
    • [IMAGE_ZONE] é a zona da imagem.
  4. Inicie a compilação com o ficheiro de configuração de compilação:

    gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
    

    Onde:

    • [CONFIG_FILE_PATH] é o caminho para o ficheiro de configuração de compilação.
    • [SOURCE_DIRECTORY] é o caminho ou o URL para o código-fonte.
    • [REGION] é uma das regiões de compilação suportadas.

    Se não especificar um [CONFIG_FILE_PATH] e um [SOURCE_DIRECTORY] no comando gcloud builds submit, o Cloud Build assume que o ficheiro de configuração e o código fonte estão no diretório de trabalho atual.

Depois de criadas, pode ver as imagens na página de imagens do Compute Engine na Google Cloud consola.

O que se segue?