Créer des images de VM à l'aide de Packer

Packer est un outil Open Source permettant de créer des images de machines virtuelles (VM) identiques pour plusieurs plates-formes à partir d'une même configuration source. Cette page explique comment utiliser Packer et Cloud Build pour créer une image de VM à utiliser sur Compute Engine.

Avant de commencer

Les instructions de cette page partent du principe que vous connaissez bien Packer. Notez en outre les points suivants :

  • Gardez à portée de main votre code source, y compris le modèle Packer.
  • Si vous souhaitez exécuter les commandes gcloud de cette page, installez la Google Cloud CLI.
  • Activez les API suivantes :

    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
    

Autorisations IAM requises

Pour utiliser Packer avec Cloud Build, le compte de service Cloud Build nécessite le rôle Administrateur d'instances Compute Engine. Pour accorder le rôle , procédez comme suit :

  1. Recherchez le compte de service 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. Ajoutez le rôle "Administrateur d'instances Compute Engine" au compte de service:

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

Créer une image à l'aide du compilateur Packer

Cloud Build fournit une image de compilateur Packer générée par la communauté que vous pouvez utiliser pour appeler des commandes packer dans Cloud Build. Avant d'utiliser ce compilateur dans un fichier de configuration Cloud Build, vous devez générer l'image et l'importer dans le dépôt Container Registry de votre projet :

  1. Clonez le dépôt cloud-builders-community :

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Accédez à l'image du compilateur Packer :

    cd cloud-builders-community/packer
    
  3. Envoyez la compilation à votre projet :

    gcloud builds submit .
    

Utiliser le compilateur Packer

  1. Assurez-vous de disposer de votre fichier packer.json avec votre code source.

  2. Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation nommé cloudbuild.yaml ou cloudbuild.json.

  3. Dans ce fichier de configuration, ajoutez une étape de compilation pour appeler la commande 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"
           ]
        }
       ]
    }
    

    Où :

    • [PROJECT_ID] correspond à votre ID de projet Google Cloud.
    • [IMAGE_NAME] est le nom de l'image de VM que vous créez.
    • [IMAGE_FAMILY] correspond à la famille d'images de l'image de VM.
    • [IMAGE_ZONE] correspond à la zone de l'image.
  4. Lancez la compilation à l'aide du fichier de configuration de compilation :

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

    Où :

    • [CONFIG_FILE_PATH] est le chemin d'accès du fichier de configuration de compilation
    • [SOURCE_DIRECTORY] est le chemin d'accès ou l'URL du code source.
    • [REGION] est l'une des régions de compilation compatibles.

    Si vous ne spécifiez pas les éléments [CONFIG_FILE_PATH] et [SOURCE_DIRECTORY] dans la commande gcloud builds submit, Cloud Build considère que le fichier de configuration et le code source se trouvent dans le répertoire de travail actuel.

Une fois les images créées, vous pouvez les afficher sur la page Image Compute Engine de la console Google Cloud.

Étapes suivantes