Cloud Tasks-Handler können auf jedem HTTP-Endpunkt mit einer externen IP-Adresse wie GKE, Compute Engine oder sogar auf einem lokalen Webserver ausgeführt werden. Ihre Aufgaben können auf zuverlässige, konfigurierbare Weise in jedem dieser Dienste ausgeführt werden.
Auf dieser Seite wird gezeigt, wie grundlegende HTTP-Zielaufgaben programmatisch erstellt und in Cloud Tasks-Warteschlangen platziert werden.
Für Aufgaben mit HTTP-Zielen (im Gegensatz zu expliziten, weniger gängigen App Engine-Zielen) gibt es zwei Möglichkeiten, Aufgaben zu erstellen:
BufferTask
-Methode: Verwenden Sie diese Methode, wenn Ihre Warteschlange so eingerichtet ist, dass Aufgaben vor einem Dienst zwischengespeichert werden. Die Warteschlange muss ein Routing auf Warteschlangenebene haben. Für die meisten Anwendungsfälle ist dies der beste Ansatz. Bei diesem Ansatz wird die MethodeBufferTask
verwendet.CreateTask
-Methode:Diese Methode ist komplexer. Sie müssen explizit ein Aufgabenobjekt erstellen. Verwenden Sie diese Methode, wenn die Aufgaben in Ihrer Warteschlange unterschiedliche Routingkonfigurationen haben. In diesem Fall legen Sie das Routing auf Aufgabenebene fest und können kein Routing auf Warteschlangenebene verwenden. Bei diesem Ansatz wird die MethodeCreateTask
verwendet.
Grundlegende Aufgabenerstellung (Methode BufferTask
)
In diesem Abschnitt wird beschrieben, wie Sie eine Aufgabe durch Senden einer HTTP-Anfrage erstellen. Die von Ihnen verwendete Methode heißt BufferTask
.
Beschränkungen
Die Methode BufferTask
unterliegt den 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 Routinginformationen hinzugefügt werden können, müssen Sie das Routing auf Warteschlangenebene verwenden. Andernfalls hat die Aufgabe keine Routinginformationen. Wenn die Warteschlange noch kein Routing auf Warteschlangenebene verwendet, finden Sie weitere Informationen unter Routing auf Warteschlangenebene für HTTP-Aufgaben konfigurieren.
Methode BufferTask
aufrufen
Die folgenden Beispiele zeigen, wie Sie eine Aufgabe durch Senden einer HTTP-POST
-Anfrage an den buffer
-Endpunkt der Cloud Tasks API erstellen.
Python
curl
Das folgende Code-Snippet zeigt ein Beispiel für die Aufgabenerstellung mit der Methode BufferTask
und 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
: ID Ihres Google Cloud-Projekts. Sie können sie abrufen, indem Sie Folgendes in Ihrem Terminal ausführen:gcloud config get-value project
LOCATION
: Der Speicherort deiner Warteschlange.QUEUE_ID
: Die ID der Warteschlange.
Erweiterte Aufgabenerstellung (Methode CreateTask
)
In diesem Abschnitt wird erläutert, wie Sie eine Aufgabe mithilfe des Aufgabenobjekts erstellen. Dazu verwenden Sie die Methode CreateTask
.
Wenn Sie eine Aufgabe mit der Methode CreateTask
erstellen, wird das Aufgabenobjekt explizit erstellt und definiert. Sie müssen den Dienst und den Handler angeben, die die Aufgabe verarbeiten.
Optional können Sie aufgabenspezifische Daten an den Handler übergeben. Sie können auch die Konfiguration für die Aufgabe optimieren, z. B. einen Zeitpunkt in der Zukunft festlegen, zu dem die Aufgabe ausgeführt werden soll, oder die Anzahl der Wiederholungen beschränken, wenn die Aufgabe fehlschlägt (siehe Erweiterte Konfiguration).
In den folgenden Beispielen wird die Methode CreateTask
aufgerufen, um mithilfe der Cloud Tasks-Clientbibliotheken eine Aufgabe zu erstellen.
C#
Python
Beachten Sie die Datei requirements.txt
:
Java
Beachten Sie die Datei pom.xml
:
PHP
Beachten Sie die Datei composer.json
:
Einfach loslegen (Go)
Node.js
Beachten Sie die Datei package.json
:
Ruby
Dienstkonten für die HTTP-Ziel-Handler-Authentifizierung einrichten
Cloud Tasks kann HTTP-Ziel-Handler aufrufen, die eine Authentifizierung erfordern, wenn Sie ein Dienstkonto mit den entsprechenden Anmeldedaten für den Zugriff auf den Handler haben.
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 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. In der Console wird ein zugehöriger E-Mail-Kontoname für das Konto erstellt. So verweisen Sie auf das Konto. Sie können auch eine Beschreibung des Zwecks des Kontos hinzufügen. Klicken Sie auf Erstellen und fortfahren.
Klicken Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt gewähren auf Rolle auswählen. Suchen Sie nach Cloud Tasks-Ersteller und wählen Sie ihn aus. Diese Rolle gewährt dem 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 Option aus. Mit dieser Rolle kann das Dienstkonto die Warteschlange autorisieren, in seinem Namen Tokens mithilfe der Anmeldedaten des Dienstkontos zu erstellen.
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-Zielaufgaben mit Authentifizierungstokens verwenden
Für die Authentifizierung zwischen Cloud Tasks und einem HTTP-Ziel-Handler, der eine solche Authentifizierung erfordert, erstellt Cloud Tasks ein Header-Token. Dieses Token basiert auf den Anmeldedaten im Dienstkonto Cloud Tasks Enqueuer
, die durch seine E-Mail-Adresse identifiziert werden. Das für die Authentifizierung verwendete Dienstkonto muss zu demselben Projekt gehören, in dem sich die Cloud Tasks-Warteschlange befindet. Die Anfrage mit dem Headertoken wird über HTTPS aus 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 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 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, überschreibt diese Konfiguration die Konfiguration auf Aufgabenebene. Wenn Sie die Authentifizierung auf Aufgabenebene konfigurieren möchten, geben Sie in der Aufgabe entweder ein ID-Token (OIDC) oder ein Zugriffstoken (OAuth) an.
Methode BufferTask
In den folgenden Beispielen werden die Standardanmeldedaten der Anwendung zur Authentifizierung verwendet, wenn die Methode BufferTask
zum Erstellen einer Aufgabe verwendet wird.
Python
Geben Sie im folgenden Codebeispiel den Wert Ihres Authentifizierungstokens an.
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
: ID Ihres Google Cloud-Projekts. Sie können sie abrufen, indem Sie Folgendes in Ihrem Terminal ausführen:gcloud config get-value project
LOCATION
: Der Speicherort deiner Warteschlange.QUEUE_ID
: Die ID der Warteschlange.ACCESS_TOKEN
: Ihr Zugriffstoken. Sie können sie abrufen, indem Sie Folgendes in Ihrem Terminal ausführen:gcloud auth application-default login
gcloud auth application-default print-access-token
Methode CreateTask
In den folgenden Beispielen wird die Methode CreateTask
mit den Cloud Tasks-Clientbibliotheken verwendet, um eine Aufgabe zu erstellen, die auch das Erstellen eines Header-Tokens enthält. 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 sprachbasierten OAuth-Parameter.
Python
Beachten Sie die Datei requirements.txt
:
Java
Beachten Sie die Datei pom.xml
:
Einfach loslegen (Go)
Node.js
Beachten Sie die Datei package.json
:
Eigene HTTP-Zielaufgaben-Handler bereitstellen
HTTP Target-Aufgaben-Handler sind den App Engine-Aufgaben-Handlern mit den folgenden Ausnahmen sehr ähnlich:
- Zeitüberschreitungen: Für alle HTTP-Ziel-Aufgaben-Handler beträgt das Standardzeitlimit 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.
Headers: Eine HTTP-Zielanfrage enthält Header, die von der Warteschlange festgelegt werden und aufgabenspezifische Informationen enthalten, die der 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ä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 Zugriff erlauben. Der Bildschirm Zugriff gewähren wird geöffnet.
Fügen Sie im Bereich Hauptkonten hinzufügen eine E-Mail-Adresse im folgenden Format hinzu:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Ersetzen Sie PROJECT_NUMBER durch die Projektnummer von oben.
Wählen Sie im Abschnitt Rollen zuweisen den Cloud Tasks-Dienst-Agent aus.
Klicken Sie auf Speichern.
gcloud verwenden
Ermitteln 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 PROJECT_ID durch Ihre Projekt-ID und PROJECT_NUMBER durch die Projektnummer von oben.
Erweiterte Konfiguration
Es gibt eine Reihe von Attributen, die Sie in Ihrer Aufgabe konfigurieren können. Eine vollständige Liste finden Sie in der Ressourcendefinition der Aufgabe.
Beispiele für Attribute, die Sie anpassen können:
- Benennung:Wenn Sie einen Namen für die Aufgabe angeben, kann Cloud Tasks diesen Namen verwenden, um die Deduplizierung von Aufgaben sicherzustellen. Die hierfür erforderliche Verarbeitung kann jedoch die Latenz erhöhen.
- Planung:Sie können eine Aufgabe für einen späteren Zeitpunkt planen. Nur unterstützt für
CreateTask
(nicht unterstützt fürBufferTask
) - Wiederholungskonfiguration: Konfigurieren Sie das Wiederholungsverhalten für eine Aufgabe, wenn die Aufgabe fehlschlägt. Nur unterstützt für
CreateTask
(nicht unterstützt fürBufferTask
)
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.