In dieser Anleitung erfahren Sie, wie Sie mit Cloud Tasks in einer App Engine-Anwendung eine Cloud Run-Funktion auslösen und eine geplante E-Mail senden.
Code verstehen
In diesem Abschnitt werden der App-Code und dessen Funktionsweise erläutert.
Aufgabe erstellen
Die Indexseite wird mithilfe von Handlern in app.yaml
bereitgestellt. Die für die Aufgabenerstellung erforderlichen Variablen werden als Umgebungsvariablen übergeben.
Dieser Code erstellt den Endpunkt /send-email
. Dieser Endpunkt verarbeitet Formularübermittlungen von der Indexseite und leitet diese Daten an den Aufgabenerstellungscode weiter.
Dieser Code erstellt die Aufgabe und sendet sie an die Cloud Tasks-Warteschlange. So erstellt der Code die Aufgabe:
Angabe des Zieltyps als
HTTP Request
.Angabe des zu verwendenden
HTTP method
und desURL
des Ziels.Einstellen der
Content-Type
header toapplication/json
Downstream-Anwendungen kann die strukturierte Nutzlast parsen.E-Mail-Konto für Dienstkonto hinzufügen, damit Cloud Tasks Anmeldedaten für das Anforderungsziel bereitstellen kann, für das eine Authentifizierung erforderlich ist. Das Dienstkonto wird separat erstellt.
Prüfen, ob die Nutzereingabe für das Datum innerhalb der maximalen 30 Tage liegt, und der Anfrage als Feld
scheduleTime
hinzufügen.
E-Mail erstellen
Dieser Code erstellt die Cloud Run-Funktion, die das Ziel für die Cloud Tasks-Anfrage ist. Es verwendet den Anfragetext, um eine E-Mail zu erstellen und über die SendGrid API zu senden.
Anwendung vorbereiten
SendGrid einrichten
Ein SendGrid-Konto erstellen
- Das können Sie entweder über die SendGrid-Website tun
- oder mit dem Google Cloud Launcher, der für Sie ein Konto erstellt und die Abrechnung übernimmt. Weitere Informationen finden Sie unter Ein SendGrid-Konto mit Cloud Launcher erstellen.
Erstellen Sie einen SendGrid API-Schlüssel:
Melden Sie sich bei Ihrem SendGrid-Konto an.
Öffnen Sie im linken Navigationsbereich Einstellungen und klicken Sie auf API-Schlüssel.
Klicken Sie auf API-Schlüssel erstellen und wählen Sie den eingeschränkten Zugriff aus. Wählen Sie unter dem Header E-Mail senden Vollständiger Zugriff aus.
Kopieren Sie den API-Schlüssel (er wird nur einmal angezeigt) in ein Dokument, um am Ende der Anleitung, wenn Sie die Cloud Functions-Funktionen aufrufen, darauf zurückgreifen zu können.
Quellcode herunterladen
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält:
cd cloud-tasks/
Cloud Run-Funktion bereitstellen
Rufen Sie das Verzeichnis
function/
auf:cd function/
Die Funktion bereitstellen:
gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http \ --no-allow-unauthenticated \ --set-env-vars SENDGRID_API_KEY=SENDGRID_API_KEY \
Ersetzen Sie
SENDGRID_API_KEY
durch Ihren API-Schlüssel.Dieser Befehl verwendet Flags:
--trigger-http
, um den Cloud Run-Funktions-Triggertyp anzugeben.--no-allow-unauthenticated
, um anzugeben, dass für den Funktionsaufruf eine Authentifizierung erforderlich ist.--set-env-var
, um Ihre SendGrid-Anmeldedaten festzulegen
Legen Sie die Zugriffssteuerung für die Funktion so fest, dass nur authentifizierte Nutzer zugelassen werden.
Wählen Sie in der Cloud Run Functions-Benutzeroberfläche die Funktion
sendEmail
aus.Wenn Sie keine Informationen zu Berechtigungen für
sendEmail
sehen, klicken Sie rechts oben auf Infofeld ansehen.Klicken Sie oben auf die Schaltfläche Hauptkonten hinzufügen.
Legen Sie Neue Hauptkonten auf
allAuthenticatedUsers
fest.Legen Sie die Rolle fest.
- Funktionen der 1. Generation:Legen Sie die Rolle auf
Cloud Function Invoker
fest. - Funktionen der 2. Generation:Legen Sie die Rolle auf
Cloud Run Invoker
fest.
- Funktionen der 1. Generation:Legen Sie die Rolle auf
Klicken Sie auf SPEICHERN.
Cloud Tasks-Warteschlange erstellen
Erstellen Sie eine Warteschlange mit dem folgenden Befehl
gcloud
:gcloud tasks queues create my-queue --location=LOCATION
Ersetzen Sie
LOCATION
durch den gewünschten Standort für die Warteschlange, z. B.us-west2
. Wenn Sie den Standort nicht angeben, wird der Standardwert der gcloud CLI verwendet.Prüfen Sie, ob sie erfolgreich erstellt wurde:
gcloud tasks queues describe my-queue --location=LOCATION
Ersetzen Sie
LOCATION
durch den Speicherort der Warteschlange.
Dienstkonto erstellen
Die Cloud Tasks-Anfrage muss Anmeldedaten im Authorization
-Header angeben, damit die Cloud Run-Funktion die Anfrage authentifizieren kann. Mit diesem Dienstkonto kann Cloud Tasks zu diesem Zweck ein OIDC-Token erstellen und hinzufügen.
Klicken Sie in der Benutzeroberfläche für Dienstkonten auf + DIENSTKONTO ERSTELLEN.
Fügen Sie einen Dienstkontonamen(Anzeigename) hinzu und wählen Sie Erstellen aus.
Legen Sie die Rolle fest und klicken Sie auf Weiter.
- Funktionen der 1. Generation:Legen Sie die Rolle auf
Cloud Function Invoker
fest. - Funktionen der 2. Generation:Legen Sie die Rolle auf
Cloud Run Invoker
fest.
- Funktionen der 1. Generation:Legen Sie die Rolle auf
Wählen Sie Fertig aus.
Endpunkt und Aufgabenersteller in App Engine bereitstellen
Gehen Sie zum Verzeichnis
app/
:cd ../app/
Aktualisieren Sie Variablen in
app.yaml
mit Ihren Werten:Verwenden Sie den folgenden Befehl, um den Speicherort Ihrer Warteschlange zu ermitteln:
gcloud tasks queues describe my-queue --location=LOCATION
Ersetzen Sie
LOCATION
durch den Speicherort der Warteschlange.Verwenden Sie den folgenden Befehl, um die Funktions-URL zu ermitteln:
gcloud functions describe sendEmail
Stellen Sie die Anwendung mit dem folgenden Befehl in der App Engine-Standardumgebung bereit:
gcloud app deploy
Öffnen Sie die Anwendung, um eine Postkarte als E-Mail zu senden:
gcloud app browse