Exécuter des fonctions avec le framework des fonctions
Cloud Run Functions utilise les bibliothèques Open Source Framework Functions pour encapsuler vos fonctions déployées dans une application HTTP persistante.
Le framework des fonctions peut également s'exécuter sur n'importe quelle plate-forme compatible avec le langage en question, y compris votre machine locale, vos serveurs sur site, Compute Engine et Cloud Run.
Installer des dépendances
Dans le répertoire de votre fonction, installez la bibliothèque du framework des fonctions pour votre langage :
Pour en savoir plus, consultez la bibliothèque Java Functions Framework.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
Si vous utilisez Maven, ajoutez les lignes suivantes à votre fichier pom.xml
:
Gradle
Si vous utilisez Gradle, ajoutez les lignes suivantes à votre fichier build.gradle
:
C#
Les commandes ci-dessous exploitent des modèles .NET pour créer un codebase de fonction Cloud Run .NET avec la bibliothèque du framework des fonctions .NET en tant que dépendance :
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
Dans Ruby, le framework Functions doit être ajouté aux dépendances de votre fonction afin de pouvoir le déployer dans Cloud Run Functions :
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Configurer le framework des fonctions
Avant d'exécuter une fonction à l'aide du framework des fonctions, vous devez d'abord spécifier le type et le nom de la fonction concernée. Ces attributs peuvent être spécifiés en tant qu'options d'interface de ligne de commande (CLI) ou en tant que variables d'environnement.
Types de fonctions compatibles
Le framework Functions est compatible avec les trois types de fonctions prises en charge par les Cloud Run Functions 1st gen. Tous les environnements d'exécution de langage sont compatibles avec http
et avec l'un des deux types de fonctions suivants : event
ou cloudevent
.
Type de fonction | Type de signature | Description | Environnements d'exécution acceptés |
---|---|---|---|
Fonctions déclenchées par HTTP |
http
|
Fonctions qui reçoivent des requêtes HTTP et y répondent. | Tous les environnements d'exécution |
Fonctions d'arrière-plan |
event
|
Format d'événement spécifique à Cloud Run Functions | Node.js, Python, Go, Java |
Fonctions CloudEvent |
cloudevent
|
Format d'événement standard dans l'industrie | .NET, Ruby et PHP |
Spécifier la fonction à exécuter
Avant d'exécuter une fonction avec le framework des fonctions, vous devez d'abord spécifier quelle fonction dans votre code doit être exécutée. Dans la plupart des langages, vous pouvez pour cela spécifier le nom de la méthode de la fonction cible, comme indiqué dans les tableaux ci-dessous. (Les exceptions à cette règle, telles que Java et .NET, sont également décrites ci-dessous.)
Instructions pour chaque langage
Pour connaître la liste des options de configuration compatibles avec chaque langage, reportez-vous au tableau ci-dessous.
Node.js
Argument CLI | Variable d'environnement | Description |
---|---|---|
--port
|
PORT
|
Port sur lequel écouter les requêtes. (Par défaut : 8080 )
|
--target
|
FUNCTION_TARGET
|
Nom de la fonction exportée (export ) à appeler. (Par défaut : function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Type de signature utilisé par votre fonction. Il peut s'agir de http (par défaut), de event ou de cloudevent .
|
Python
Argument CLI | Variable d'environnement | Description |
---|---|---|
--port
|
PORT
|
Port sur lequel écouter les requêtes. (Par défaut : 8080 )
|
--target
|
FUNCTION_TARGET
|
Nom de la fonction exportée (export ) à appeler. (Par défaut : function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
Type de signature utilisé par votre fonction. Il peut s'agir de http (par défaut), de event ou de cloudevent .
|
Go
Variable d'environnement | Description |
---|---|
PORT
|
Port sur lequel écouter les requêtes. (Par défaut : 8080 )
|
Java
Nom de l'argument | Variable d'environnement | Description |
---|---|---|
run.port
|
PORT
|
Port sur lequel écouter les requêtes. (Par défaut : 8080 )
|
run.functionTarget
|
FUNCTION_TARGET
|
Nom de la fonction exportée (export ) à appeler. (Par défaut : function )
|
C#
Argument CLI | Variable d'environnement | Description |
---|---|---|
--port
|
PORT
|
Port sur lequel écouter les requêtes. (Par défaut : 8080 )
|
--target (ou argument seul)
|
FUNCTION_TARGET
|
Nom de classe de la fonction à appeler. (Par défaut : function )
|
Ruby
Argument CLI | Variable d'environnement | Description |
---|---|---|
--port
|
PORT
|
Port sur lequel écouter les requêtes. (Par défaut : 8080 )
|
--target
|
FUNCTION_TARGET
|
Nom de la fonction exportée (export ) à appeler. (Par défaut : function )
|
PHP
Variable d'environnement | Description |
---|---|
FUNCTION_TARGET
|
Nom de la fonction à appeler. (Par défaut : function )
|
FUNCTION_SIGNATURE_TYPE
|
Type de signature utilisé par votre fonction. Il peut s'agir de http (par défaut), de event ou de cloudevent .
|
Suivez les instructions ci-dessous pour configurer et exécuter le framework des fonctions :
Node.js
Le framework des fonctions Node.js vous permet de spécifier le nom et le type de signature de votre fonction en tant qu'arguments de ligne de commande ou en tant que variables d'environnement.
Vous pouvez également spécifier ces valeurs dans le fichier de build package.json
en ajoutant un script start
avec les arguments CLI requis, comme illustré dans l'exemple ci-dessous.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
Vous pouvez également procéder de la même manière à l'aide de variables d'environnement:
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
Remplacez YOUR_FUNCTION_NAME par le nom de la méthode de votre fonction et YOUR_SIGNATURE_TYPE (le cas échéant) par le type de signature de votre fonction, comme indiqué dans le tableau ci-dessus.
Python
Le framework des fonctions Python vous permet de spécifier le nom et le type de signature de votre fonction en tant qu'arguments de ligne de commande ou en tant que variables d'environnement. Les arguments de ligne de commande doivent être spécifiés lorsque vous exécutez le framework.
Go
Le framework des fonctions Go utilise funcframework.RegisterHTTPFunctionContext
pour spécifier le type de signature et la cible de la fonction.
Java
Le framework des fonctions Java accepte des données de configuration provenant de trois sources différentes, dans l'ordre de priorité suivant (du plus spécifique au moins spécifique) :
- Arguments de ligne de commande
- Fichiers de build
- Variables d'environnement
Arguments de ligne de commande
Maven
Vous pouvez spécifier la fonction à exécuter en ajoutant l'option d'interface de ligne de commande (CLI) suivante à vos commandes mvn
:
-Drun.functionTarget=YOUR_FUNCTION_NAME
Vous pouvez également spécifier le port cible en ajoutant l'option CLI suivante de la même manière :
-Drun.port=12345
Gradle
Les options CLI de Gradle sont presque identiques à celles de Maven. La seule différence est que Gradle remplace l'élément -D
initial de chaque option par -P
, comme le montre l'exemple ci-dessous :
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
Fichiers de build
Vous pouvez également spécifier la fonction à exécuter dans le fichier de build de votre projet. Bien que Maven et Gradle présentent des options CLI similaires, leurs clauses de fichier de build sont sensiblement différentes.
Maven
Les fichiers de build Maven sont nommés pom.xml
. Ajoutez la clause suivante à ce fichier pour spécifier une fonction cible :
Remplacez <functionTarget>
par le nom de classe de votre fonction. (Par exemple, une fonction du package functions
avec le nom de classe HelloCloudFunctions
possède le nom de classe functions.HelloCloudFunctions
.) Il s'agit d'une valeur relative au fichier de compilation parent (pom.xml
ou build.gradle
).
Gradle
Les fichiers de build Gradle sont nommés build.gradle
. Ajoutez la clause suivante à ce fichier pour spécifier une fonction cible :
C#
Si vous créez votre projet à l'aide de dotnet new
et de l'un des modèles spécifiés ci-dessus, le framework des fonctions .NET détecte automatiquement votre fonction.
Si votre projet contient plusieurs fonctions, consultez la section Exécuter le framework pour en savoir plus sur l'exécution d'une fonction spécifique.
Ruby
Le framework des fonctions Ruby vous permet de spécifier le nom et le type de signature de votre fonction en tant qu'arguments de ligne de commande ou en tant que variables d'environnement. Les arguments de ligne de commande doivent être spécifiés lorsque vous exécutez le framework.
PHP
Le framework des fonctions PHP vous permet de spécifier des variables d'environnement en tant qu'arguments de ligne de commande.
Vous pouvez également spécifier ces valeurs dans le fichier de compilation composer.json
en ajoutant un script start
, comme illustré dans l'exemple ci-dessous.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
Remplacez YOUR_FUNCTION_NAME par le nom de votre fonction et YOUR_SIGNATURE_TYPE (le cas échéant) par le type de signature de votre fonction, comme indiqué dans le tableau ci-dessus.
Exécuter le framework des fonctions
Utilisez la commande ci-dessous pour exécuter votre fonction avec le framework des fonctions.
Par défaut, votre fonction est accessible à l'adresse localhost:8080
, sauf si vous spécifiez explicitement une valeur PORT
.
Node.js
npm start
Python
Utiliser des arguments de ligne de commande:
functions-framework --target=YOUR_FUNCTION_NAME
Utiliser des variables d'environnement:
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
Remplacez YOUR_FUNCTION_NAME par le nom de la méthode de votre fonction.
Go
cd cmd go build ./cmd
Utiliser des variables d'environnement:
cd cmd go build PORT=8080 ./cmd
Java
Maven
Utilisez la commande suivante pour exécuter une fonction spécifiée dans pom.xml
:
mvn function:run
Utilisez la commande suivante pour exécuter une fonction spécifiée dans un argument de ligne de commande :
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
Utilisez la commande suivante pour exécuter une fonction spécifiée en tant que variable d'environnement:
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
Remplacez YOUR_FUNCTION_NAME par le nom de classe de votre fonction.
Gradle
Utilisez la commande suivante pour exécuter une fonction spécifiée dans build.gradle
:
./gradlew runFunction
Utilisez la commande suivante pour exécuter une fonction spécifiée dans un argument de ligne de commande :
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
Utilisez la commande suivante pour exécuter une fonction spécifiée en tant que variable d'environnement:
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
Remplacez YOUR_FUNCTION_NAME par le nom de classe de votre fonction.
C#
Utilisez la commande suivante pour exécuter votre fonction lorsqu'une seule fonction est présente dans le projet .NET actuel. (Il s'agit de la structure par défaut pour les projets créés à l'aide d'un modèle.)
dotnet run
Si votre projet .NET contient plusieurs fonctions, utilisez la commande suivante pour exécuter une fonction spécifique. Remplacez YOUR_FUNCTION_CLASSNAME par le nom de classe de votre fonction, en incluant l'espace de noms.
dotnet run YOUR_FUNCTION_CLASSNAME
Si vous souhaitez exécuter plusieurs fonctions simultanément, vous devez exécuter plusieurs instances du framework des fonctions. Pour éviter les conflits entre les instances du framework en cours d'exécution, chaque instance doit utiliser une valeur PORT
différente. La commande suivante montre comment exécuter une fonction avec une valeur PORT
définie sur 8080
.
Utiliser des arguments de ligne de commande:
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Utiliser des variables d'environnement:
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
Utiliser des arguments de ligne de commande:
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
Utiliser des variables d'environnement:
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
Remplacez YOUR_FUNCTION_NAME par le nom de la méthode de votre fonction.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
Remplacez YOUR_FUNCTION_NAME par le nom de votre fonction.
Appeler votre fonction
Consultez la page Appeler des fonctions locales pour découvrir comment interagir avec votre fonction exécutée localement.
Effectuer un nettoyage
Une fois l'exécution de votre fonction terminée, appuyez sur Ctrl+C pour arrêter l'instance de framework en cours d'exécution.