Creazione di immagini VM tramite Packer

Packer è uno strumento open source per creare immagini di macchine virtuali (VM) identiche per più piattaforme da una singola configurazione di origine. Questa pagina spiega come utilizzare Packer e Cloud Build per creare un'immagine VM da utilizzare su Compute Engine.

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono che tu abbia familiarità con Packer. Inoltre:

  • Tieni a portata di mano il codice sorgente che include il modello Packer.
  • Se vuoi utilizzare i comandi gcloud in questa pagina, installa Google Cloud CLI.
  • Abilita le seguenti API:

    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
    

Autorizzazioni IAM richieste

Per utilizzare Packer con Cloud Build, l'account di servizio Cloud Build richiede il ruolo Amministratore istanze Compute Engine. Per concedere il ruolo:

  1. Individua l'account di servizio 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. Aggiungi il ruolo Amministratore istanze Compute Engine all'account di servizio:

    gcloud projects add-iam-policy-binding $PROJECT \
      --member $CLOUD_BUILD_ACCOUNT \
      --role roles/compute.instanceAdmin
    

Creazione di un'immagine del builder Packer

Cloud Build fornisce un'immagine del builder della community Packer che puoi utilizzare per richiamare i comandi packer in Cloud Build. Prima di utilizzare questo builder in un file di configurazione di Cloud Build, devi creare l'immagine ed eseguirne il push a Container Registry nel tuo progetto:

  1. Clona il repository cloud-builders-community:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Vai all'immagine del builder di packer:

    cd cloud-builders-community/packer
    
  3. Invia il builder al progetto:

    gcloud builds submit .
    

Utilizzo di Packer Builder

  1. Assicurati di avere il file packer.json oltre al codice sorgente.

  2. Nella directory root del progetto, crea un file di configurazione della build denominato cloudbuild.yaml o cloudbuild.json.

  3. Nel file di configurazione della build, aggiungi un passaggio di build per richiamare il 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"
           ]
        }
       ]
    }
    

    Dove:

    • [PROJECT_ID] è l'ID del tuo progetto Google Cloud.
    • [IMAGE_NAME] è il nome dell'immagine VM che stai creando.
    • [IMAGE_FAMILY] è la famiglia di immagini dell'immagine VM.
    • [IMAGE_ZONE] è la zona immagine.
  4. Avvia la build utilizzando il file di configurazione della build:

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

    Dove:

    • [CONFIG_FILE_PATH] è il percorso del file di configurazione della build.
    • [SOURCE_DIRECTORY] è il percorso o l'URL del codice sorgente.
    • [REGION] è una delle regioni di build supportate.

    Se non specifichi [CONFIG_FILE_PATH] e [SOURCE_DIRECTORY] nel comando gcloud builds submit, Cloud Build presuppone che il file di configurazione e il codice sorgente si trovino nella directory di lavoro attuale.

Una volta create le immagini, puoi visualizzarle nella pagina delle immagini di Compute Engine nella console Google Cloud.

Passaggi successivi