Cloud Tasks-Handler können auf jedem HTTP-Endpunkt mit einer externen IP-Adresse ausgeführt werden, z. B. GKE, Compute Engine oder sogar auf einem lokalen Webserver. Ihre Aufgaben können mit jedem dieser Dienste zuverlässig und konfigurierbar ausgeführt werden.
Auf dieser Seite wird gezeigt, wie Sie grundlegende HTTP Target-Aufgaben programmatisch erstellen und in Cloud Tasks-Warteschlangen platzieren.
Für Aufgaben mit HTTP-Zielen (im Gegensatz zu expliziten App Engine-Zielen, die weniger häufig sind) gibt es zwei Möglichkeiten, Aufgaben zu erstellen:
CreateTask
-Methode:Sie müssen explizit ein Aufgabenobjekt erstellen. Verwenden Sie diese Methode, wenn die Aufgaben in Ihrer Warteschlange unterschiedliche Routingkonfigurationen haben. In diesem Fall geben Sie das Routing auf Aufgabenebene an und können kein Routing auf Warteschlangenebene verwenden. Bei diesem Ansatz wird die MethodeCreateTask
verwendet.BufferTask
-Methode:Verwenden Sie diese Methode, wenn Ihre Warteschlange so eingerichtet ist, dass Aufgaben vor einem Dienst gepuffert werden. Die Warteschlange muss ein Routing auf Warteschlangenebene haben. Bei diesem Ansatz wird die MethodeBufferTask
verwendet.
Aufgabe mit der Methode CreateTask
erstellen
In diesem Abschnitt wird beschrieben, wie Sie eine Aufgabe erstellen, indem Sie das Aufgabenobjekt erstellen. Sie verwenden die Methode CreateTask
.
Wenn Sie eine Aufgabe mit der Methode CreateTask
erstellen, erstellen und definieren Sie das Aufgabenobjekt explizit. Sie müssen den Dienst und den Handler angeben, mit denen die Aufgabe verarbeitet wird.
Optional können Sie 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 (siehe Erweiterte Konfiguration).
In den folgenden Beispielen wird die Methode CreateTask
aufgerufen, um eine Aufgabe mit den Cloud Tasks-Clientbibliotheken zu erstellen.
C#
Go
Java
Beachten Sie die Datei pom.xml
:
Node.js
Beachten Sie die Datei package.json
:
PHP
Beachten Sie die Datei composer.json
:
Python
Beachten Sie die Datei requirements.txt
:
Ruby
Aufgabe mit der Methode BufferTask
erstellen
In diesem Abschnitt wird beschrieben, wie Sie eine Aufgabe erstellen, indem Sie eine HTTP-Anfrage senden. Die verwendete Methode heißt BufferTask
.
Beschränkungen
Für die Methode BufferTask
gelten die folgenden Einschränkungen:
Clientbibliotheken:Die Methode
BufferTask
wird in Clientbibliotheken nicht unterstützt.RPC API:Die Methode
BufferTask
wird in der RPC API nicht unterstützt.Routing auf Aufgabenebene:Diese Methode unterstützt kein Routing auf Aufgabenebene. Da beim Erstellen einer Aufgabe auf diese Weise keine Routing-Informationen hinzugefügt werden können, müssen Sie das Routing auf Warteschlangenebene verwenden. Andernfalls enthält die Aufgabe keine Routing-Informationen. Wenn in Ihrer Warteschlange noch kein Routing auf Warteschlangenebene verwendet wird, lesen Sie den Abschnitt Routing auf Warteschlangenebene für HTTP-Aufgaben konfigurieren.
Rufen Sie die Methode BufferTask
auf.
In den folgenden Beispielen wird gezeigt, wie Sie eine Aufgabe erstellen, indem Sie eine HTTP-POST
-Anfrage an den Endpunkt buffer
der Cloud Tasks API senden.
curl
Das folgende Code-Snippet zeigt ein Beispiel für die Erstellung von Aufgaben mit der Methode BufferTask
unter Verwendung von curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Ersetzen Sie Folgendes:
HTTP_METHOD
: Die HTTP-Methode für Ihre Anfrage, z. B.GET
oderPOST
.PROJECT_ID
: die ID Ihres Google Cloud Projekts. Sie können sie abrufen, indem Sie im Terminal Folgendes ausführen:gcloud config get-value project
LOCATION
: Der Standort Ihrer Warteschlange.QUEUE_ID
: Die ID Ihrer Warteschlange.
Python
Dienstkonto 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.
Sie können Ihr aktuelles Dienstkonto verwenden, wenn Sie ihm die entsprechenden Rollen zuweisen. 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 Google Cloud Console die Seite Dienstkonten auf.
Wählen Sie bei Bedarf das entsprechende Projekt aus.
Klicken Sie auf Dienstkonto erstellen.
Geben Sie im Abschnitt Dienstkontodetails einen Namen für das Konto ein. Die Konsole erstellt einen zugehörigen E-Mail-Kontonamen für das Konto. So verweisen Sie auf das Konto. Sie können auch eine Beschreibung des Kontos hinzufügen. Klicken Sie auf Erstellen und fortfahren.
Klicken Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen auf Rolle auswählen. Suchen Sie nach Cloud Tasks Enqueuer und wählen Sie die Rolle aus. Dadurch erhält das Dienstkonto die Berechtigung, Aufgaben zur Warteschlange hinzuzufügen.
Klicken Sie auf + Weitere Rolle hinzufügen.
Klicken Sie auf Rolle auswählen. Suchen Sie nach Dienstkontonutzer und wählen Sie die Rolle aus. Mit dieser Rolle kann das Dienstkonto die Warteschlange autorisieren, mithilfe der Anmeldedaten des Dienstkontos in seinem Namen Tokens zu erstellen.
Wenn Ihr Handler Teil von Google Cloudist, 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 in Google Cloud erfordert eine andere Rolle. Um beispielsweise auf einen Handler in Cloud Run zuzugreifen, gewähren Sie die Rolle Cloud Run Invoker. 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-Zielaufgaben mit Authentifizierungstokens verwenden
Zur Authentifizierung zwischen Cloud Tasks und einem HTTP-Ziel-Handler, für den eine solche Authentifizierung erforderlich ist, erstellt Cloud Tasks ein Header-Token. Dieses Token basiert auf den Anmeldedaten im Dienstkonto Cloud Tasks Enqueuer
, die durch ihre E-Mail-Adresse identifiziert werden. Das für die Authentifizierung verwendete Dienstkonto muss Teil desselben Projekts sein, in dem sich Ihre 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 im Allgemeinen für jeden Handler verwendet werden, der auf Google Cloudausgeführt wird, z. B. in Cloud Run Functions oder Cloud Run. Die Hauptausnahme betrifft Google-APIs, die auf *.googleapis.com
gehostet werden: Diese APIs erwarten ein Zugriffstoken.
Sie können die Authentifizierung auf Warteschlangen- oder auf Aufgabenebene konfigurieren. Informationen zum Konfigurieren der Authentifizierung auf Warteschlangenebene finden Sie unter Cloud Tasks-Warteschlangen erstellen. Wenn die Authentifizierung auf Warteschlangenebene konfiguriert ist, wird die Konfiguration auf Aufgabenebene überschrieben. Wenn Sie die Authentifizierung auf Aufgabenebene konfigurieren möchten, geben Sie entweder ein ID-Token (OIDC) oder ein Zugriffstoken (OAuth) in der Aufgabe selbst an.
Methode CreateTask
In den folgenden Beispielen wird die Methode CreateTask
mit den Cloud Tasks-Clientbibliotheken verwendet, um eine Aufgabe zu erstellen, die auch die Erstellung eines Header-Tokens umfasst. In den Beispielen werden ID-Tokens verwendet.
Wenn Sie ein Zugriffstoken verwenden, ersetzen Sie den OIDC-Parameter beim Erstellen der Anfrage durch den sprachspezifischen OAuth-Parameter.
Go
Java
Beachten Sie die Datei pom.xml
:
Node.js
Beachten Sie die Datei package.json
:
Python
Beachten Sie die Datei requirements.txt
:
Methode BufferTask
In den folgenden Beispielen werden Standardanmeldedaten für Anwendungen verwendet, um sich bei der Verwendung der Methode BufferTask
zum Erstellen einer Aufgabe zu authentifizieren.
curl
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Ersetzen Sie Folgendes:
HTTP_METHOD
: Die HTTP-Methode für Ihre Anfrage, z. B.GET
oderPOST
.PROJECT_ID
: die ID Ihres Google Cloud Projekts. Sie können sie abrufen, indem Sie im Terminal Folgendes ausführen:gcloud config get-value project
LOCATION
: Der Standort Ihrer Warteschlange.QUEUE_ID
: Die ID Ihrer Warteschlange.ACCESS_TOKEN
: Ihr Zugriffstoken. Sie können sie abrufen, indem Sie im Terminal Folgendes ausführen:gcloud auth application-default login
gcloud auth application-default print-access-token
Python
Geben Sie im folgenden Codebeispiel den Wert Ihres Authentifizierungstokens an.
Eigene 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 Ihren 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-Zielanfrage enthält von der Warteschlange festgelegte Header, die aufgabenspezifische Informationen enthalten, die Ihr Handler verwenden kann. 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ätsquelle verwendet werden.
Wenn diese Header in einer externen Nutzeranfrage an Ihre App vorhanden waren, werden sie durch die internen ersetzt. Eine Ausnahme bilden 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 hinzufügen
Sie können Ihrem Cloud Tasks-Dienstkonto, dem primären Dienst-Agent für Cloud Tasks, manuell die Rolle Cloud Tasks-Dienst-Agent (roles/cloudtasks.serviceAgent
) hinzufügen.
Dies ist nur erforderlich, wenn Sie die Cloud Tasks API vor dem 19. März 2019 aktiviert haben.
Console
- Suchen Sie die Projektnummer für Ihr Google Cloud Projekt auf der Willkommensseite der Google Cloud Console und kopieren Sie sie.
Rufen Sie in der Google Cloud Console die Seite IAM auf.
Klicken Sie auf Zugriff erlauben. Der Bereich Zugriff erlauben wird geöffnet.
Fügen Sie im Abschnitt Hauptkonten hinzufügen eine E-Mail-Adresse in diesem Format hinzu:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Ersetzen Sie
PROJECT_NUMBER
durch die Google Cloud Projektnummer.Suchen Sie im Abschnitt Rollen zuweisen nach Cloud Tasks Service Agent und wählen Sie die Rolle aus.
Klicken Sie auf Speichern.
gcloud
Suchen Sie Ihre Projektnummer:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
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 Folgendes:
PROJECT_ID
: Ihre Google Cloud -Projekt-ID.PROJECT_NUMBER
: Ihre Google Cloud-Projektnummer.
Andere Konfigurationen
Es gibt eine Reihe von Aufgabenattributen, die Sie konfigurieren können. Eine vollständige Liste finden Sie in der Ressourcendefinition für Aufgaben. Sie können beispielsweise die folgenden Attribute anpassen:
- Benennung: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.
- Planung:Sie können eine Aufgabe für einen späteren Zeitpunkt planen. Diese Funktion wird nur für
CreateTask
unterstützt, nicht fürBufferTask
.
Sie können auch Warteschlangenattribute wie Routing-Überschreibungen, Ratenlimits und Wiederholungsparameter konfigurieren. Diese Konfigurationen werden auf alle Aufgaben in einer Warteschlange angewendet. Weitere Informationen finden Sie unter Cloud Tasks-Warteschlangen konfigurieren.
Nächste Schritte
- Weitere Informationen zu HTTP-Zielaufgaben finden Sie in der RPC-API-Referenz.
- Weitere Informationen zu HTTP-Zielaufgaben finden Sie in der Referenz zur REST API.