In dieser Anleitung wird gezeigt, wie Sie eine Pub/Sub-Funktion bereitstellen. Dazu laden Sie eine ZIP-Datei mit dem Funktionsquellcode in einen Cloud Storage-Bucket hoch und verwenden Terraform zum Bereitstellen der Ressourcen. Terraform ist ein Open-Source-Tool, mit dem Sie Google Cloud-Ressourcen mit deklarativen Konfigurationsdateien bereitstellen können.
In dieser Anleitung wird als Beispiel eine Funktion von Node.js verwendet. Sie funktioniert jedoch auch mit Python-, Go- und Java-Funktionen. Die Anleitungen sind identisch, unabhängig davon, welche dieser Laufzeiten Sie verwenden.
Lernziele
- Erfahren Sie, wie Sie mit Terraform eine Pub/Sub-Funktion bereitstellen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Weitere Informationen finden Sie unter Cloud Functions-Preise.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Vorbereitung
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs aktivieren.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs aktivieren.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Bereiten Sie die Entwicklungsumgebung vor.
Wenn Sie die gcloud CLI bereits installiert haben, aktualisieren Sie sie mit dem folgenden Befehl:
gcloud components update
Umgebung einrichten
In dieser Anleitung führen Sie Befehle in Cloud Shell aus. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI einschließlich der Google Cloud-Befehlszeile vorinstalliert ist. Auch die Werte für Ihr aktuelles Projekt sind bereits festgelegt. Die Initialisierung von Cloud Shell kann mehrere Minuten dauern:
Anwendung vorbereiten
Führen Sie in Cloud Shell folgende Schritte aus:
Klonen Sie das Repository der Beispielanwendung in Ihre Cloud Shell-Instanz:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Wechseln Sie in das Verzeichnis, das den Cloud Functions-Beispielcode enthält:
cd nodejs-docs-samples/functions/v2/helloPubSub/
Das in dieser Anleitung verwendete Node.js-Beispiel ist eine grundlegende Pub/Sub-Funktion "Hello World".
Erstellen Sie eine ZIP-Datei mit dem Quellcode der Funktion, den Terraform in einen Cloud Storage-Bucket hochlädt:
zip -r function-source.zip .
Beachten Sie, dass das Stammverzeichnis der ZIP-Datei das Stammverzeichnis Ihres Quellcodes der Funktion sein muss. Der obige Befehl enthält also die Dateien im Verzeichnis
helloworld
, aber nicht das Verzeichnis selbst.
Erstellen Sie die Datei main.tf
:
Erstellen Sie im Verzeichnis
nodejs-docs-samples/functions/
einemain.tf
-Datei für die Terraform-Konfiguration:touch main.tf
Kopieren Sie diese Terraform-Konfiguration in Ihre
main.tf
-Datei:Bearbeiten Sie die Datei
main.tf
, um sicherzustellen, dass sie die richtigen Werte für die folgenden Elemente enthält. Sie müssen diese Datei bearbeiten, wenn sich Ihre Konfiguration ändert, z. B. um eine andere Laufzeit zu verwenden oder eine andere Funktion bereitzustellen:- Laufzeit: In diesem Beispiel lautet die Laufzeit
nodejs16
. - Funktionseinstiegspunkt: In diesem Beispiel ist der Funktionseinstiegspunkt
helloPubSub
. - Pfad zur ZIP-Datei: Wenn Sie Ihre
main.tf
-Datei wie oben beschrieben im Verzeichnisnodejs-docs-samples/functions/
abgelegt haben, lautet der Pfad./v2/helloPubSub/function-source.zip
.
- Laufzeit: In diesem Beispiel lautet die Laufzeit
Terraform initialisieren
Führen Sie in Cloud Shell den folgenden Befehl aus, um Terraform zu initialisieren:
docker run -v $(pwd):/app -w /app hashicorp/terraform:0.12.0 init
Sie verwenden das öffentliche Docker-Image für Terraform. Docker ist bereits in Cloud Shell installiert. Das aktuelle Arbeitsverzeichnis wird als Volume bereitgestellt, damit der Docker-Container die Terraform-Konfigurationsdatei lesen kann.
Führen Sie diesen Befehl aus, um die erforderlichen Plug-ins hinzuzufügen und das Verzeichnis
.terraform
zu erstellen:terraform init
Terraform-Konfiguration validieren
Sehen Sie sich eine Vorschau der Terraform-Konfiguration an. Dieser Schritt ist optional, aber Sie können prüfen, ob die Syntax von main.tf
korrekt ist. Dieser Befehl zeigt eine Vorschau der erstellten Ressourcen an:
terraform plan
Wenden Sie die Terraform-Konfiguration an:
Stellen Sie die Funktion bereit, indem Sie die Konfiguration anwenden. Geben Sie bei Aufforderung yes
ein.
terraform apply
Funktion auslösen
So testen Sie die Pub/Sub-Funktion:
Veröffentlichen Sie eine Nachricht zum Thema (in diesem Beispiel lautet der Themenname
functions2-topic
):gcloud pubsub topics publish TOPIC_NAME --message="Friend"
Lesen Sie die Funktionslogs, um das Ergebnis anzuzeigen, wobei
FUNCTION_NAME
der Name Ihrer Funktion ist (in diesem Beispiel lautet der Funktionsname einfachfunction
):gcloud beta functions logs read FUNCTION_NAME --gen2
Die Logging-Ausgabe sollte die neue Nachricht "Friend" enthalten.
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie alle erstellten Elemente löschen, sodass keine weiteren Kosten anfallen.
Mit Terraform können Sie alle in der Konfigurationsdatei definierten Ressourcen mit dem Befehl terraform destroy
entfernen:
terraform destroy
Geben Sie yes
ein, damit Terraform Ihre Ressourcen löschen kann.