Prüfpunkte
Build simple a REST API
/ 20
Create a Revision for Cloud Run
/ 20
Create two cloud storage buckets
/ 10
Create a Pub/Sub topic for receiving notification from storage bucket
/ 10
Create a Pub/Sub subscription
/ 10
Create another build for REST API
/ 15
Create a new Revision
/ 15
Serverlose Anwendung für das Erstellen von PDF-Dateien in Cloud Run entwickeln
- GSP644
- Übersicht
- Lernziele
- Einrichtung und Anforderungen
- Aufgabe 1: Aufgabenstellung
- Aufgabe 2: Cloud Run API aktivieren
- Aufgabe 3: Einfachen Cloud Run-Dienst bereitstellen
- Aufgabe 4: Cloud Run-Dienst auslösen, wenn eine neue Datei hochgeladen wird
- Aufgabe 5: Prüfen, ob der Cloud Run-Dienst ausgeführt wird, wenn Dateien in Cloud Storage hochgeladen werden
- Aufgabe 6: Container
- Aufgabe 7: PDF-Konvertierungsdienst testen
- Glückwunsch!
GSP644
Ü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.
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)
- Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Lab starten und bei der Google Cloud Console anmelden
-
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
-
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. -
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.
-
Klicken Sie auf Weiter.
-
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.
-
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. -
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.
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.
- Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren .
Wenn Sie verbunden sind, sind Sie bereits authentifiziert und das Projekt ist auf Ihre Project_ID,
gcloud
ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.
- (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
- Klicken Sie auf Autorisieren.
Ausgabe:
- (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
Ausgabe:
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, 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 |
Ruby, 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
-
Öffnen Sie das 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.
-
Klicken Sie auf Aktivieren und anschließend zweimal auf die Zurück-Schaltfläche des Browsers. Die Console sollte nun so aussehen:
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.
-
Ö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 -
Wechseln Sie dann ins Arbeitsverzeichnis lab03:
cd pet-theory/lab03 -
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" }, ... -
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 -
Ö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.
-
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.
-
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.
-
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:
Test nach Abschluss der Aufgabe
Klicken Sie auf Fortschritt prüfen.
-
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 -
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 -
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.
-
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. -
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.
-
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 -
Erstellen Sie einen weiteren Bucket für die erstellten PDFs:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-processed -
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.
-
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.
-
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" -
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 }}} -
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 -
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) -
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.
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.
-
Kopieren Sie einige Testdateien in den Upload-Bucket:
gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload -
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.
-
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.
-
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. -
Finden Sie den Namen der Datei, die Sie hochgeladen haben?
Hinweis:
Wenn keine Logeinträge angezeigt werden, die mit „file“ beginnen, klicken Sie unten auf der Seite auf die Schaltfläche „Neuere Logs laden“. -
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, 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:
Ruby antwortet Patrick.
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, IT-Administrator |
Hallo Ruby, super, danke, ich installiere LibreOffice normalerweise mit diesem Befehl auf den Servern in unserem Büro:
Sag Bescheid, wenn du noch weitere Infos brauchst. Patrick |
Für die Containererstellung sind verschiedene Komponenten erforderlich:
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.
-
Öffnen Sie das
Dockerfile
-Manifest und fügen Sie den BefehlRUN 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
-
Ö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(); -
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'); }) -
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}`); } -
Ihre
index.js
-Datei sollte jetzt so aussehen:Hinweis:
Damit keine Formatfehler auftreten, wird empfohlen, den gesamten Code in der Dateiindex.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:
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.
-
Führen Sie folgenden Befehl aus, um den Container zu erstellen:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter
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.
-
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.
Aufgabe 7: PDF-Konvertierungsdienst testen
-
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 -
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. -
Führen Sie folgenden Befehl aus, um einige Beispieldateien hochzuladen:
gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload -
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. -
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.