arrow_back

Serverlose Anwendung für das Erstellen von PDF-Dateien in Cloud Run entwickeln

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

Serverlose Anwendung für das Erstellen von PDF-Dateien in Cloud Run entwickeln

Lab 1 Stunde universal_currency_alt 5 Guthabenpunkte show_chart Mittelstufe
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP644

Logo: Google Cloud-Labs zum selbstbestimmten Lernen

Logo von Pet Theory

Übersicht

Vor zwölf Jahren gründete Lily die Tierklinikkette Pet Theory. Die Klinik sendet ihre Rechnungen zurzeit im DOCX-Format an die Kunden, hat aber von vielen die Rückmeldung erhalten, dass sie sie nicht öffnen können. Daher hat Lily ihren IT-Administrator Patrick gebeten, eine Alternative zu entwickeln.

Das Ops-Team von Pet Theory besteht nur aus einer Person. Deshalb ist es wichtig, dass die Lösung möglichst wenig Kosten- und Wartungsaufwand erfordert. Nachdem sich Patrick verschiedene Möglichkeiten angesehen hat, entscheidet er sich für Cloud Run.

Cloud Run ist eine serverlose Plattform, die ganz ohne Infrastrukturverwaltung auskommt. So können Sie sich ganz auf das Programmieren von Anwendungen konzentrieren. Dieses serverlose Produkt von Google lässt sich vollständig herunterskalieren und wird bei Null-Skalierung kostenlos bereitgestellt. Außerdem bietet die Plattform die Möglichkeit, benutzerdefinierte, auf Containern basierende Binärpakete zu verwenden, wodurch das Erstellen einheitlicher, isolierter Artefakte möglich wird.

In diesem Lab erstellen Sie eine Webanwendung für die PDF-Konvertierung in Cloud Run. Damit sollen Dateien in Cloud Storage automatisch in PDFs konvertiert und in separaten Ordnern gespeichert.

Architektur

Dieses Diagramm gibt Ihnen einen Überblick über die zu verwendenden Dienste und darüber, wie sie miteinander verbunden sind.

Architekturdiagramm

Lernziele

Aufgaben in diesem Lab:

  • Node.js-Anwendung in einen Container konvertieren
  • Container mit Google Cloud Build erstellen
  • Cloud Run-Dienst erstellen, durch den in der Cloud Dateien in PDFs konvertiert werden
  • Ereignisverarbeitung mit Cloud Storage anwenden

Vorbereitung

Dies ist ein Lab für Fortgeschrittene. Es setzt Kenntnisse zur Console und Shell-Umgebungen voraus. Erfahrung mit Firebase ist hilfreich, aber nicht zwingend erforderlich. Bevor Sie dieses Lab ausführen, sollten Sie folgende Google Cloud Skills Boost-Labs abgeschlossen haben:

Um mit diesem Lab zu beginnen, scrollen Sie nach unten und befolgen Sie die dort aufgeführten Schritte zur Einrichtung Ihrer Lab-Umgebung.

Einrichtung und Anforderungen

Vor dem Klick auf „Start Lab“ (Lab starten)

Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange die Ressourcen für das Lab verfügbar sind.

In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung selbst durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.

Für dieses Lab benötigen Sie Folgendes:

  • Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus, um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
  • Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Wenn Sie über ein persönliches Google Cloud-Konto oder -Projekt verfügen, verwenden Sie es nicht für dieses Lab. So werden zusätzliche Kosten für Ihr Konto vermieden.

Lab starten und bei der Google Cloud Console anmelden

  1. Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Pop-up-Fenster geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können. Auf der linken Seite befindet sich der Bereich Details zum Lab mit diesen Informationen:

    • Schaltfläche Google Cloud Console öffnen
    • Restzeit
    • Temporäre Anmeldedaten für das Lab
    • Ggf. weitere Informationen für dieses Lab
  2. Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).

    Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite Anmelden geöffnet.

    Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.

    Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
  3. Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.

    {{{user_0.username | "Username"}}}

    Sie finden den Nutzernamen auch im Bereich Details zum Lab.

  4. Klicken Sie auf Weiter.

  5. Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.

    {{{user_0.password | "Password"}}}

    Sie finden das Passwort auch im Bereich Details zum Lab.

  6. Klicken Sie auf Weiter.

    Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos. Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
  7. Klicken Sie sich durch die nachfolgenden Seiten:

    • Akzeptieren Sie die Nutzungsbedingungen.
    • Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
    • Melden Sie sich nicht für kostenlose Testversionen an.

Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.

Hinweis: Wenn Sie sich eine Liste der Google Cloud-Produkte und ‑Dienste ansehen möchten, klicken Sie oben links auf das Navigationsmenü. Symbol für Navigationsmenü

Cloud Shell aktivieren

Cloud Shell ist eine virtuelle Maschine, auf der Entwicklertools installiert sind. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Mit Cloud Shell erhalten Sie Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.

  1. Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren Symbol für Cloud Shell-Aktivierung.

Wenn Sie verbunden sind, sind Sie bereits authentifiziert und das Projekt ist auf Ihre Project_ID, eingestellt. Die Ausgabe enthält eine Zeile, in der die Project_ID für diese Sitzung angegeben ist:

Ihr Cloud-Projekt in dieser Sitzung ist festgelegt als {{{project_0.project_id | "PROJECT_ID"}}}

gcloud ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.

  1. (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
  1. Klicken Sie auf Autorisieren.

Ausgabe:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Um das aktive Konto festzulegen, führen Sie diesen Befehl aus: $ gcloud config set account `ACCOUNT`
  1. (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
gcloud config list project

Ausgabe:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Hinweis: Die vollständige Dokumentation für gcloud finden Sie in Google Cloud in der Übersicht zur gcloud CLI.

Aufgabe 1: Aufgabenstellung

Pet Theory möchte seine Rechnungen in PDFs konvertieren, damit Kunden sie problemlos öffnen können. Die Konvertierung sollte automatisiert werden, damit die Büroleiterin Lisa nicht jede Datei einzeln konvertieren muss.

Ruby, die Softwareberaterin von Pet Theory, erhält eine Nachricht vom IT-Administrator Patrick.

Patrick

Patrick, IT-Administrator

Hallo Ruby,

ich habe ein bisschen recherchiert und herausgefunden, dass LibreOffice sehr viele Dateiformate in PDF konvertieren kann.

Wäre es möglich, LibreOffice in der Cloud auszuführen, ohne dass Server gewartet werden müssen?

Patrick

RubyRuby, Softwareberaterin

Hallo Patrick,

ich glaube, ich habe genau die richtige Lösung für dich.

Ich habe gerade auf YouTube ein interessantes Video von der Google Cloud Next 19 zu Cloud Run gesehen. LibreOffice könnten wir anscheinend mit Cloud Run in einer serverlosen Umgebung ausführen. Eine Serverwartung wäre nicht nötig!

Ich schicke dir dazu gleich einige Infos.

Ruby

Helfen Sie Patrick dabei, Cloud Run einzurichten und bereitzustellen.

Aufgabe 2: Cloud Run API aktivieren

  1. Öffnen Sie das Navigationsmenü (Symbol für Navigationsmenü) und klicken Sie auf APIs und Dienste > Bibliothek. Geben Sie in der Suchleiste „Cloud Run“ ein und wählen Sie aus der Ergebnisliste Cloud Run Admin API aus.

  2. Klicken Sie auf Aktivieren und anschließend zweimal auf die Zurück-Schaltfläche des Browsers. Die Console sollte nun so aussehen:

Ergebnis „Cloud Run API“

Aufgabe 3: Einfachen Cloud Run-Dienst bereitstellen

Ruby hat einen Cloud Run-Prototyp entwickelt und bittet Patrick, ihn in Google Cloud bereitzustellen. Helfen Sie Patrick, für Pet Theory den PDF-Dienst über Cloud Run bereitzustellen.

  1. Öffnen Sie eine neue Cloud Shell-Sitzung und führen Sie den folgenden Befehl aus, um das Pet Theory-Repository zu klonen:

    git clone https://github.com/rosera/pet-theory.git
  2. Wechseln Sie dann ins Arbeitsverzeichnis lab03:

    cd pet-theory/lab03
  3. Bearbeiten Sie die Datei package.json mit dem Code-Editor von Cloud Shell oder einem anderen Editor. Fügen Sie im Abschnitt „scripts“ die Zeile "start": "node index.js", ein:

    ... "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, ...
  4. Führen Sie jetzt in Cloud Shell folgende Befehle aus, um die Pakete zu installieren, die für das Konvertierungsskript erforderlich sind:

    npm install express npm install body-parser npm install child_process npm install @google-cloud/storage
  5. Öffnen Sie jetzt die Datei lab03/index.js und sehen Sie sich den Code an.

    Die Anwendung wird als Cloud Run-Dienst bereitgestellt, der HTTP-POST-Anfragen akzeptiert. Wenn die POST-Anfrage eine Pub/Sub-Benachrichtigung zu einer hochgeladenen Datei ist, werden die Dateidetails in das Log geschrieben. Wenn nicht, wird nur die Zeichenfolge „OK“ zurückgegeben.

  6. Sehen Sie sich die Datei lab03/Dockerfile an.

    Diese Datei ist ein sogenanntes Manifest, das dem Docker-Befehl Anweisungen zum Erstellen eines Image übergibt. Jede Zeile beginnt mit einem Befehl, der Docker mitteilt, wie die nachfolgenden Informationen verarbeitet werden sollen:

    • In der ersten Liste wird angegeben, dass der Knoten als Vorlage für das zu erstellende Basis-Image verwendet werden soll.
    • In der letzten Zeile steht der auszuführende Befehl, der in diesem Fall auf „npm start“ verweist.
  7. Zum Erstellen und Bereitstellen der REST API nutzen Sie Google Cloud Build. Starten Sie den Erstellungsprozess mit folgendem Befehl:

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

    Durch diesen Befehl wird ein Container mit Ihrem Code generiert und in der Artifact Registry Ihres Projekts platziert.

  8. Kehren Sie zur Cloud Console zurück, öffnen Sie das Navigationsmenü und wählen Sie Artifact Registry > Images aus. Sie sollten jetzt den gehosteten Container sehen:

    Artifact Registry mit PDF-Converter

Test nach Abschluss der Aufgabe

Klicken Sie auf Fortschritt prüfen.

Einfache REST API erstellen
  1. Kehren Sie zum Tab mit dem Code-Editor zurück und führen Sie in Cloud Shell den folgenden Befehl aus, um die Anwendung bereitzustellen:

    gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Region }}} \ --no-allow-unauthenticated \ --max-instances=1
  2. Nach der Bereitstellung ist eine Meldung wie diese zu sehen:

    Service [pdf-converter] revision [pdf-converter-00001] has been deployed and is serving 100 percent of traffic at https://pdf-converter-[hash].a.run.app
  3. Erstellen Sie die Umgebungsvariable $SERVICE_URL für die Anwendung, damit Sie einfach darauf zugreifen können:

    SERVICE_URL=$(gcloud beta run services describe pdf-converter --platform managed --region {{{ project_0.default_region | Lab Region }}} --format="value(status.url)") echo $SERVICE_URL

Test nach Abschluss der Aufgabe

Klicken Sie auf Fortschritt prüfen.

Überarbeitung für Cloud Run erstellen
  1. Senden Sie eine anonyme POST-Anfrage an den neuen Dienst:

    curl -X POST $SERVICE_URL HINWEIS:
    Sie erhalten die Fehlermeldung: „Der Client ist nicht berechtigt, die URL abzurufen“. Das ist richtig so, denn Sie möchten ja nicht, dass der Dienst von anonymen Nutzern aufgerufen werden kann.
  2. Rufen Sie den Dienst jetzt als autorisierter Nutzer auf:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL

    Wenn Sie die Antwort „OK“ erhalten, haben Sie den Cloud Run-Dienst erfolgreich bereitgestellt. Gut gemacht!

Aufgabe 4: Cloud Run-Dienst auslösen, wenn eine neue Datei hochgeladen wird

Nachdem der Cloud Run-Dienst jetzt bereitgestellt wurde, bittet Ruby Patrick, einen Staging-Bereich für die zu konvertierenden Daten zu erstellen. Der dafür verwendete Cloud Storage-Bucket sendet einen Ereignistrigger an die Anwendung, wenn eine Datei hochgeladen wurde und verarbeitet werden soll.

  1. Führen Sie folgenden Befehl aus, um in Cloud Storage einen Bucket für die hochgeladenen Dokumente zu erstellen:

    gsutil mb gs://$GOOGLE_CLOUD_PROJECT-upload
  2. Erstellen Sie einen weiteren Bucket für die erstellten PDFs:

    gsutil mb gs://$GOOGLE_CLOUD_PROJECT-processed
  3. Kehren Sie zum Tab der Cloud Console zurück, öffnen Sie das Navigationsmenü und wählen Sie Cloud Storage aus. Prüfen Sie, ob die Buckets erstellt wurden, aber beachten Sie, dass hier auch andere von der Plattform verwendete Buckets zu sehen sind.

Test nach Abschluss der Aufgabe

Klicken Sie auf Fortschritt prüfen.

Zwei Cloud Storage-Buckets erstellen
  1. Geben Sie in Cloud Shell den folgenden Befehl ein, damit jedes Mal eine Pub/Sub-Benachrichtigung von Cloud Storage gesendet wird, wenn eine neue Datei in den Bucket für die Dokumente hochgeladen wurde:

    gsutil notification create -t new-doc -f json -e OBJECT_FINALIZE gs://$GOOGLE_CLOUD_PROJECT-upload

    Die Benachrichtigungen sind mit dem Thema „new-doc“ gelabelt.

Test nach Abschluss der Aufgabe

Klicken Sie auf Fortschritt prüfen.

Pub/Sub-Thema für Benachrichtigungen vom Storage-Bucket erstellen
  1. Erstellen Sie dann ein neues Dienstkonto, das von Pub/Sub zum Auslösen der Cloud Run-Dienste verwendet wird:

    gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"
  2. Gewähren Sie dem neuen Dienstkonto die Berechtigung zum Aufrufen des PDF-Konvertierungsdienstes:

    gcloud beta run services add-iam-policy-binding pdf-converter \ --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --platform managed \ --region {{{ project_0.default_region | Lab Region }}}
  3. Ermitteln Sie Ihre Projektnummer mit folgendem Befehl:

    gcloud projects list --filter="PROJECT_ID={{{ project_0.project_id | PROJECT_ID }}}"

    Sie verwenden die Projektnummer im nächsten Befehl.

    PROJECT_ID: {{{ project_0.project_id | PROJECT_ID }}} NAME: {{{ project_0.project_id | PROJECT_ID }}} PROJECT_NUMBER: 103480415252
  4. Erstellen Sie eine Umgebungsvariable PROJECT_NUMBER:

    PROJECT_NUMBER=$(gcloud projects list --filter="PROJECT_ID={{{ project_0.project_id | PROJECT_ID }}}" --format=json | jq -r .[0].projectNumber)
  5. Erstellen Sie schließlich ein Pub/Sub-Abonnement, sodass der PDF-Converter immer dann ausgeführt wird, wenn eine Nachricht zum Thema „new-doc“ veröffentlicht wird.

    gcloud beta 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

Test nach Abschluss der Aufgabe

Klicken Sie auf Fortschritt prüfen.

Pub/Sub-Abonnement erstellen

Aufgabe 5: Prüfen, ob der Cloud Run-Dienst ausgeführt wird, wenn Dateien in Cloud Storage hochgeladen werden

Ruby bittet Patrick, Testdaten in den benannten Storage-Bucket hochzuladen und dann in Cloud Logging nachzusehen, ob die Anwendung wie erwartet funktioniert.

  1. Kopieren Sie einige Testdateien in den Upload-Bucket:

    gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  2. Kehren Sie nach Abschluss des Uploads zum Tab der Cloud Console zurück, öffnen Sie das Navigationsmenü und wählen Sie aus dem Bereich „Vorgänge“ die Option Logging aus.

  3. Filtern Sie in der Drop-down-Liste Ressource die Ergebnisse nach Überarbeitung in Cloud Run und klicken Sie auf Übernehmen. Klicken Sie dann auf Abfrage ausführen.

  4. Suchen Sie in den Abfrageergebnissen nach einem Logeintrag, der mit file: beginnt, und klicken Sie darauf. Es wird ein Dump der Dateidaten angezeigt, die Pub/Sub an den Cloud Run-Dienst sendet, wenn eine neue Datei hochgeladen wird.

  5. Finden Sie den Namen der Datei, die Sie hochgeladen haben?

    Abfrageergebnisse

    Hinweis:
    Wenn keine Logeinträge angezeigt werden, die mit „file“ beginnen, klicken Sie unten auf der Seite auf die Schaltfläche „Neuere Logs laden“.
  6. Kehren Sie zum Tab mit dem Code-Editor zurück und führen Sie in Cloud Shell den folgenden Befehl aus, um die Dateien zur Bereinigung aus dem upload-Verzeichnis zu löschen:

    gsutil -m rm gs://$GOOGLE_CLOUD_PROJECT-upload/*

Aufgabe 6: Container

Patrick möchte noch nicht versendete Rechnungen in PDFs konvertieren, damit alle Kunden sie öffnen können. Er schreibt Ruby eine E-Mail und bittet um Hilfe.

Patrick

Patrick, IT-Administrator

Hallo Ruby,

nach deiner Rückmeldung bin ich zu dem Schluss gekommen, dass wir diesen Prozess automatisieren und auf PDF als Rechnungsformat umsteigen können.

Ich habe gestern dazu ein Node.js-Skript für unsere Lösung erstellt. Könntest du dir das ansehen?

Patrick

Patrick sendet Ruby sein Codefragment, mit dem sich Dateien in PDFs konvertieren lassen:

const {promisify} = require('util'); const exec = promisify(require('child_process').exec); const cmd = 'libreoffice --headless --convert-to pdf --outdir ' + `/tmp "/tmp/${fileName}"`; const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; }

Ruby antwortet Patrick.

Ruby

Ruby, Softwareberaterin

Hallo Patrick,

in Cloud Run werden Container verwendet, also müssen wir deine Anwendung im entsprechenden Format bereitstellen. Als Nächstes erstellen wir daher ein Dockerfile-Manifest für die Anwendung.

Ich sehe, dass du in deinem Code LibreOffice verwendest. Kannst du mir den Befehl für die Softwareinstallation senden, damit ich ihn in den Container einfügen kann?

Ruby

Patrick

Patrick, IT-Administrator

Hallo Ruby,

super, danke, ich installiere LibreOffice normalerweise mit diesem Befehl auf den Servern in unserem Büro:

apt-get update -y && apt-get install -y libreoffice && apt-get clean

Sag Bescheid, wenn du noch weitere Infos brauchst.

Patrick

Für die Containererstellung sind verschiedene Komponenten erforderlich:

Komponenten: index.js, OfficeLibre, Express, body-parser, child_process und @google-cloud/storage

Manifest aktualisieren

Wenn alle Dateien identifiziert wurden, kann das Manifest erstellt werden. Helfen Sie Ruby dabei, den Container einzurichten und bereitzustellen.

Das Paket für LibreOffice ist noch nicht im Container enthalten und muss jetzt hinzugefügt werden. Ruby fügt die Befehle, die sie von Patrick erhalten hat, per RUN-Befehl in die Dockerfile ein.

  1. Öffnen Sie das Dockerfile-Manifest und fügen Sie den Befehl RUN apt-get update -y && apt-get install -y libreoffice && apt-get clean wie hier gezeigt ein:

    FROM {{{ project_0.startup_script.node_version | NODE_VERSION }}} RUN apt-get update -y \ && apt-get install -y libreoffice \ && apt-get clean WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

Neue Version des PDF-Konvertierungsdienstes bereitstellen

  1. Öffnen Sie die Datei index.js und fügen Sie am Anfang der Datei folgende Paketanforderungen ein:

    const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage();
  2. Ersetzen Sie app.post('/', async (req, res) durch folgenden Code:

    app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); })
  3. Fügen Sie jetzt am Ende der Datei folgenden Code für die Verarbeitung von LibreOffice-Dokumenten ein:

    async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  4. Ihre index.js-Datei sollte jetzt so aussehen:

    Hinweis:
    Damit keine Formatfehler auftreten, wird empfohlen, den gesamten Code in der Datei index.js durch den folgenden Beispielcode zu ersetzen.
    const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage(); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); }) function decodeBase64Json(data) { return JSON.parse(Buffer.from(data, 'base64').toString()); } async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  • Die Hauptlogik ist in diesen Funktionen enthalten:
const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name);

Dieser Dienst wird bei jedem Hochladen einer Datei ausgelöst. Folgende Aufgaben – jeweils eine pro Codezeile – werden dadurch ausgeführt:

  • Dateidetails aus der Pub/Sub-Benachrichtigung extrahieren.
  • Datei aus Cloud Storage auf die lokale Festplatte herunterladen. Allerdings ist dies keine wirkliche, physische Festplatte, sondern ein Bereich eines virtuellen Arbeitsspeichers, der sich wie eine Festplatte verhält.
  • Heruntergeladene Datei in PDF konvertieren.
  • PDF-Datei in Cloud Storage hochladen. Die Umgebungsvariable process.env.PDF_BUCKET enthält den Namen des Cloud Storage-Buckets, in den die PDF-Dateien geschrieben werden sollen. Sie weisen der Variable gleich einen Wert zu, wenn Sie den Dienst bereitstellen.
  • Originaldatei aus Cloud Storage löschen.

Mit dem restlichen Code in index.js werden die von diesem Top-Level-Code aufgerufenen Funktionen implementiert.

Jetzt können der Dienst bereitgestellt und die Umgebungsvariable PDF_BUCKET festgelegt werden. LibreOffice sollten dabei mindestens 2 GB RAM zur Verfügung gestellt werden, wie in der Zeile mit der Option --memory zu sehen.

  1. Führen Sie folgenden Befehl aus, um den Container zu erstellen:

    gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter
Hinweis:
Wenn ein Pop-up-Fenster zur Aktivierung der Cloud Build API angezeigt wird, geben Sie Y ein.

Test nach Abschluss der Aufgabe

Klicken Sie auf Fortschritt prüfen.

Weiteren Build für die REST API erstellen
  1. Stellen Sie jetzt die neueste Version Ihrer Anwendung bereit:

    gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Lab Region }}} \ --memory=2Gi \ --no-allow-unauthenticated \ --max-instances=1 \ --set-env-vars PDF_BUCKET=$GOOGLE_CLOUD_PROJECT-processed

Da jetzt LibreOffice Teil des Containers ist, dauert diese Erstellung länger als die vorherige. Nutzen Sie die Zeit zum Beispiel, um vom Schreibtisch aufzustehen und sich ein bisschen zu bewegen.

Klicken Sie auf Fortschritt prüfen.

Neue Überarbeitung erstellen

Aufgabe 7: PDF-Konvertierungsdienst testen

  1. Prüfen Sie nach Abschluss der Bereitstellungsbefehle mit folgendem Befehl, ob der Dienst richtig bereitgestellt wurde:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL
  2. Wenn Sie die Antwort „OK“ erhalten, haben Sie den aktualisierten Cloud Run-Dienst erfolgreich bereitgestellt. Mit LibreOffice können viele Dateitypen in PDF konvertiert werden: DOCX, XLSX, JPG, PNG, GIF usw.

  3. Führen Sie folgenden Befehl aus, um einige Beispieldateien hochzuladen:

    gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  4. Kehren Sie zur Cloud Console zurück, öffnen Sie das Navigationsmenü und wählen Sie Cloud Storage aus. Öffnen Sie den -upload-Bucket und klicken Sie mehrmals auf die Schaltfläche Aktualisieren. Sie sehen dann, wie die Dateien nach und nach gelöscht werden, nachdem sie in PDFs konvertiert wurden.

  5. Klicken Sie im linken Menü auf Buckets und dann auf den Bucket, dessen Name auf „-processed“ endet. Er sollte PDF-Versionen aller Dateien enthalten. Sie können die PDF-Dateien jetzt öffnen und sich ansehen, ob sie korrekt konvertiert wurden:

    Hinweis:
    Führen Sie den Befehl noch einmal aus, wenn nicht alle PDF-Dateien im -processed-Bucket angezeigt werden.

Glückwunsch!

Pet Theory hat jetzt ein System, mit dem die Tierklinik ihre alten, archivierten Dateien in PDFs umwandeln kann. Die alten Dateien müssen nur in den „upload“-Bucket hochgeladen werden und werden dann vom PDF-Konvertierungsdienst umgewandelt sowie im „processed“-Bucket abgelegt.

Im Kurs Serverlose Entwicklung in Cloud Run finden Sie weiteres Lernmaterial zu serverlosen Google-Produkten. Diesem Kurs liegt das Szenario eines fiktiven Unternehmens zugrunde, in dem Sie den handelnden Personen bei der Umsetzung ihres Plans für eine serverlose Migration helfen.

Google Cloud-Schulungen und -Zertifizierungen

In unseren Schulungen erfahren Sie alles zum optimalen Einsatz unserer Google Cloud-Technologien und können sich entsprechend zertifizieren lassen. Unsere Kurse vermitteln technische Fähigkeiten und Best Practices, damit Sie möglichst schnell mit Google Cloud loslegen und Ihr Wissen fortlaufend erweitern können. Wir bieten On-Demand-, Präsenz- und virtuelle Schulungen für Anfänger wie Fortgeschrittene an, die Sie individuell in Ihrem eigenen Zeitplan absolvieren können. Mit unseren Zertifizierungen weisen Sie nach, dass Sie Experte im Bereich Google Cloud-Technologien sind.

Anleitung zuletzt am 28. Mai 2024 aktualisiert

Lab zuletzt am 28. Mai 2024 getestet

© 2024 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.