In dieser Anleitung erfahren Sie, wie Sie einen internen HTTP-Endpunkt in einem VPC-Netzwerk (Virtual Private Cloud) erstellen, das Pub/Sub-Nachrichtenereignisse mithilfe von Eventarc empfängt. Weitere Informationen zu diesem Ereignisziel finden Sie unter Ereignisse an einen internen HTTP-Endpunkt in einem VPC-Netzwerk weiterleiten.
Sie können die folgenden Befehle über das Google Cloud CLI entweder in Ihrem Terminal oder in Cloud Shell ausführen.
Ziele
In dieser Anleitung wird Folgendes beschrieben:
- Erstellen Sie ein VPC-Netzwerk für das Netzwerk Ihrer cloudbasierten Ressourcen und Dienste. Ein VPC-Netzwerk ist logisch von anderen Netzwerken in Google Cloud isoliert.
- Erstellen Sie ein Subnetz. Jedes VPC-Netzwerk besteht aus einem oder mehreren IP-Adressbereichen, die als Subnetze bezeichnet werden. Subnetze sind regionale Ressourcen, denen IP-Adressbereiche zugeordnet sind.
- Erstellen Sie VPC-Firewallregeln, um Traffic zu oder von VM-Instanzen (VM-Instanzen) in Ihrem VPC-Netzwerk zuzulassen oder abzulehnen.
- Erstellen Sie einen Netzwerkanhang, mit dem ein Produzenten-VPC-Netzwerk Verbindungen zu einem Nutzer-VPC-Netzwerk initiieren kann.
- Erstellen Sie eine Compute Engine-VM-Instanz im VPC-Netzwerk.
- Webserver als Ereignisempfängerdienst auf der VM-Instanz bereitstellen
- Sie erstellen einen Eventarc-Trigger, der Pub/Sub-Ereignisse an den Ereignisempfänger auf Ihrer VM-Instanz weiterleitet.
- Screenshot: SSH-Verbindung zur VM-Instanz herstellen.
- Veröffentlichen Sie eine Nachricht in einem Pub/Sub-Thema, um ein Ereignis zu generieren, und sehen Sie sich den Text des Ereignisses im SSH-Browsertool an.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Eventarc, and Pub/Sub APIs:
gcloud services enable compute.googleapis.com
eventarc.googleapis.com pubsub.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Eventarc, and Pub/Sub APIs:
gcloud services enable compute.googleapis.com
eventarc.googleapis.com pubsub.googleapis.com - Aktualisieren Sie die Google Cloud CLI-Komponenten:
gcloud components update
- Melden Sie sich mit Ihrem -Konto an:
gcloud auth login
- Legen Sie die in dieser Kurzanleitung verwendeten Konfigurationsvariablen fest:
REGION=us-central1 ZONE=us-central1-a
-
Wenn Sie der Projektersteller sind, wird Ihnen die einfache Owner-Rolle (
roles/owner
) zugewiesen. Standardmäßig enthält diese IAM-Rolle (Identity and Access Management) die Berechtigungen, die für den vollständigen Zugriff auf die meisten Google Cloud-Ressourcen erforderlich sind. Sie können diesen Schritt überspringen.Wenn Sie nicht der Project Creator sind, müssen dem entsprechenden Hauptkonto die erforderlichen Berechtigungen für das Projekt erteilt werden. Ein Hauptkonto kann beispielsweise ein Google-Konto (für Endnutzer) oder ein Dienstkonto (für Anwendungen und Computing-Arbeitslasten) sein. Weitere Informationen finden Sie auf der Seite Rollen und Berechtigungen für Ihr Ereignisziel.
Erforderliche Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Kurzanleitung benötigen:
-
Compute-Netzwerkadministrator (
roles/compute.networkAdmin
) -
Compute-Sicherheitsadministrator (
roles/compute.securityAdmin
) -
Eventarc Admin (
roles/eventarc.admin
) -
Zugriffsberechtigter für Logbetrachtung (
roles/logging.viewAccessor
) -
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin
) -
Pub/Sub Publisher (
roles/pubsub.publisher
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Compute-Netzwerkadministrator (
- Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, um authentifizierte Pub/Sub-Push-Anfragen zu unterstützen, weisen Sie dem von Google verwalteten Dienstkonto die Rolle „Ersteller von Dienstkonto-Tokens“ (
roles/iam.serviceAccountTokenCreator
) zu. Andernfalls wird diese Rolle standardmäßig zugewiesen: Ersetzen Sie Folgendes:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
PROJECT_ID
: Ihre Google Cloud-Projekt-IDPROJECT_NUMBER
: Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Erstellen Sie ein VPC-Netzwerk im benutzerdefinierten Modus.
Ein VPC-Netzwerk ist eine virtuelle Version eines physischen Netzwerks, die innerhalb des Produktionsnetzwerks von Google implementiert wurde. Sie ermöglicht eine Verbindung für Ihre Compute Engine-VM-Instanzen.
Wenn ein VPC-Netzwerk im benutzerdefinierten Modus erstellt wird, werden keine Subnetze automatisch erstellt. Diese Art von Netzwerk bietet Ihnen vollständige Kontrolle über die Subnetze und IP-Bereiche.
gcloud compute networks create NETWORK_NAME \ --subnet-mode=custom \ --bgp-routing-mode=regional \ --mtu=1460
Ersetzen Sie NETWORK_NAME
durch einen Namen für das VPC-Netzwerk.
Wichtige Hinweise:
- Jedes neu erstellte Netzwerk muss einen Namen haben, der innerhalb desselben Projekts nur einmal vorkommt.
- Der Routingmodus
Border Gateway Protocol (BGP) steuert das Verhalten von Cloud Routern im Netzwerk und kann entweder
global
oderregional
sein. Der Standardwert istregional
. - Die maximale Übertragungseinheit (MTU) ist die größte Paketgröße des Netzwerks.
MTU kann auf einen beliebigen Wert zwischen
1300
und8896
gesetzt werden. Der Standardwert ist1460
. Bevor Sie die MTU auf einen höheren Wert als1460
setzen, lesen Sie die Informationen unter Maximale Übertragungseinheit.
Weitere Informationen finden Sie unter VPC-Netzwerke erstellen und verwalten.
Nur-IPv4-Subnetz erstellen
Ein Netzwerk kann erst verwendet werden, wenn es mindestens ein Subnetz hat.
Legen Sie einen Namen, eine Region und mindestens einen primären IPv4-Adressbereich gemäß den Subnetzregeln fest, wenn Sie ein Subnetz erstellen. Beachten Sie, dass Sie keine Instanzen in einer Region erstellen können, für die kein Subnetz definiert ist.
gcloud compute networks subnets create SUBNET_NAME \ --region=$REGION \ --network=NETWORK_NAME \ --range=10.10.10.0/24
Geben Sie für SUBNET_NAME
einen Namen für das neue Subnetz an.
Weitere Informationen finden Sie unter Subnetze.
VPC-Firewallregeln erstellen
Mit Firewallregeln können Sie den Traffic zwischen Ressourcen in einem VPC-Netzwerk auf Grundlage der Portnummer, des Tags oder des Protokolls zulassen oder ablehnen.
VPC-Firewallregeln werden auf Netzwerkebene definiert und gelten nur für das Netzwerk, in dem sie erstellt werden. Der Name für jede Regel muss jedoch für das Projekt eindeutig sein.
Erstellen Sie eine Firewallregel für Ihr VPC-Netzwerk, die eingehenden Traffic von jeder IPv4-Adresse (
0.0.0.0/0
) zu jeder Instanz im Netzwerk über Port 22 zulässt. Diese Regel ist für die Ereignisübermittlung nicht erforderlich. Erstellen Sie jedoch für diese Anleitung die Regel, damit Sie über SSH eine Verbindung zur VM herstellen können und die Zustellung des Ereignisses bestätigen:gcloud compute firewall-rules create RULE_NAME_ONE \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --direction=INGRESS \ --priority=65534 \ --action=ALLOW \ --source-ranges=0.0.0.0/0 \ --rules=tcp:22
Erstellen Sie eine Firewallregel für Ihr VPC-Netzwerk, die eingehenden Traffic von einem bestimmten IP-Adressbereich zu einer beliebigen Instanz im Netzwerk über Port 80 zulässt, da Sie auf Ihrer VM einen Webserver bereitstellen, der Port 80 überwacht:
gcloud compute firewall-rules create RULE_NAME_TWO \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --direction=INGRESS \ --priority=1000 \ --action=ALLOW \ --source-ranges=10.10.10.0/24 \ --rules=tcp:80
Ersetzen Sie
RULE_NAME_ONE
undRULE_NAME_TWO
durch eindeutige Namen für Ihre Firewallregeln.Die Verwendung von
--source-ranges
ist optional und gibt eine Liste von IP-Adressblöcken an, die eingehende Verbindungen, die der Firewallregel entsprechen, mit den Instanzen im Netzwerk durchführen dürfen. In diesem Fall entspricht der Bereich dem Bereich, der in dem zuvor erstellten Subnetz verwendet wird.Wir empfehlen, das Flag zu verwenden, um Ihre Firewallregel speziell auf Eventarc-Traffic anzuwenden. Wenn weder
--source-ranges
noch--source-tags
angegeben ist, ist--source-ranges
standardmäßig0.0.0.0/0
. Das bedeutet, dass die Regel für alle eingehenden IPv4-Verbindungen von innerhalb oder außerhalb des netzwerks gilt.
Weitere Informationen finden Sie unter VPC-Firewallregeln verwenden.
Netzwerkanhang erstellen
Ein Netzwerkanhang ist eine Ressource, mit der ein Produzenten-VPC-Netzwerk über eine Private Service Connect-Schnittstelle Verbindungen zu einem Nutzer-VPC-Netzwerk initiieren kann.
Eventarc verwendet zum Veröffentlichen von Ereignissen den Netzwerkanhang, um eine Verbindung zum internen HTTP-Endpunkt herzustellen, der in einem VPC-Netzwerk gehostet wird.
Sie können einen Netzwerkanhang erstellen, der automatisch Verbindungen von jeder Private Service Connect-Schnittstelle akzeptiert, die auf den Netzwerkanhang verweist. Erstellen Sie den Netzwerkanhang im selben Netzwerk und in derselben Region wie der HTTP-Zieldienst.
gcloud compute network-attachments create ATTACHMENT_NAME \ --region=$REGION \ --subnets=SUBNET_NAME \ --connection-preference=ACCEPT_AUTOMATIC
Ersetzen Sie ATTACHMENT_NAME
durch einen Namen für den Netzwerkanhang.
Weitere Informationen finden Sie unter Netzwerkanhänge.
VM-Instanz in einem bestimmten Subnetz erstellen
Eine Compute Engine-VM-Instanz ist eine virtuelle Maschine, die in der Infrastruktur von Google gehostet wird. Die Begriffe Compute Engine-Instanz, VM-Instanz und VM werden synonym verwendet. VM-Instanzen umfassen Google Kubernetes Engine-Cluster (GKE), Instanzen der flexiblen App Engine-Umgebung und andere Google Cloud-Produkte, die auf Compute Engine-VMs basieren.
Erstellen Sie eine Compute Engine-VM-Instanz im VPC-Netzwerk, für das Sie einen Ereignisempfängerdienst bereitstellen können.
gcloud compute instances create INSTANCE_NAME \ --zone=$ZONE \ --machine-type=e2-medium \ --subnet=SUBNET_NAME
Ersetzen Sie INSTANCE_NAME
durch einen Namen für die VM.
Weitere Informationen finden Sie unter VM-Instanz erstellen und starten.
Ereignisempfänger auf der VM bereitstellen
Stellen Sie einen Webserver auf Ihrer VM bereit, der Port 80 überwacht und Ereignisse empfängt und protokolliert.
Stellen Sie mithilfe der SSH-Schaltfläche in der Google Cloud Console eine SSH-Verbindung zu Ihrer VM-Instanz her, um eine Verbindung zur VM herzustellen.
Nachdem eine Verbindung zum SSH-Server hergestellt wurde, verwenden Sie das Terminal "SSH im Browser", um Befehle auf der VM-Instanz auszuführen.
Erstellen Sie im "SSH im Browser"-Terminal eine Textdatei mit dem Dateinamen
server.py
, die den folgenden Python-Code enthält:Starten Sie den Server und führen Sie den Server für die verbleibenden Schritte in dieser Anleitung aus:
sudo python3 server.py
Eventarc-Trigger erstellen
Sie erstellen einen Eventarc-Trigger, der ein neues Pub/Sub-Thema erstellt und Ereignisse an den auf der VM bereitgestellten Ereignisempfänger weiterleitet, wenn eine Nachricht im Pub/Sub-Thema veröffentlicht wird.
Nachdem Sie die Compute Engine API aktiviert haben, wird als Standarddienstkonto das Compute Engine-Standarddienstkonto (PROJECT_NUMBER-compute@developer.gserviceaccount.com
) verwendet. Zu Testzwecken verwendet der Trigger das Standarddienstkonto für seine Identität.
gcloud eventarc triggers create TRIGGER_NAME \ --location=$REGION \ --destination-http-endpoint-uri=http://INSTANCE_NAME.$ZONE.c.PROJECT_ID.internal \ --network-attachment="projects/PROJECT_ID/regions/$REGION/networkAttachments/ATTACHMENT_NAME" \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie PROJECT_NUMBER
durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Weitere Informationen zum Konfigurieren des Triggers finden Sie unter Ereignisse an einen internen HTTP-Endpunkt in einem VPC-Netzwerk weiterleiten.
Generieren Sie ein Pub/Sub-Thema und rufen Sie es auf.
Sie können ein Ereignis generieren, indem Sie eine Nachricht in einem Pub/Sub-Thema veröffentlichen.
Suchen Sie das Pub/Sub-Thema und legen Sie es als Umgebungsvariable fest:
export MY_TOPIC=$(gcloud eventarc triggers describe TRIGGER_NAME \ --location=$REGION \ --format='value(transport.pubsub.topic)')
Senden Sie eine Nachricht an das Pub/Sub-Thema, um ein Ereignis zu generieren:
gcloud pubsub topics publish $MY_TOPIC --message "Hello World"
Der Eventarc-Trigger leitet das Ereignis an den internen HTTP-Endpunkt in Ihrem VPC-Netzwerk weiter. Im SSH-Terminal im Browser wird der Text des Ereignisses ausgegeben. Er sollte in etwa so aussehen:
Body: { "message": { "data": "SGVsbG8gV29ybGQ=", "messageId": "8795720366614192", "publishTime": "2023-08-26T13:09:48Z" } } 10.10.10.3 - - [26/Aug/2023 13:09:49] "POST / HTTP/1.1" 200 -
Beachten Sie, dass wenn Sie den
data
-Wert vonSGVsbG8gV29ybGQ=
aus seinem Base64-Format decodieren, "Hello World" zurückgegeben wird.
Sie haben einen Ereignisempfängerdienst an einem internen HTTP-Endpunkt in einem VPC-Netzwerk bereitgestellt, einen Eventarc-Trigger erstellt sowie ein Ereignis über Pub/Sub generiert und bestätigt, dass das Ereignis wie erwartet vom Trigger zum Zielendpunkt weitergeleitet wurde.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Einzelne Ressourcen löschen
- Löschen Sie den Eventarc-Trigger:
gcloud eventarc triggers delete TRIGGER_NAME --location=$REGION
-
Löschen Sie die Instanz:
gcloud compute instances delete INSTANCE_NAME
- Löschen Sie den Netzwerkanhang:
gcloud compute network-attachments delete ATTACHMENT_NAME --region=$REGION
- Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete RULE_NAME_ONE gcloud compute firewall-rules delete RULE_NAME_TWO
- Löschen Sie das Subnetz:
gcloud compute networks subnets delete SUBNET_NAME --region=$REGION
- Löschen Sie das VPC-Netzwerk:
gcloud compute networks delete NETWORK_NAME