Cette page présente l'écriture de fonctions avec le framework Functions.
Lorsque vous écrivez le code source de fonctions pour Cloud Run, vous devez utiliser le Framework de fonctions, une bibliothèque Open Source permettant d'écrire des fonctions Cloud Run. Avec le framework des fonctions, vous pouvez écrire des fonctions légères qui s'exécutent dans Cloud Run et dans d'autres environnements, y compris votre machine de développement local et les environnements basés sur Knative.
Le framework des fonctions vous permet d'effectuer les opérations suivantes:
- Appelez une fonction en réponse à une requête.
- Annulation automatique des événements conformes à la spécification CloudEvents, une spécification standard dans l'industrie pour la description des données d'événement de manière courante.
- Démarrez un serveur de développement local pour effectuer des tests rapides.
Écrire des fonctions avec le framework des fonctions
Le framework Functions fournit une interface permettant de créer des services modulaires. Pour utiliser le framework Functions dans votre code source, spécifiez les éléments suivants:
Point d'entrée de la fonction
Votre code source doit définir un point d'entrée pour votre fonction, qui est le code particulier exécuté lorsque la fonction Cloud Run est appelée. Vous spécifiez ce point d'entrée lorsque vous déployez votre fonction.
La façon dont vous définissez le point d'entrée dépend de l'environnement d'exécution du langage que vous utilisez. Pour certaines langues, le point d'entrée est une fonction, tandis que pour d'autres, il s'agit d'une classe.
Type de signature
Lorsque vous écrivez le code source d'une fonction avec le framework Functions, vous devez spécifier l'un des deux types de signature:
- Fonctions HTTP: fonction qui enregistre une fonction de gestionnaire HTTP. Pour en savoir plus, consultez la section Écrire des fonctions HTTP.
- Fonctions CloudEvents (également appelées fonctions basées sur des événements): fonction qui enregistre une fonction de gestionnaire CloudEvents. Pour en savoir plus, consultez la section Écrire des fonctions CloudEvents.
Utilisez une fonction HTTP lorsque vous avez besoin que votre fonction dispose d'un point de terminaison d'URL et réponde aux requêtes HTTP, par exemple pour les webhooks. Utilisez une fonction CloudEvents lorsque votre fonction doit être déclenchée directement en réponse à des événements au sein de votre projetGoogle Cloud , tels que des messages sur un sujet Pub/Sub ou des modifications dans un bucket Cloud Storage.
Structure du répertoire source
Le framework Functions est compatible avec plusieurs langages de programmation. L'environnement d'exécution du langage que vous choisissez et le type de fonction que vous souhaitez écrire déterminent la structure de votre code et l'implémentation de la fonction.
Pour que Cloud Run puisse localiser votre définition de fonction, chaque environnement d'exécution de langage comporte des exigences concernant la structuration de votre code source.
Node.js
La structure du répertoire de base des fonctions Node.js est la suivante :
. ├── index.js └── package.json
Par défaut, Cloud Run tente de charger le code source à partir d'un fichier nommé index.js
à la racine du répertoire de votre fonction. Pour spécifier un autre fichier source principal, utilisez le champ main
dans votre fichier package.json
.
Votre fichier package.json
doit également inclure le framework des fonctions pour Node.js en tant que dépendance :
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
Le code de votre fichier principal doit définir le point d'entrée de votre fonction et peut importer d'autres codes et modules Node.js. Le fichier principal peut également définir plusieurs points d'entrée de fonction pouvant être déployés séparément.
Pour en savoir plus, consultez la présentation de l'environnement d'exécution Node.js et le framework des fonctions pour Node.js.
Python
La structure du répertoire de base des fonctions Python est la suivante :
. ├── main.py └── requirements.txt
Cloud Run charge le code source à partir d'un fichier nommé main.py
à la racine du répertoire de votre fonction. Vous devez nommer votre fichier principal main.py
.
Votre fichier requirements.txt
doit inclure le framework des fonctions pour Python en tant que dépendance :
functions-framework==3.*
Le code de votre fichier main.py
doit définir le point d'entrée de votre fonction et peut importer d'autres codes et dépendances externes normalement. Le fichier main.py
peut également définir plusieurs points d'entrée de fonction pouvant être déployés séparément.
Pour en savoir plus, consultez la présentation de l'environnement d'exécution Python et le framework des fonctions pour Python.
Go
La structure du répertoire de base des fonctions Go est la suivante :
. ├── myfunction.go └── go.mod
Votre fonction doit figurer dans un package Go, à la racine de votre projet. Le package et ses fichiers sources peuvent porter n'importe quel nom, sauf que votre fonction ne peut pas se trouver dans package main
. Si vous avez besoin d'un package main
, par exemple pour les tests locaux, vous pouvez en créer un dans un sous-répertoire :
. ├── myfunction.go ├── go.mod └── cmd/ └── main.go
Votre fichier go.mod
doit inclure le framework des fonctions pour Go en tant que dépendance :
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
Le code de votre package racine doit définir votre point d'entrée de la fonction et peut importer normalement d'autres codes à partir de sous-packages et de dépendances. Votre package peut également définir plusieurs points d'entrée de fonction pouvant être déployés séparément.
Pour en savoir plus, consultez la section Présentation de l'environnement d'exécution Go et le framework des fonctions pour Go.
Java
La structure du répertoire de base des fonctions Java est la suivante :
. ├── pom.xml └── src/ └── main/ └── java/ └── MyFunction.java
Vos fichiers source Java doivent se trouver dans le répertoire src/main/java/
et peuvent porter n'importe quel nom. Si vos fichiers source déclarent un package, ajoutez un répertoire supplémentaire sous src/main/java
avec le nom du package :
. ├── pom.xml └── src/ └── main/ └── java/ └── mypackage/ └── MyFunction.java
Nous vous recommandons de placer les tests associés dans un sous-répertoire src/test/java/
.
Votre fichier pom.xml
doit inclure le framework des fonctions pour Java en tant que dépendance :
...
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.0.4</version>
</dependency>
...
Le code de vos fichiers source doit définir votre point d'entrée de la fonction et peut importer d'autres codes et dépendances externes normalement. Vos fichiers sources peuvent également définir plusieurs points d'entrée de fonctions pouvant être déployés séparément.
Pour en savoir plus, consultez la présentation de l'environnement d'exécution Java et le framework des fonctions pour Java.
.NET
La structure du répertoire de base des fonctions .NET est la suivante :
. ├── MyFunction.cs └── MyProject.csproj
Vous pouvez structurer vos projets comme vous le feriez avec tout autre code source .NET. Vous pouvez attribuer n'importe quel nom aux fichiers sources.
Votre fichier de projet doit inclure le framework des fonctions pour .NET en tant que dépendance :
...
<PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...
Le code de vos fichiers source doit définir votre point d'entrée de la fonction et peut importer d'autres codes et dépendances externes normalement. Vos fichiers sources peuvent également définir plusieurs points d'entrée de fonctions pouvant être déployés séparément.
Pour en savoir plus, consultez la présentation de l'environnement d'exécution.NET et le framework des fonctions pour .NET.
Ruby
La structure de répertoires de base des fonctions Ruby est la suivante:
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run charge le code source à partir d'un fichier nommé app.rb
à la racine du répertoire de votre fonction. Votre fichier principal doit être nommé app.rb
.
Votre fichier Gemfile
doit inclure le framework des fonctions pour Ruby en tant que dépendance :
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
Le code de votre fichier app.rb
doit définir le point d'entrée de votre fonction et peut importer d'autres codes et dépendances externes normalement. Le fichier app.rb
peut également définir plusieurs points d'entrée de fonction pouvant être déployés séparément.
Pour en savoir plus, consultez la présentation de l'environnement d'exécution Ruby et le framework des fonctions pour Ruby.
PHP
La structure du répertoire de base des fonctions PHP est la suivante :
. ├── index.php └── composer.json
Cloud Run charge le code source à partir d'un fichier nommé index.php
à la racine du répertoire de votre fonction. Vous devez nommer votre fichier principal index.php
.
Votre fichier composer.json
doit inclure le framework des fonctions pour PHP en tant que dépendance :
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
Le code de votre fichier index.php
doit définir le point d'entrée de votre fonction et peut importer d'autres codes et dépendances externes normalement. Le fichier index.php
peut également définir plusieurs points d'entrée de fonction pouvant être déployés séparément.
Pour en savoir plus, consultez la présentation de l'environnement d'exécution PHP et le framework des fonctions pour PHP.
Si vous regroupez plusieurs fonctions dans un seul projet, sachez qu'il est possible qu'elles partagent le même ensemble de dépendances. Toutefois, certaines fonctions ne nécessitent pas l'ensemble des dépendances.
Dans la mesure du possible, nous vous recommandons de diviser les codebases multifonctions volumineux et de placer chaque fonction dans son propre répertoire de premier niveau, comme indiqué dans les exemples précédents, avec ses propres fichiers de configuration source et de projet. Cette approche minimise le nombre de dépendances requises par une fonction particulière et réduit la quantité de mémoire dont votre fonction a besoin.
Étape suivante
- Implémenter des fonctions HTTP
- Implémenter des fonctions CloudEvents
- En savoir plus sur le contrat du framework des fonctions