In dieser Anleitung wird beschrieben, wie ein Webhook-Ziel in einem Cloud Run-Dienst gehostet wird.
Cloud Run-Funktionen im Vergleich zu Cloud Run
Cloud Run-Funktionen und Cloud Run bieten beide gute Lösungen für das Hosting Ihrer Webhook-Ziele. Im Allgemeinen lässt sich Cloud Run-Funktionen schnell einrichten, eignet sich gut für das Prototyping und ist ideal für Workflows mit weniger Volumen. Cloud Run bietet mehr Flexibilität und ist in der Lage, größere Mengen gleichzeitig zu verarbeiten.
Verwenden Sie Cloud Run in folgenden Fällen:
- Sie verwenden Sprachen oder Laufzeiten, die in Cloud Run-Funktionen nicht unterstützt werden.
- Sie möchten für Anfragen längere Zeitüberschreitungen haben (bis zu 15 Minuten).
- Sie erwarten ein großes Volumen und benötigen Gleichzeitigkeit (80 gleichzeitige Anfragen pro Instanz).
Webhook-Ziel in Cloud Run erstellen
Mit Cloud Run können Sie ein Webhook-Ziel in einer beliebigen Sprache definieren. Sie müssen nur einen HTTP-Endpunkt erstellen, der die Daten akzeptiert.
Dies geschieht in der Regel mit einem POST
, z. B.:
@app.route('/', methods=['POST'])
def index():
data = request.get_json()
Im obigen Beispiel ist die Indexseite der URL so konfiguriert, dass sie nur POST
-Anfragen akzeptiert und erwartet, dass Daten über eine JSON-Nutzlast übermittelt werden.
Integration mit dem Webhook-Anbieter
Bei den meisten Diensten, die HTTP-Callbacks bereitstellen, müssen Sie die URL-Inhaberschaft bestätigen. Dies geschieht in der Regel, indem eine Art von Token, Nachricht oder Secret gesendet und eine gültige Antwort erwartet wird. Diese Anforderungen müssen Sie beim Dienstanbieter einholen. Im obigen Beispiel könnte dies so aussehen:
def index():
data = request.get_json()
return data['challenge']
Nachdem der Anbieter Ihre Inhaberschaft bestätigt hat, müssen Sie auch auf Ihrer Seite eine Autorisierung hinzufügen.
Anfragen autorisieren
Ein Webhook-Ziel ist eine offene und öffentliche URL. Die meisten Dienste stellen ein Token oder ein Secret bereit, um sicherzustellen, dass die eingehenden Anfragen von autorisierten Diensten stammen. Da die URL öffentlich ist, können Sie böswillige Versuche, Daten an das Webhook-Ziel zu senden, nicht verhindern. Die Verwendung von Tokens oder Secrets sorgt jedoch dafür, dass nur Daten aus autorisierten Quellen verarbeitet werden.
Um die Anfrage zu bestätigen, können Sie entweder Secrets konfigurieren oder Ihre Kopie des Secrets als Umgebungsvariable speichern oder zum Bestätigen eine Art Schlüsselverwaltungssystem verwenden.
Wenn Sie Ihre Kopie des Secrets als Umgebungsvariable speichern, sollte jede Anfrage ein Secret oder Token in den Anfrage-Headern oder der JSON-Nutzlast enthalten. Sie müssen es überprüfen, um sicherzustellen, dass die Quelle gültig ist.
def index():
request_secret = request.headers['Secret']
if request_secret != os.environ['SECRET']:
return ('Unauthorized', 401)
Wenn der Webhook-Anbieter ein Secret oder einen anderen Authentifizierungsmechanismus nicht unterstützt, kann jeder mit der URL Ihres Webhook-Ziels Nachrichten senden. In diesem Fall sollte kein Problem sein, wenn die Webhook-Implementierung über das öffentliche Internet frei zugänglich ist.
Auf Anfragen antworten
Bei den meisten Diensten müssen Sie innerhalb eines bestimmten Zeitraums, wie vom Dienst angegeben, auf eine Anfrage antworten. Einige Webhooks verfügen über integrierte Wiederholungsmethoden, wenn eine Fehlerantwort auftritt, z. B. der HTTP-Statuscode 4xx oder 5xx. Daher müssen Sie einen erfolgreichen Statuscode (2xx) zurückgeben, um dem Dienst mitzuteilen, dass das Ereignis ordnungsgemäß verarbeitet wurde.
def index():
data = request.get_json()
return ('', 200)
Zeitlimits
Sowohl Cloud Run als auch der Webhooks-Anbieter haben Zeitüberschreitungen. Für Ihre Anwendung gilt die kürzere der beiden Optionen. Wenn Ihre Datenverarbeitung die von Cloud Run oder dem Webhooks-Anbieter vorgesehene Zeit überschreitet, müssen Sie ein Produkt verwenden, mit dem Sie die Verarbeitung asynchron abschließen können, z. B. Pub/Sub oder Cloud Tasks. Mit diesen Produkten können Sie die Daten schnell übergeben, sofort eine Erfolgsantwort an den Webhook-Anbieter senden und die Verarbeitung ohne Zeitüberschreitung fortsetzen. Dies sind auch gute Optionen für den Umgang mit Fehlern und Wiederholungen.
Häufige Muster für Webhooks
Typ | Beispiele |
---|---|
Daten weiterleiten | Senden einer Benachrichtigung über Firebase Cloud Messaging bei jedem Aufruf des Webhooks. |
Daten speichern | Speichern der Daten in BigQuery für eine spätere Analyse. |
Aktionen auslösen | Ausführen von Aktionen in Dialogflow, Posten von Antworten auf Twitter oder Weiterleiten an Ihre Staging-Umgebung, wenn neuer Code in GitHub per Commit übergeben wird. |
Nächste Schritte
- Weitere Informationen zu Webhooks (HTTP-Trigger) in Cloud Run-Funktionen
- Webhook-Benachrichtigungen in Google Cloud Observability einrichten
- Pub/Sub-Nachrichten mit Push-Abos an einen Webhook senden
- Aktionen in Dialogflow mit Webhooks ausführen