arrow_back

Créer des PDF avec Go et Cloud Run

Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Créer des PDF avec Go et Cloud Run

Lab 1 heure universal_currency_alt 5 crédits show_chart Intermédiaire
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP762

Google Cloud – Ateliers adaptés au rythme de chacun

Présentation

Dans cet atelier, vous allez créer une application Web de conversion en PDF sur Cloud Run, un service sans serveur qui convertit automatiquement les fichiers stockés dans Google Drive en PDF stockés dans des dossiers Google Drive séparés.

Objectifs de l'atelier

  • Convertir une application Go vers un conteneur
  • Découvrir comment créer des conteneurs avec Google Cloud Build.
  • Créer un service Cloud Run qui convertit des fichiers en PDF dans le cloud.
  • Apprendre à créer des comptes de service et ajouter des autorisations
  • Utiliser le traitement des événements avec Cloud Storage

Prérequis

Cet atelier s'adresse aux utilisateurs de niveau intermédiaire, qui maîtrisent déjà Cloud Console et Cloud Shell.

Vous devez également savoir modifier des fichiers. Vous pouvez utiliser votre éditeur de texte préféré (comme nano, vi, etc.) ou lancer l'éditeur de code de Cloud Shell, qui se trouve dans le ruban supérieur :

Icône Éditeur Cloud Shell

Préparation

Avant de cliquer sur le bouton "Démarrer l'atelier"

Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.

Cet atelier pratique vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Nous vous fournissons des identifiants temporaires pour vous connecter à Google Cloud le temps de l'atelier.

Pour réaliser cet atelier :

  • vous devez avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome) ;
Remarque : Ouvrez une fenêtre de navigateur en mode incognito/navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le temporaire étudiant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
  • vous disposez d'un temps limité ; une fois l'atelier commencé, vous ne pouvez pas le mettre en pause.
Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier afin d'éviter que des frais supplémentaires ne vous soient facturés.

Démarrer l'atelier et se connecter à la console Google Cloud

  1. Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement. Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :

    • Le bouton Ouvrir la console Google
    • Le temps restant
    • Les identifiants temporaires que vous devez utiliser pour cet atelier
    • Des informations complémentaires vous permettant d'effectuer l'atelier
  2. Cliquez sur Ouvrir la console Google. L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.

    Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.

    Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
  3. Si nécessaire, copiez le nom d'utilisateur inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue Se connecter. Cliquez sur Suivant.

  4. Copiez le mot de passe inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue de bienvenue. Cliquez sur Suivant.

    Important : Vous devez utiliser les identifiants fournis dans le panneau de gauche. Ne saisissez pas vos identifiants Google Cloud Skills Boost. Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
  5. Accédez aux pages suivantes :

    • Acceptez les conditions d'utilisation.
    • N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
    • Ne vous inscrivez pas aux essais offerts.

Après quelques instants, la console Cloud s'ouvre dans cet onglet.

Remarque : Vous pouvez afficher le menu qui contient la liste des produits et services Google Cloud en cliquant sur le menu de navigation en haut à gauche. Icône du menu de navigation

Activer Cloud Shell

Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud. Cloud Shell vous permet d'accéder via une ligne de commande à vos ressources Google Cloud.

  1. Cliquez sur Activer Cloud Shell Icône Activer Cloud Shell en haut de la console Google Cloud.

Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Le résultat contient une ligne qui déclare YOUR_PROJECT_ID (VOTRE_ID_PROJET) pour cette session :

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.

  1. (Facultatif) Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
  1. Cliquez sur Autoriser.

  2. Vous devez à présent obtenir le résultat suivant :

Résultat :

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (Facultatif) Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project

Résultat :

[core] project = <ID_Projet>

Exemple de résultat :

[core] project = qwiklabs-gcp-44776a13dea667a6 Remarque : Pour consulter la documentation complète sur gcloud, dans Google Cloud, accédez au guide de présentation de la gcloud CLI.

Architecture

Dans cet atelier, vous allez aider le cabinet vétérinaire Pet Theory à convertir automatiquement ses factures en PDF, afin que les clients puissent les ouvrir de manière fiable.

Schéma de l&#39;architecture

Utiliser les API Google

Dans cet atelier, vous allez utiliser les API Google. Les API suivantes ont été activées pour vous :

Nom API
Cloud Build cloudbuild.googleapis.com
Cloud Storage storage-component.googleapis.com
Cloud Run run.googleapis.com

Tâche 1 : Obtenir le code source

Pour commencer, téléchargez le code nécessaire pour cet atelier.

  1. Activez votre compte d'atelier :
gcloud auth list --filter=status:ACTIVE --format="value(account)"
  1. Exécutez la commande suivante pour cloner le dépôt Pet Theory :
git clone https://github.com/Deleplace/pet-theory.git
  1. Accédez au répertoire approprié :
cd pet-theory/lab03

Tâche 2 : Créer un microservice de factures

Dans cette section, vous allez créer une application Go afin de traiter les requêtes. Comme décrit dans le schéma de l'architecture, vous intégrerez Cloud Storage dans la solution.

  1. Cliquez sur l'icône Ouvrir l'éditeur, puis sur Ouvrir dans une nouvelle fenêtre.

  2. Accédez à pet-theory > lab03 > server.go

  3. Ouvrez le code source server.go et modifiez-le pour qu'il corresponde au texte ci-dessous :

package main import ( "fmt" "io/ioutil" "log" "net/http" "os" "os/exec" "regexp" "strings" ) func main() { http.HandleFunc("/", process) port := os.Getenv("PORT") if port == "" { port = "8080" log.Printf("Defaulting to port %s", port) } log.Printf("Listening on port %s", port) err := http.ListenAndServe(fmt.Sprintf(":%s", port), nil) log.Fatal(err) } func process(w http.ResponseWriter, r *http.Request) { log.Println("Serving request") if r.Method == "GET" { fmt.Fprintln(w, "Ready to process POST requests from Cloud Storage trigger") return } // // Read request body containing Cloud Storage object metadata // gcsInputFile, err1 := readBody(r) if err1 != nil { log.Printf("Error reading POST data: %v", err1) w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, "Problem with POST data: %v \n", err1) return } // // Working directory (concurrency-safe) // localDir, errDir := ioutil.TempDir("", "") if errDir != nil { log.Printf("Error creating local temp dir: %v", errDir) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Could not create a temp directory on server. \n") return } defer os.RemoveAll(localDir) // // Download input file from Cloud Storage // localInputFile, err2 := download(gcsInputFile, localDir) if err2 != nil { log.Printf("Error downloading Cloud Storage file [%s] from bucket [%s]: %v", gcsInputFile.Name, gcsInputFile.Bucket, err2) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error downloading Cloud Storage file [%s] from bucket [%s]", gcsInputFile.Name, gcsInputFile.Bucket) return } // // Use LibreOffice to convert local input file to local PDF file. // localPDFFilePath, err3 := convertToPDF(localInputFile.Name(), localDir) if err3 != nil { log.Printf("Error converting to PDF: %v", err3) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error converting to PDF.") return } // // Upload the freshly generated PDF to Cloud Storage // targetBucket := os.Getenv("PDF_BUCKET") err4 := upload(localPDFFilePath, targetBucket) if err4 != nil { log.Printf("Error uploading PDF file to bucket [%s]: %v", targetBucket, err4) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error downloading Cloud Storage file [%s] from bucket [%s]", gcsInputFile.Name, gcsInputFile.Bucket) return } // // Delete the original input file from Cloud Storage. // err5 := deleteGCSFile(gcsInputFile.Bucket, gcsInputFile.Name) if err5 != nil { log.Printf("Error deleting file [%s] from bucket [%s]: %v", gcsInputFile.Name, gcsInputFile.Bucket, err5) // This is not a blocking error. // The PDF was successfully generated and uploaded. } log.Println("Successfully produced PDF") fmt.Fprintln(w, "Successfully produced PDF") } func convertToPDF(localFilePath string, localDir string) (resultFilePath string, err error) { log.Printf("Converting [%s] to PDF", localFilePath) cmd := exec.Command("libreoffice", "--headless", "--convert-to", "pdf", "--outdir", localDir, localFilePath) cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr log.Println(cmd) err = cmd.Run() if err != nil { return "", err } pdfFilePath := regexp.MustCompile(`\.\w+$`).ReplaceAllString(localFilePath, ".pdf") if !strings.HasSuffix(pdfFilePath, ".pdf") { pdfFilePath += ".pdf" } log.Printf("Converted %s to %s", localFilePath, pdfFilePath) return pdfFilePath, nil }
  1. Exécutez maintenant ce qui suit pour créer l'application :
go build -o server

Les fonctions appelées par ce code de niveau supérieur se trouvent dans des fichiers sources :

  • serveur.go
  • notification.go
  • gcs.go

Une fois l'application créée, vous pouvez créer le service de convertisseur PDF.

Tâche 3 : Créer un service de convertisseur PDF

Le service PDF utilisera Cloud Run et Cloud Storage pour initier un processus chaque fois qu'un fichier sera importé dans l'espace de stockage désigné.

Pour cela, vous allez utiliser un schéma commun de notifications d'événements avec Cloud Pub/Sub. Cela permet à l'application de se concentrer seulement sur le traitement des informations. Le transport et la transmission des informations sont effectués par d'autres services, ce qui vous permet de simplifier l'application.

La création du module de facturation nécessite l'intégration de deux composants :

Conteneur avec deux composants : &quot;server&quot; et &quot;LibreOffice&quot;

L'ajout du package LibreOffice vous permet de l'utiliser dans votre application.

  1. Dans Ouvrir l'éditeur, ouvrez le fichier manifeste Dockerfile existant et mettez-le à jour comme indiqué ci-dessous :
FROM debian:buster RUN apt-get update -y \ && apt-get install -y libreoffice \ && apt-get clean WORKDIR /usr/src/app COPY server . CMD [ "./server" ]
  1. Enregistrez le fichier Dockerfile mis à jour.

  2. Lancez une recompilation de l'image pdf-converter à l'aide de Cloud Build :

gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter

Cliquez sur Vérifier ma progression pour vérifier que vous avez correctement effectué la tâche ci-dessus.

Créer une image avec Cloud Build
  1. Déployez le service pdf-converter mis à jour.
Remarque : Il est recommandé d'allouer 2 Go de RAM à LibreOffice pour accélérer votre travail, voir la ligne comportant l'option --memory.
  1. Exécutez les commandes suivantes pour créer le conteneur et le déployer :
gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | "REGION" }}} \ --memory=2Gi \ --no-allow-unauthenticated \ --set-env-vars PDF_BUCKET=$GOOGLE_CLOUD_PROJECT-processed \ --max-instances=3

Cliquez sur Vérifier ma progression pour vérifier que vous avez correctement effectué la tâche ci-dessus.

Service de conversion en PDF déployé

Le service Cloud Run a bien été déployé. Cependant, nous avons déployé une application qui nécessite les autorisations adéquates pour y accéder.

Tâche 4 : Créer un compte de service

Un compte de service est un type de compte particulier ayant accès aux API Google.

Dans cet atelier, vous utilisez un compte de service pour accéder à Cloud Run quand un événement Cloud Storage est traité. Cloud Storage accepte un grand nombre de notifications qui peuvent servir à déclencher des événements.

Ensuite, mettez à jour le code pour avertir l'application qu'un fichier a été importé.

  1. Cliquez sur le menu de navigation > Cloud Storage, puis vérifiez que deux buckets ont été créés. Vous devriez obtenir le résultat suivant :
  • PROJECT_ID-processed
  • PROJECT_ID-upload
  1. Créez une notification Pub/Sub pour indiquer qu'un nouveau fichier a été importé dans l'ensemble de documents ("importé"). Les notifications seront étiquetées avec le sujet "new-doc".
gsutil notification create -t new-doc -f json -e OBJECT_FINALIZE gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Créez un compte de service pour déclencher les services Cloud Run :
gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"
  1. Donnez au nouveau compte de service l'autorisation d'appeler le service de convertisseur PDF :
gcloud run services add-iam-policy-binding pdf-converter \ --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region {{{ project_0.default_region | "REGION" }}} \ --platform managed
  1. Recherchez votre numéro de projet en exécutant cette commande :
PROJECT_NUMBER=$(gcloud projects list \ --format="value(PROJECT_NUMBER)" \ --filter="$GOOGLE_CLOUD_PROJECT")
  1. Activez le projet pour créer des jetons d'authentification Cloud Pub/Sub :
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator

Cliquez sur Vérifier ma progression pour vérifier que vous avez correctement effectué la tâche ci-dessus.

Compte de service créé

Une fois le compte de service créé, il peut être utilisé pour appeler le service Cloud Run.

Tâche 5 : Tester le service Cloud Run

Avant de poursuivre, testez le service déployé. N'oubliez pas que le service nécessite une authentification. Vous devez donc vérifier que le service est réellement privé.

  1. Enregistrez l'URL de votre service dans la variable d'environnement $SERVICE_URL :
SERVICE_URL=$(gcloud run services describe pdf-converter \ --platform managed \ --region {{{ project_0.default_region | "REGION" }}} \ --format "value(status.url)")
  1. Affichez l'URL SERVICE :
echo $SERVICE_URL
  1. Envoyez une requête GET anonyme à votre nouveau service :
curl -X GET $SERVICE_URL

La requête GET anonyme génère un message d'erreur.
"Your client does not have permission to get URL" (Votre client n'est pas autorisé à obtenir l'URL). En effet, vous ne voulez pas que le service puisse être appelé par des utilisateurs anonymes.

  1. Essayez maintenant d'appeler le service en tant qu'utilisateur autorisé :
curl -X GET -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL
  1. Vous obtenez la réponse "Ready to process POST requests from Cloud Storage trigger" (Prêt à traiter les requêtes POST à partir du déclencheur Cloud Storage).

Bravo ! Vous avez déployé un service Cloud Run authentifié.

Tâche 6 : Déclencheur Cloud Storage

Pour lancer une notification lorsque du nouveau contenu est importé dans Cloud Storage, ajoutez un abonnement à votre sujet Pub/Sub existant.

Remarque : Les notifications Cloud Storage envoient automatiquement un message à votre file d'attente de sujets quand de nouveaux contenus sont importés. Grâce aux notifications, vous pouvez créer des applications performantes qui répondent à des événements sans avoir à écrire de code supplémentaire.
  • Créez un abonnement Pub/Sub pour que le convertisseur PDF fonctionne à chaque fois qu'un message est publié dans le sujet new-doc :

    gcloud pubsub subscriptions create pdf-conv-sub \ --topic new-doc \ --push-endpoint=$SERVICE_URL \ --push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com

Cliquez sur Vérifier ma progression pour vérifier que vous avez correctement effectué la tâche ci-dessus.

Confirmer l'abonnement Pub/Sub

Désormais, chaque fois qu'un fichier est importé, l'abonnement Pub/Sub interagit avec votre compte de service. Le compte de service lance alors le service Cloud Run de convertisseur PDF.

Tâche 7 : Tester la notification Cloud Storage

Pour tester le service Cloud Run, utilisez les fichiers d'exemples disponibles.

  1. Copiez les fichiers de test dans votre bucket d'importation :
gsutil -m cp -r gs://spls/gsp762/* gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Dans la console Cloud, cliquez sur Cloud Storage > Buckets suivi du bucket dont le nom se termine par -upload. Cliquez ensuite sur le bouton Actualiser à plusieurs reprises pour voir la suppression des fichiers, l'un après l'autre, une fois qu'ils sont convertis au format PDF.

  2. Cliquez ensuite sur Buckets, suivi du bucket dont le nom se termine par -processed. Il doit contenir les versions PDF de tous les fichiers. N'hésitez pas à ouvrir les fichiers PDF pour vous assurer qu'ils ont été correctement convertis.

  3. Une fois l'importation terminée, cliquez sur le menu de navigation > Cloud Run, puis sur le service pdf-converter.

  4. Sélectionnez l'onglet JOURNAUX et ajoutez le filtre "Conversion" pour afficher les fichiers convertis.

  5. Accédez au menu de navigation > Cloud Storage et ouvrez le bucket dont le nom se termine par -upload pour confirmer que tous les fichiers importés ont été traités.

Bravo ! Vous venez de créer un nouveau service pour générer un PDF à l'aide des fichiers importés dans Cloud Storage.

Félicitations !

Le service de conversion en PDF convertit les documents et les écrit en PDF dans le bucket "processed" (traité). Dans cet atelier, vous avez appris à :

  • convertir une application Go vers un conteneur ;
  • créer des conteneurs avec Google Cloud Build ;
  • créer un service Cloud Run ;
  • activer les autorisations à l'aide d'un compte de service ;
  • utiliser le traitement des événements Cloud Storage.

Terminer votre quête

Cet atelier d'auto-formation fait partie de la quête Google Cloud Run Serverless Workshop. Une quête est une série d'ateliers associés qui constituent un parcours de formation. Si vous terminez cette quête, vous obtenez un badge attestant de votre réussite. Vous pouvez rendre publics les badges que vous recevez et ajouter leur lien dans votre CV en ligne ou sur vos comptes de réseaux sociaux. Inscrivez-vous à cette quête pour obtenir immédiatement les crédits associés. Découvrez toutes les quêtes disponibles dans le catalogue Google Cloud Skills Boost.

En savoir plus/Étapes suivantes

Formations et certifications Google Cloud

Les formations et certifications Google Cloud vous aident à tirer pleinement parti des technologies Google Cloud. Nos cours portent sur les compétences techniques et les bonnes pratiques à suivre pour être rapidement opérationnel et poursuivre votre apprentissage. Nous proposons des formations pour tous les niveaux, à la demande, en salle et à distance, pour nous adapter aux emplois du temps de chacun. Les certifications vous permettent de valider et de démontrer vos compétences et votre expérience en matière de technologies Google Cloud.

Dernière mise à jour du manuel : 29 novembre 2023

Dernier test de l'atelier : 29 novembre 2023

Copyright 2024 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.