Démarrage rapide pour Packer

Cette page explique comment utiliser Packer et Cloud Build pour créer une image de VM à utiliser sur Google Compute Engine. Vous allez créer une configuration de compilation en définissant des instructions pour Packer et Cloud Build. Vous utiliserez ensuite la configuration pour démarrer une compilation.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en avez pas encore, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activez l'API Cloud Build.

    Activez l'API

  5. Installez et initialisez le SDK Cloud.

Se connecter à Google Cloud Platform

  1. Autorisez l'outil de ligne de commande gcloud à accéder au projet :

    gcloud auth login
    
  2. Configurez votre projet pour l'outil gcloud :

    gcloud config set project [PROJECT_ID]
    

    [PROJECT_ID] est l'ID de votre projet GCP que vous avez créé ou sélectionné dans la section précédente.

Configurer votre projet

  1. Effectuez l'une des actions suivantes :

    • Si vous n'avez pas encore créé de configuration, consultez gcloud topic configurations.

    • Si vous avez déjà créé une configuration, activez-la :

      gcloud config configurations activate [CONFIGURATION NAME]

  2. Définissez la variable de projet :

    PROJECT=$(gcloud config get-value project)
    

    Une fois la variable de projet définie, la commande renvoie le résultat suivant :

    Your active configuration is: [<your-config-name>]
    
  3. Vérifiez que la variable de projet est correctement définie :

    echo $PROJECT
    

Activer les services

Activez les services d'API Cloud requis pour votre projet :

gcloud services enable sourcerepo.googleapis.com
gcloud services enable cloudapis.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable storage-api.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Définir des autorisations

  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 d'éditeur au compte :

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

    Vous pouvez consulter le rapport mis à jour sur la stratégie IAM pour votre projet.

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

Clonez le dépôt cloud-builders-community pour créer une image à l'aide du compilateur d'images Packer. Transmettez ensuite l'image vers le dépôt de conteneurs :

  1. Enregistrez votre répertoire de travail :

    project_dir=$(pwd)
    
  2. Accédez à votre répertoire temporaire :

    cd /tmp
    
  3. Clonez le dépôt cloud-builders-community :

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

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

    gcloud builds submit .
    

    Une fois la compilation terminée, un résultat semblable au suivant s'affiche :

    DONE
    --------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES                                       STATUS
    e3d89cdd-924c-4539-bc9d-2c87e0e910e5  2019-06-14T19:06:44+00:00  1M11S     gs://[PROJECT_ID]_cloudbuild/source/1560539203.19-1d492a75515340f1bc92c0a8a6937308.tgz  gcr.io/[PROJECT_ID]/packer (+2 more)  SUCCESS
    

    Vous pouvez également afficher la compilation sur la page Cloud Build de la console Google Cloud Platform.

    Ouvrir la page Cloud Build

    La page Build history (Historique de compilation) contient les détails de votre compilation :

    Capture d'écran de l'image de compilation Packer

  6. Supprimez le dépôt de votre répertoire temporaire :

    rm -rf /tmp/cloud-builders-community
    
  7. Revenez à $project_dir :

    cd $project_dir
    

Préparer les fichiers source

Vous aurez besoin d'un exemple de code source pour compiler. Dans cette section, vous allez créer un exemple "Hello World" simple à l'aide du compilateur Packer.

  1. Créez un répertoire appelé hello-world et accédez-y :

    mkdir hello-world
    cd hello-world
    
  2. Créez un fichier nommé cloudbuild.yaml avec le contenu suivant :

    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
    
  3. Créez un fichier nommé install-website.sh avec le contenu suivant :

    #!/bin/sh
    sudo yum install -y epel-release
    sudo yum install -y nginx
    sudo chkconfig nginx on
    LOCATION_OF_INDEX=/usr/share/nginx/html/index.html
    sudo bash -c "cat <<A_VERY_SPECIAL_MESSAGE>$LOCATION_OF_INDEX
    <html>
    <h2> Hello World! </h2>
    </html>
    
    A_VERY_SPECIAL_MESSAGE
    "
    
  4. Créez un fichier nommé packer.json avec le contenu suivant :

    {
        "variables": {
            "image_name": "",
            "image_family": "",
            "image_zone": "",
            "project_id": ""
        },
    
        "builders": [
            {
                "image_name": "{{ user `image_name` }}",
                "type": "googlecompute",
                "project_id": "{{ user `project_id`}}",
                "source_image_family": "centos-7",
                "image_family": "{{ user `image_family` }}",
                "ssh_username": "packer",
                "zone": "{{ user `image_zone` }}",
                "startup_script_file": "install-website.sh",
                "scopes": [
                    "https://www.googleapis.com/auth/userinfo.email",
                    "https://www.googleapis.com/auth/compute",
                    "https://www.googleapis.com/auth/devstorage.full_control"
                ]
            }
        ]
    }
    

    Vous avez maintenant les fichiers suivants dans votre répertoire hello-world : cloudbuild.yaml, install-website.sh et packer.json.

  5. Vérifiez la compilation :

    gcloud builds submit --substitutions=_IMAGE_NAME="hello-v1",_IMAGE_FAMILY="hello-world",_IMAGE_ZONE="us-east1-b"
    

    Une fois la compilation terminée, un résultat semblable au suivant s'affiche :

    DONE
    --------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES  STATUS
    9a279714-e908-4033-9b46-25f8753e2cdc  2019-06-14T19:43:49+00:00  5M35S     gs://[PROJECT_ID]_cloudbuild/source/1560541428.62-64d0dc6fb01648d1be6fae9e045f6093.tgz  -       SUCCESS
    

Modifier l'image

  1. Ouvrez install-website.sh.

  2. Dans le tag <h2>, remplacez "Hello World" par "Hello Universe" :

    #!/bin/sh
    sudo yum install -y epel-release
    sudo yum install -y nginx
    sudo chkconfig nginx on
    LOCATION_OF_INDEX=/usr/share/nginx/html/index.html
    sudo bash -c "cat <<A_VERY_SPECIAL_MESSAGE>$LOCATION_OF_INDEX
    <html>
    <h2> Hello Universe! </h2>
    </html>
    
    A_VERY_SPECIAL_MESSAGE
    "
    
  3. Vérifiez la compilation avec le nouveau nom de l'image :

    gcloud builds submit --substitutions=_IMAGE_NAME="hello-v2",_IMAGE_FAMILY="hello-world",_IMAGE_ZONE="us-east1-b"
    

    Une fois la compilation terminée, un résultat semblable au suivant s'affiche :

    DONE
    --------------------------------------------------------------------------------
    
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES  STATUS
    7787c289-cb07-4e14-91f0-c74055b527a0  2019-06-14T19:57:11+00:00  4M56S     gs://[PROJECT_ID]_cloudbuild/source/1560542231.04-89ff301824a348be9c524a90124488ff.tgz  -       SUCCESS
    
  4. Ouvrez la page "Images" de la console Google Cloud Platform pour afficher les deux images.

    Accéder à la page Images

    Capture d'écran de la famille d'images Packer

Nettoyer

Afin d'éviter que des frais ne soient facturés sur votre compte GCP pour les ressources utilisées dans ce démarrage rapide, procédez comme suit :

  1. Supprimez l'image Packer :

    gcloud container images delete --quiet gcr.io/$PROJECT/packer  --force-delete-tags
    
  2. Supprimez les images hello-world :

    gcloud compute images delete --quiet hello-v1 hello-v2
    

Étapes suivantes