Mit dieser Version von HTTP Targets können Cloud Tasks-Handler jetzt auf jedem HTTP-Endpunkt mit einer öffentlichen IP-Adresse ausgeführt werden, z. B. in Cloud Functions, Cloud Run, GKE, Compute Engine oder sogar auf einem lokalen Webserver. Ihre Aufgaben können mit jedem dieser Dienste zuverlässig und konfigurierbar ausgeführt werden.
Diese Seite zeigt, wie HTTP Target-Aufgaben programmgesteuert erstellt und in Warteschlangen für Cloud Tasks gestellt werden. Bitte beachten Sie, dass einige der auf dieser Seite verlinkten Ressourcen ggf. nur auf Englisch verfügbar sind. Wenn Sie eine Aufgabe verarbeiten möchten, müssen Sie zuerst ein neues Aufgabenobjekt erstellen und in eine Warteschlange einreihen. Sie können den Dienst und den Handler, mit denen die Aufgabe verarbeitet wird, ausdrücklich angeben und optional aufgabenspezifische Daten an den Handler weiterleiten. Außerdem können Sie die Konfiguration der Aufgabe genauer festlegen. Beispielsweise können Sie einen zukünftigen Zeitpunkt angeben, an dem die Aufgabe ausgeführt werden soll, oder die Anzahl ihrer Wiederholungen im Fall von Fehlversuchen beschränken. Wenn Sie einen Namen für die Aufgabe angeben, kann Cloud Tasks diesen Namen verwenden, um die Deduplizierung von Aufgaben zu gewährleisten. Die erforderliche Verarbeitung kann jedoch die Latenz erhöhen.
Im Allgemeinen erstellen Sie Aufgaben in Form einer HTTP-Anfrage. Wenn Sie die Clientbibliotheken und ein Dienstkonto wie in den folgenden Beispielen verwenden, können Sie die Kommunikationsdetails mit dem Cloud Tasks-Server verwalten und Aufgaben leichter erstellen.
HTTP Target-Aufgaben erstellen
In den folgenden Beispielen werden HTTP Target-Aufgabenanfragen beschrieben, die eine vollständige Aufgabe, einschließlich der URL des Aufgaben-Handlers, erstellen.
C#
Python
Beachten Sie die Datei requirements.txt
:
Java
Beachten Sie die Datei pom.xml
:
PHP
Beachten Sie die Datei composer.json
:
Go
Node.js
Beachten Sie die Datei package.json
:
Ruby
Dienstkonten für die HTTP Target-Handler-Authentifizierung einrichten
Cloud Tasks kann HTTP Target-Handler aufrufen, die eine Authentifizierung erfordern, wenn Ihr Dienstkonto die entsprechenden Anmeldeinformationen für den Zugriff auf den Handler hat.
Wenn Sie ein aktuelles Dienstkonto haben, das Sie verwenden möchten, können Sie das tun. Gewähren Sie ihm einfach die entsprechenden Rollen. In dieser Anleitung wird das Erstellen eines neuen Dienstkontos speziell für diese Funktion beschrieben. Das vorhandene oder neue Dienstkonto, das für die Cloud Tasks-Authentifizierung verwendet wird, muss sich im selben Projekt wie Ihre Cloud Tasks-Warteschlangen befinden.
Rufen Sie in der Console die Seite Dienstkonten auf.
Wählen Sie bei Bedarf das entsprechende Projekt aus.
Klicken Sie auf ** Dienstkonto erstellen**.
Geben Sie dem Konto einen Anzeigenamen. Die Konsole erstellt einen zugehörigen E-Mail-Kontonamen für das Konto. So verweisen Sie auf das Konto. Sie können bei Bedarf auch eine Beschreibung des Kontos hinzufügen.
Klicken Sie auf Erstellen und fortfahren.
Klicken Sie auf Rolle auswählen und wählen Sie Cloud Tasks > Cloud Tasks-Ersteller aus. Diese Rolle berechtigt das Dienstkonto, der Warteschlange Aufgaben hinzuzufügen.
Klicken Sie auf + Weitere Rolle hinzufügen.
Klicken Sie auf Rolle auswählen und wählen Sie Dienstkonten > Dienstkontonutzer aus. Mit dieser Rolle kann das Dienstkonto die Autorisierung der Warteschlange zum Erstellen von Tokens mithilfe der Anmeldedaten des Dienstkontos autorisieren.
Wenn Ihr Handler Teil von Google Cloud ist, weisen Sie dem Dienstkonto die Rolle zu, die mit dem Zugriff auf den Dienst verknüpft ist, auf dem der Handler ausgeführt wird. Jeder Dienst innerhalb von Google Cloud benötigt eine andere Rolle. Um beispielsweise auf einen Handler in Cloud Run zuzugreifen, ist die Rolle Cloud Run Invoker erforderlich usw. Sie können das gerade erstellte Dienstkonto oder ein anderes Dienstkonto in Ihrem Projekt verwenden.
Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.
Cloud Tasks selbst muss ein eigenes Dienstkonto haben, dem die Rolle Cloud Tasks Service Agent
zugewiesen ist. Auf diese Weise können Header-Tokens basierend auf den Anmeldedaten generiert werden, die mit dem Cloud Tasks-Dienstkonto verknüpft sind, um sich bei Ihrem Handler-Ziel zu authentifizieren. Das Cloud Tasks-Dienstkonto mit dieser Rolle wird automatisch erstellt, wenn Sie die Cloud Tasks API aktivieren, es sei denn, Sie haben sie vor dem 19. März 2019 aktiviert. In diesem Fall müssen Sie die Rolle manuell hinzufügen.
HTTP Target-Aufgaben mit Authentifizierungstokens verwenden
Zur Authentifizierung zwischen Cloud Tasks und einem HTTP Target-Handler, der eine solche Authentifizierung erfordert, erstellt Cloud Tasks ein Header-Token. Dieses Token basiert auf den Anmeldedaten im Dienstkonto Cloud Tasks Enqueuer
, das durch seine E-Mail-Adresse identifiziert wird. Das zur Authentifizierung verwendete Dienstkonto muss zum selben Projekt gehören, in dem sich die Cloud Tasks-Warteschlange befindet. Die Anfrage mit dem Header-Token wird über HTTPS von der Warteschlange an den Handler gesendet. Sie können entweder ein ID-Token oder ein Zugriffstoken verwenden.
ID-Tokens sollten in der Regel für jeden Handler verwendet werden, der in Google Cloud ausgeführt wird, z. B. in Cloud Functions oder Cloud Run. Die Hauptausnahme ist für Google APIs, die auf *.googleapis.com
gehostet werden: Diese APIs erwarten ein Zugriffstoken.
Sie geben entweder ein ID-Token (OIDC) oder ein OAuth-Token (OAuth) in der Aufgabe selbst an.
In den folgenden Beispielen werden Aufgabenanfragen beschrieben, die auch die Erstellung eines Header-Tokens umfassen. In den Beispielen werden ID-Tokens verwendet. Wenn Sie ein Zugriffstoken verwenden möchten, ersetzen Sie beim Erstellen der Anfrage den OIDC-Parameter durch den sprachspezifischen OAuth-Parameter.
Python
Beachten Sie die Datei requirements.txt
:
Java
Beachten Sie die Datei pom.xml
:
Go
Node.js
Beachten Sie die Datei package.json
:
Eigenen HTTP Target-Aufgaben-Handler bereitstellen
HTTP Target-Aufgaben-Handler sind den App Engine-Aufgaben-Handlern mit den folgenden Ausnahmen sehr ähnlich:
- Zeitüberschreitungen: Für alle HTTP Target-Aufgaben-Handler beträgt die Standardzeitüberschreitung 10 Minuten, maximal 30 Minuten.
- Authentifizierungslogik: Wenn Sie eigenen Code in den Zieldienst schreiben, um das Token zu validieren, sollten Sie ein ID-Token verwenden. Weitere Informationen dazu finden Sie unter OpenID Connect im Abschnitt Validating an ID token.
Header: Eine HTTP Target-Anfrage enthält von der Warteschlange festgelegte Header, die aufgabenspezifische Informationen enthalten, die vom Handler verwendet werden können. Diese ähneln den in App Engine-Aufgabenanfragen festgelegten Headern, sind jedoch nicht mit diesen identisch. Diese Header enthalten nurnur Informationen. Sie sollten nicht als Identitätsquellen verwendet werden.
Wenn diese Header in einer externen Nutzeranfrage an Ihre Anwendung vorhanden waren, werden sie durch die internen ersetzt. Die einzige Ausnahme dabei sind Anfragen von angemeldeten Administratoren der Anwendung, die Header für Testzwecke festlegen dürfen.
HTTP-Zielanfragen enthalten immer die folgenden Header:
Header Beschreibung X-CloudTasks-QueueName
Der Name der Warteschlange. X-CloudTasks-TaskName
Der "kurze" Name der Aufgabe oder, wenn bei der Erstellung kein Name festgelegt wurde, eine vom System generierte eindeutige ID. Dies ist der my-task-id
-Wert im vollständigen Aufgabennamen, also task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id
.X-CloudTasks-TaskRetryCount
Die Anzahl der Ausführungsversuche für diese Aufgabe. Für den ersten Versuch lautet dieser Wert 0
. Diese Zahl umfasst Versuche, bei denen die Aufgabe aufgrund von 5XX-Fehlercodes fehlgeschlagen ist und die Ausführungsphase nicht erreicht wurde.X-CloudTasks-TaskExecutionCount
Die Gesamtzahl der Antworten, die die Aufgabe vom Handler erhalten hat. Da Cloud Tasks eine Aufgabe löscht, sobald eine erfolgreiche Antwort empfangen wurde, sind alle vorherigen Handler-Antworten fehlgeschlagen. Diese Zahl umfasst keine Fehler aufgrund von 5XX-Fehlercodes. X-CloudTasks-TaskETA
Die geplante Zeit für eine Aufgabe, angegeben in Sekunden seit dem 1. Januar 1970. Außerdem können Anfragen von Cloud Tasks die folgenden Header enthalten:
Header Beschreibung X-CloudTasks-TaskPreviousResponse
Der HTTP-Antwortcode aus der vorangegangenen Wiederholung. X-CloudTasks-TaskRetryReason
Der Grund für die Wiederholung der Aufgabe.
Cloud Tasks-Dienst-Agent-Rolle manuell zu Ihrem Cloud Tasks-Dienstkonto hinzufügen
Dies ist nur erforderlich, wenn Sie die Cloud Tasks API vor dem 19. März 2019 aktiviert haben.
Console verwenden
- Suchen Sie auf der Seite mit den Google Cloud-Projekteinstellungen nach der Projektnummer Ihres Projekts.
- Notieren Sie die Nummer.
- Öffnen Sie die Seite der IAM-Admin-Konsole.
- Klicken Sie auf
Add
. Der BildschirmAdd members
wird geöffnet. Fügen Sie im Dialogfeld "Neue Mitglieder" eine E-Mail-Adresse im folgenden Format hinzu:
service-[project-number]@gcp-sa-cloudtasks.iam.gserviceaccount.com
Ersetzen Sie [project-number] durch Ihre Projektnummer von oben.
Wählen Sie im Drop-down-Menü
Select a role
die OptionService Management
->Cloud Tasks Service Agent
aus.Klicken Sie auf
Save
.
gcloud verwenden
Suchen Sie Ihre Projektnummer:
gcloud projects describe [project-id] --format='table(projectNumber)'
Dabei wird [project-id] durch Ihre Projekt-ID ersetzt.
Notieren Sie die Nummer.
Weisen Sie dem Cloud Tasks-Dienstkonto die Rolle
Cloud Tasks Service Agent
mit der Projektnummer zu, die Sie kopiert haben:gcloud projects add-iam-policy-binding [project-id] --member serviceAccount:service-[project-number]@gcp-sa-cloudtasks.iam.gserviceaccount.com --role roles/cloudtasks.serviceAgent
Ersetzen Sie [project-id] durch Ihre Projekt-ID und [project-number] durch die Projektnummer von weiter oben.
Weitere Informationen
- Weitere Informationen zu HTTP-Zielaufgaben in der RPC-API-Referenz
- Weitere Informationen zu HTTP Target-Aufgaben in der Referenz zur REST API