HTTP-Funktionen
Sie verwenden HTTP-Funktionen, wenn Sie Ihre Funktion über eine HTTP(s)-Anfrage aufrufen möchten. Die HTTP-Funktionssignaturen akzeptieren HTTP-spezifische Argumente, um die HTTP-Semantik zu ermöglichen.
Sie können HTTP-Funktionen konfigurieren, um zu steuern, ob sie sowohl von HTTPS als auch von HTTP oder nur HTTPS ausgelöst werden können. Weitere Informationen finden Sie unter Sicherheitsstufen.
Beispiele ausführen
Für die Ausführung der Beispiele in diesem Dokument muss die Umgebung so für die Laufzeit eingerichtet sein, wie in dieser Kurzanleitung beschrieben wird. Achten Sie insbesondere darauf, das Beispiel-Repository auf Ihren lokalen Computer zu klonen, damit alle erforderlichen Dateien in Ihrer Umgebung vorhanden sind.
Verwendungsbeispiel
Das folgende Beispiel zeigt, wie eine HTTP-POST-Anfrage mit einem name
-Parameter verarbeitet wird:
Node.js
Python
Go
Java
C#
Ruby
PHP
Der folgende Befehl zeigt, wie die Funktion aufgerufen und mit curl
ein Parameter übergeben wird:
curl -X POST HTTP_TRIGGER_ENDPOINT -H "Content-Type:application/json" -d '{"name":"Jane"}'
Dabei ist HTTP_TRIGGER_ENDPOINT
die URL für die Funktion, die Sie bei der Bereitstellung erhalten. Weitere Informationen finden Sie unter HTTP-Trigger.
Jetzt testen
Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit von Cloud Functions in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
Cloud Functions kostenlos testenSicherheitsstufen
Mit dieser Funktion wird festgelegt, ob die URL einer HTTP-Funktion nur HTTPS oder HTTP und HTTPS unterstützt. Standardmäßig wird nur HTTPS unterstützt.
Wenn eine HTTP-Funktion so konfiguriert ist, dass sie nur mit HTTPS ausgelöst werden kann, werden Nutzer, die versuchen, das HTTP-Protokoll zu verwenden, weitergeleitet.
Sie geben die Sicherheitsstufe einer HTTP-Funktion während der Bereitstellung an:
Wenn Sie Google Cloud CLI zum Bereitstellen Ihrer Funktion verwenden, können Sie das Sicherheitsniveau der Funktion mit dem Flag
--security-level
festlegen. Die möglichen Werte sindsecure-optional
odersecure-always
. Letzteres ist die Standardeinstellung. Beispiel:gcloud functions deploy
FUNCTION_NAME
--trigger-http --security-level=secure-optional...Wenn Sie die Funktion über die Cloud Console bereitstellen, geben Sie anhand des Kästchens HTTPS erforderlich an, ob die Funktion HTTPS erfordert.
Wenn die Funktion mit HTTP oder HTTPS ausgelöst werden kann, kann der Funktionscode den Wert des Anfrageheaders X-Forwarded-Proto prüfen, um festzustellen, welches Protokoll verwendet wurde. Eine sichere Anfrage hat für diesen Header den Wert https, während andere Anfragen den Wert http haben.
HTTP-Frameworks
Zur Verarbeitung von HTTP verwendet Cloud Functions in jeder Laufzeit eine bestimmte HTTP-Framework-Version:
Laufzeit | HTTP-Framework |
---|---|
Node.js | Express 4.17.1 |
Python | Flask 1.0.2 |
Go | Standardmäßige http.HandlerFunc -Schnittstelle
|
Java | Java API zu Functions Framework |
.NET | Functions Framework für .NET |
Ruby | Functions Framework für Ruby |
PHP | Functions Framework für PHP |
HTTP-Funktionen beenden
Wenn eine Funktion Hintergrundaufgaben erstellt, z. B. Threads, Futures, Node.js Promise
-Objekte, Callbacks oder Systemprozessen), müssen Sie diese Aufgaben beenden oder anderweitig auflösen, bevor Sie eine HTTP-Antwort zurückgeben. Aufgaben, die vor einer HTTP-Antwort nicht beendet wurden, können nicht abgeschlossen werden und führen unter Umständen zu einem nicht definierten Verhalten.
HTTP-Anfragen parsen
Das folgende Beispiel zeigt, wie HTTP-Anfragen in verschiedenen Formaten gelesen werden können:Node.js
In Node.js wird der Text der Anfrage automatisch anhand des content-type
-Headers geparst und über die Argumente Ihrer HTTP-Funktion bereitgestellt.
Python
Go
Java
C#
Ruby
PHP
CORS-Anfragen verarbeiten
Mit Cross-Origin Resource Sharing (CORS) können Anwendungen in einer Domain auf Inhalte aus einer anderen Domain zugreifen. So kann z. B. yourdomain.com
Anfragen an region-project.cloudfunctions.net/yourfunction
senden.
Wenn CORS nicht richtig eingerichtet ist, erhalten Sie wahrscheinlich Fehlermeldungen, die so aussehen:
XMLHttpRequest cannot load https://region-project.cloudfunctions.net/function. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://yourdomain.com' is therefore not allowed access.
Preflight-Anfrage
CORS besteht aus
- einer
OPTIONS
-Preflight-Anfrage und - einer Hauptanfrage, die auf die
OPTIONS
-Anfrage folgt.
Die Preflight-Anfrage enthält Header, mit denen angegeben wird, welche Methode (Access-Control-Request-Method
) und welche zusätzlichen Header (Access-Control-Request-Headers
) in der Hauptanfrage gesendet werden und was der Ursprung der Hauptanfrage ist (Origin
).
Zur Verarbeitung einer Preflight-Anfrage müssen die entsprechenden Access-Control-Allow-*
-Header so festgelegt werden, dass sie den Anfragen entsprechen, die Sie akzeptieren möchten:
Node.js
Python
Go
Java
C#
Ruby
PHP
Alternativ können Sie eine Drittanbieterbibliothek für die CORS-Verarbeitung verwenden.
Beschränkungen
CORS-Preflight-Anfragen werden ohne Authorization
-Header gesendet und deshalb von allen nicht öffentlichen HTTP-Funktionen abgelehnt. Da die Preflight-Anfragen fehlschlagen, schlägt auch die Hauptanfrage fehl.
Für HTTP-Funktionen ist die Authentifizierung standardmäßig erforderlich. Deshalb haben Sie folgende Optionen, um diese Einschränkung zu umgehen:
- Machen Sie die Funktion öffentlich.
- Wenn Sie die Funktion öffentlich machen möchten, können Sie sie entweder mit dem Flag
--allow-unauthenticated
bereitstellen oder die Console verwenden, umallUsers
die Cloud Functions-Invoker-Rolle zuzuweisen. Verarbeiten Sie dann CORS und Authentifizierung im Funktionscode.
- Wenn Sie die Funktion öffentlich machen möchten, können Sie sie entweder mit dem Flag
- Webanwendung und Funktionen in derselben Domain hosten, um CORS-Preflight-Anfragen zu umgehen.
- Stellen Sie Cloud Endpoints-Proxy bereit und aktivieren Sie CORS
Hosting auf derselben Domain
Statt CORS zu implementieren, können Sie Ihre Website und die Funktionen auf derselben Domain hosten. Dadurch haben alle Anfragen denselben Ursprung und CORS wird nicht angewendet. Dies vereinfacht den Code erheblich.
Am einfachsten ist es, wenn Sie Firebase Hosting in Google Cloud Functions einbinden.
Cloud Endpoints für die CORS-Verarbeitung verwenden
Sie können einen Cloud Endpoints-Proxy bereitstellen und CORS aktivieren.
Wenn Sie Authentifizierungsfunktionen nutzen möchten, können Sie auch die Validierung von Google-ID-Tokens aktivieren, mit der Authentifizierungstokens validiert werden.
HTTP-Methoden verarbeiten
HTTP-Funktionen akzeptieren alle HTTP-Methoden. Im folgenden Beispiel wird gezeigt, wie verschiedene Aktionen basierend auf der empfangenen HTTP-Methode ausgeführt werden können (z. B. GET
und PUT
):
Node.js
Python
Go
Java
C#
Ruby
PHP
Inhaltstypen verarbeiten
Bei Node.js parst Cloud Functions die Anfragetext-Inhaltstypen application/json
und application/x-www-form-urlencoded
, wie oben gezeigt. Nur-Text-Inhaltstypen (text/plain
) werden als Strings unter Verwendung von UTF-8 als Standardcodierung (oder einer benutzerdefinierten Codierung im content-type
-Header) übergeben.
Wenn Sie andere Inhaltstypen abrufen möchten, müssen Sie das Argument der HTTP-Funktion prüfen. Die Methoden dafür variieren je nach Sprache.
Im folgenden Beispiel wird eine Anfrage mit dem Inhaltstyp text/xml
verarbeitet:
Node.js
Das AttributrawBody
enthält die nicht geparsten Byte des Anfragetexts.
Python
Go
Java
Mehrteilige Daten
Das folgende Beispiel zeigt, wie Daten mit dem Inhaltstyp multipart/form-data
verarbeitet werden. Je nach ausgewählter Sprache müssen Sie möglicherweise eine Parsing-Bibliothek verwenden.
Node.js
Python
Go
Java
C#
Ruby
PHP
Dateien über Cloud Storage hochladen
Ein häufiger Anwendungsfall für Cloud Functions ist die Dateiverarbeitung. Für größere Dateien bzw. Dateien, die über einzelne Anfragen hinaus beibehalten werden müssen, können Sie Cloud Storage als Einstiegspunkt für Datei-Uploads verwenden. Dazu müssen Sie eine signierte URL generieren, die temporären Schreibzugriff auf einen Cloud Storage-Bucket bietet.
Wenn Sie Cloud Functions-Funktionen direkt verwenden, können Sie signierte URLs mit der entsprechenden Cloud Storage-Clientbibliothek erzeugen.Zum Hochladen von Dateien in eine Cloud Functions-Funktion mithilfe von Cloud Storage sind drei Schritte erforderlich:
Clients rufen eine Cloud Functions-Funktion direkt auf, um eine signierte URL abzurufen.
Anschließend senden die Clients über eine HTTP-PUT-Anfrage Dateidaten an die signierte URL.
Die Mutation im Storage-Bucket löst eine zweite Cloud Functions-Funktion zur weiteren Verarbeitung der Datei aus.
In einem Beispiel unten erfahren Sie, wie Sie mit der Cloud Storage-Clientbibliothek eine signierte URL erzeugen.
Cloud Functions-Funktionen haben "Standardanmeldedaten für Anwendungen", die die Berechtigung iam.serviceAccounts.signBlob
in der Regel nicht beinhalten. Wenn Sie die Berechtigung gewähren möchten, müssen Sie dem Dienstkonto der Funktion zuerst die entsprechende Rolle zuweisen. Dies können Sie über die Cloud Console oder mit dem gcloud
-Befehlszeilentool tun:
Console
Sie können die IAM-Rollen für ein Konto direkt ändern, um dem Dienstkonto der Funktion die erforderliche Rolle zuzuweisen:
- Öffnen Sie die Google Cloud Console:
- Wählen Sie das entsprechende Konto und dann Editor > Dienstkonten > Ersteller von Dienstkonto-Token aus.
gcloud
Prüfen Sie mit dem folgenden Befehl, ob das Dienstkonto der Funktion die nötige Rolle hat. Die vordefinierte Rolle serviceAccountTokenCreator
hat die erforderliche Berechtigung iam.serviceAccounts.signBlob
:
gcloud projects add-iam-policy-binding YOUR_PROJECT \ --member serviceAccount:YOUR_SERVICE_ACCOUNT --role roles/iam.serviceAccountTokenCreator
Sie können das von den Funktionen verwendete Dienstkonto entweder mit der Cloud Console oder dem gcloud
-Befehlszeilentool bestimmen:
Console
So bestimmen Sie das von den Funktionen verwendete Dienstkonto mit der Cloud Console:
Öffnen Sie die Google Cloud Console:
Wählen Sie in der Liste die Funktion aus, die Sie untersuchen möchten.
Sie können das Dienstkonto auf der Detailseite der Funktion sehen.
gcloud
Führen Sie zum Ermitteln des von Ihren Funktionen verwendeten Dienstkontos den folgenden Befehl aus und suchen Sie nach dem Attribut serviceAccountEmail
:
gcloud beta functions describe YOUR_FUNCTION_NAME
Beispiel für das Generieren einer signierten URL:
Node.js
Python
Go
Java
C#
Wenn der Client eine Datei an die signierte URL hochlädt, können Sie mit dieser Mutation eine zweite Funktion auslösen, um den Upload zu bearbeiten. Sehen Sie sich die Cloud Storage-Anleitung an, um mehr über das Auslösen einer Cloud Functions-Funktion bei Änderungen an einem Cloud Storage-Bucket zu erfahren.