Auf dieser Seite erhalten Sie eine Einführung in das Schreiben von Funktionen mit dem Functions Framework.
Wenn Sie den Quellcode von Funktionen für Cloud Run schreiben, müssen Sie das Functions Framework verwenden, eine Open-Source-Bibliothek zum Schreiben von Cloud Run-Funktionen. Mit Functions Framework können Sie einfache Funktionen schreiben, die in Cloud Run und in anderen Umgebungen ausgeführt werden, einschließlich Ihres lokalen Entwicklungscomputers und Knative-basierter Umgebungen.
Mit dem Functions Framework können Sie Folgendes tun:
- Funktion als Antwort auf eine Anfrage auslösen
- Ereignisse, die der Spezifikation CloudEvents entsprechen, einer branchenweit üblichen Spezifikation zum allgemeinen Beschreiben von Ereignisdaten, automatisch umwandeln
- Starten Sie einen lokalen Entwicklungsserver für schnelle Tests.
Funktionen mit dem Functions Framework schreiben
Das Functions Framework bietet eine Benutzeroberfläche zum Erstellen modularer Dienste. Wenn Sie das Functions Framework in Ihrem Quellcode verwenden möchten, geben Sie Folgendes an:
Funktionseinstiegspunkt
Ihr Quellcode muss einen Einstiegspunkt für Ihre Funktion definieren. Dies ist der bestimmte Code, der beim Aufrufen der Cloud Run-Funktion ausgeführt wird. Sie geben diesen Einstiegspunkt an, wenn Sie die Funktion bereitstellen.
Wie Sie den Einstiegspunkt definieren, hängt von der verwendeten Sprachlaufzeit ab. Für einige Sprachen ist der Einstiegspunkt eine Funktion, bei anderen ist der Einstiegspunkt eine Klasse.
Signaturtyp
Wenn Sie den Quellcode einer Funktion mit dem Functions Framework schreiben, müssen Sie einen der beiden Signaturtypen angeben:
- HTTP-Funktionen: Eine Funktion, die eine HTTP-Handler-Funktion registriert. Weitere Informationen finden Sie unter HTTP-Funktionen schreiben.
- CloudEvent-Funktionen (auch ereignisgesteuerte Funktionen genannt): Eine Funktion, die eine CloudEvent-Handler-Funktion registriert. Weitere Informationen finden Sie unter CloudEvent-Funktionen schreiben.
Verwenden Sie eine HTTP-Funktion, wenn Ihre Funktion einen URL-Endpunkt haben und auf HTTP-Anfragen antworten muss, z. B. für Webhooks. Verwenden Sie eine CloudEvents-Funktion, wenn Ihre Funktion direkt als Reaktion auf Ereignisse in IhremGoogle Cloud -Projekt ausgelöst werden soll, z. B. Nachrichten in einem Pub/Sub-Thema oder Änderungen in einem Cloud Storage-Bucket.
Struktur des Quellverzeichnisses
Das Functions Framework wird in einer Reihe von Programmiersprachen unterstützt. Die von Ihnen ausgewählte Sprachlaufzeit und der Typ der Funktion, die Sie schreiben möchten, bestimmen, wie Sie Ihren Code strukturieren und Ihre Funktion implementieren.
Damit Cloud Run Ihre Funktionsdefinition finden kann, benötigt jede Sprachlaufzeit Anforderungen zum Strukturieren Ihres Quellcodes.
Node.js
Die grundlegende Verzeichnisstruktur für Node.js-Funktionen sieht so aus:
. ├── index.js └── package.json
Standardmäßig versucht Cloud Run, Quellcode aus einer Datei mit dem Namen index.js
im Stammverzeichnis Ihres Funktionsverzeichnisses zu laden. Verwenden Sie das Feld main
in der Datei package.json
, um eine andere Hauptquelldatei anzugeben.
Die Datei package.json
muss auch das Functions Framework für Node.js als Abhängigkeit enthalten:
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
Der Code in der Hauptdatei muss den Funktionseinstiegspunkt definieren und kann anderen Code und Node.js-Module importieren. Die Hauptdatei kann auch mehrere Funktionseinstiegspunkte definieren, die separat bereitgestellt werden können.
Weitere Informationen finden Sie in der Übersicht zur Node.js-Laufzeit und im Functions Framework für Node.js.
Python
Die grundlegende Verzeichnisstruktur für Python-Funktionen sieht so aus:
. ├── main.py └── requirements.txt
Cloud Run lädt den Quellcode aus einer Datei namens main.py
im Stammverzeichnis Ihres Funktionsverzeichnisses. Die Hauptdatei muss main.py
heißen.
Die Datei requirements.txt
muss das Functions Framework für Python als Abhängigkeit enthalten:
functions-framework==3.*
Der Code in der Datei main.py
muss den Funktionseinstiegspunkt definieren und kann anderen Code und externe Abhängigkeiten wie gewohnt importieren. In der Datei main.py
können auch mehrere Funktionseinstiegspunkte definiert werden, die separat bereitgestellt werden können.
Weitere Informationen finden Sie in der Python-Laufzeitübersicht und im Functions-Framework für Python.
Go
Die grundlegende Verzeichnisstruktur für Go-Funktionen ist so:
. ├── myfunction.go └── go.mod
Ihre Funktion muss sich in einem Go-Paket im Stammverzeichnis des Projekts befinden. Das Paket und seine Quelldateien können einen beliebigen Namen haben, aber Ihre Funktion darf sich nicht in package main
befinden. Wenn Sie ein main
-Paket benötigen, z. B. für lokale Tests, können Sie eines in einem Unterverzeichnis erstellen:
. ├── myfunction.go ├── go.mod └── cmd/ └── main.go
Die Datei go.mod
muss das Functions Framework für Go als Abhängigkeit enthalten:
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
Der Code im Root-Paket muss den Funktionseinstiegspunkt definieren und anderen Code aus Unterpaketen und Abhängigkeiten wie gewohnt importieren. Mit dem Paket können auch mehrere Funktionseinstiegspunkte definiert werden, die separat bereitgestellt werden können.
Weitere Informationen finden Sie in der Go-Laufzeitübersicht und im Functions Framework für Go.
Java
Die grundlegende Verzeichnisstruktur für Java-Funktionen sieht so aus:
. ├── pom.xml └── src/ └── main/ └── java/ └── MyFunction.java
Ihre Java-Quelldateien müssen sich im Verzeichnis src/main/java/
befinden und einen beliebigen Namen haben. Fügen Sie unter src/main/java
ein zusätzliches Verzeichnis mit dem Namen des Pakets hinzu, wenn Ihre Quelldateien ein Paket deklarieren:
. ├── pom.xml └── src/ └── main/ └── java/ └── mypackage/ └── MyFunction.java
Wir empfehlen, die zugehörigen Tests in einem Unterverzeichnis src/test/java/
abzulegen.
Die Datei pom.xml
muss das Functions Framework für Java als Abhängigkeit enthalten:
...
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.0.4</version>
</dependency>
...
Der Code in Ihren Quelldateien muss den Funktionseinstiegspunkt definieren und kann anderen Code und externe Abhängigkeiten wie gewohnt importieren. Mit Quelldateien können auch mehrere Funktionseinstiegspunkte definiert werden, die separat bereitgestellt werden können.
Weitere Informationen finden Sie unter Java-Laufzeit – Übersicht und Functions Framework für Java.
.NET
Die grundlegende Verzeichnisstruktur für .NET-Funktionen ist folgende:
. ├── MyFunction.cs └── MyProject.csproj
Sie können Ihre Projekte wie jeden anderen .NET-Quellcode strukturieren. Ihre Quelldateien können einen beliebigen Namen haben.
Ihre Projektdatei muss das Functions Framework für .NET als Abhängigkeit enthalten:
...
<PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...
Der Code in Ihren Quelldateien muss den Funktionseinstiegspunkt definieren und kann anderen Code und externe Abhängigkeiten wie gewohnt importieren. Mit Quelldateien können auch mehrere Funktionseinstiegspunkte definiert werden, die separat bereitgestellt werden können.
Weitere Informationen finden Sie unter .NET-Laufzeit – Übersicht und Functions Framework für .NET.
Ruby
Die grundlegende Verzeichnisstruktur für Ruby-Funktionen sieht so aus:
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run lädt den Quellcode aus einer Datei namens app.rb
im Stammverzeichnis Ihres Funktionsverzeichnisses. Die Hauptdatei muss app.rb
heißen.
Die Datei Gemfile
muss das Functions Framework für Ruby als Abhängigkeit enthalten:
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
Der Code in der Datei app.rb
muss den Funktionseinstiegspunkt definieren und kann anderen Code und externe Abhängigkeiten wie gewohnt importieren. In der Datei app.rb
können auch mehrere Funktionseinstiegspunkte definiert werden, die separat bereitgestellt werden können.
Weitere Informationen finden Sie unter Ruby-Laufzeit – Übersicht und Functions Framework für Ruby.
PHP
Die grundlegende Verzeichnisstruktur für PHP-Funktionen sieht so aus:
. ├── index.php └── composer.json
Cloud Run lädt den Quellcode aus einer Datei namens index.php
im Stammverzeichnis Ihres Funktionsverzeichnisses. Die Hauptdatei muss index.php
heißen.
Die Datei composer.json
muss das Functions Framework für PHP als Abhängigkeit enthalten:
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
Der Code in der Datei index.php
muss den Funktionseinstiegspunkt definieren und kann anderen Code und externe Abhängigkeiten wie gewohnt importieren. In der Datei index.php
können auch mehrere Funktionseinstiegspunkte definiert werden, die separat bereitgestellt werden können.
Weitere Informationen finden Sie in der Übersicht: PHP-Laufzeit und im Functions Framework für PHP.
Wenn Sie mehrere Funktionen in einem Projekt gruppieren, beachten Sie, dass jede Funktion möglicherweise dieselben Abhängigkeiten verwendet. Einige der Funktionen benötigen jedoch möglicherweise nicht alle Abhängigkeiten.
Wir empfehlen, möglichst große Codefunktionen mit mehreren Funktionen aufzuteilen und jede Funktion wie in den vorherigen Beispielen gezeigt in einem eigenen Verzeichnis der obersten Ebene mit eigenen Quell- und Projektkonfigurationsdateien zu speichern. Dieser Ansatz minimiert die Anzahl der Abhängigkeiten, die für eine bestimmte Funktion erforderlich sind. Das reduziert wiederum den Speicherbedarf für Ihre Funktion.
Nächste Schritte
- HTTP-Funktionen implementieren
- CloudEvent-Funktionen implementieren
- Informationen zum Functions Framework-Vertrag