Écrire des fonctions Cloud
Les fonctions Cloud peuvent être écrites dans les langages de programmation Node.js, Python, Go, Java, .NET, Ruby et PHP, et s'exécutent dans des environnements d'exécution propres à un langage. L'environnement d'exécution de Cloud Functions varie selon l'environnement d'exécution choisi. Les pages de présentation de l'environnement d'exécution fournissent des informations supplémentaires sur chaque environnement d'exécution :
- Environnement d'exécution Node.js
- Environnement d'exécution Python
- Environnement d'exécution Go
- Environnement d'exécution Java
- Environnement d'exécution .NET
- Environnement d'exécution Ruby
- Environnement d'exécution PHP
Faites l'essai
Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de Cloud Functions en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
Profiter d'un essai gratuit de Cloud FunctionsTypes de fonctions cloud
Il existe deux types distincts de fonctions Cloud Functions : les fonctions HTTP et les fonctions basées sur des événements. Les fonctions basées sur des événements peuvent être des fonctions d'arrière-plan ou des fonctions CloudEvent, selon l'environnement d'exécution Cloud Functions pour lesquelles elles sont écrites.
Fonctions HTTP
Les fonctions HTTP sont appelées à partir de requêtes HTTP standards. Ces requêtes HTTP attendent la réponse et sont compatibles avec les méthodes de requêtes HTTP courantes telles que GET, PUT, POST, DELETE et OPTIONS. Lors de l'utilisation des fonctions Cloud, un certificat TLS permettant d'appeler toutes les fonctions HTTP via une connexion sécurisée est automatiquement fourni.
Pour en savoir plus, consultez la section Écrire des fonctions HTTP.
Exemple :
Node.js
Python
Go
Java
C#
Ruby
PHP
Fonctions basées sur les événements
Cloud Functions utilise des fonctions basées sur des événements pour gérer les événements de votre infrastructure Cloud, tels que des messages sur un sujet Pub/Sub ou des modifications dans un bucket Cloud Storage.
Cloud Functions accepte deux sous-types de fonctions basées sur des événements :
Comme expliqué ci-dessous, le sous-type que vous utilisez sera régi par l'environnement d'exécution ciblé par votre fonction.
Fonctions d'arrière-plan
Des fonctions basées sur des événements écrites pour les environnements d'exécution Cloud Functions Node.js , Python , Go et Java sont appelésfonctions d'arrière-plan. Pour en savoir plus, consultez la section Écrire des fonctions d'arrière-plan.
Exemple :
Node.js
Python
Go
Java
Fonctions CloudEvent
Les fonctions basées sur des événements qui sont écrites pour les environnements d'exécution .NET, Ruby et PHP sont appelées des fonctions CloudEvent. Pour en savoir plus, consultez la page Écrire des fonctions CloudEvent.
Exemple :
C#
Ruby
PHP
Structurer le code source
Pour que Cloud Functions trouve la définition de votre fonction, chaque environnement d'exécution a certaines exigences concernant la structuration de votre code source. En général, nous vous recommandons de diviser les codebases multifonctions volumineux en plusieurs petits codebases par fonction pour réduire la complexité du code et le nombre de dépendances par fonction.
Node.js
Dans l'environnement d'exécution Node.js, le code source de votre fonction doit être exporté depuis un module Node.js, que Cloud Functions charge à l'aide d'un appel require()
.
Pour déterminer le module à charger, Cloud Functions utilise le champ main
de votre fichier package.json
. Si le champ main
n'est pas spécifié, Cloud Functions charge le code à partir de index.js
.
Par exemple, les configurations de code source suivantes sont valides :
Un seul fichier
index.js
situé dans le répertoire racine de votre fonction qui exporte une ou plusieurs fonctions :. └── index.js
Un fichier
index.js
qui importe le code à partir d'un fichierfoo.js
, puis exporte une ou plusieurs fonctions :. ├── index.js └── foo.js
Un fichier
app.js
qui exporte une ou plusieurs fonctions, accompagné d'un fichierpackage.json
contenant"main": "app.js"
:. ├── app.js └── package.json
Python
Dans l'environnement d'exécution Python, le point d'entrée de votre fonction doit être défini dans un fichier source Python situé à la racine de votre projet et nommé main.py
.
Par exemple, les configurations de code source suivantes sont valides :
Un seul fichier
main.py
dans le répertoire racine de votre fonction, qui définit une ou plusieurs fonctions :. └── main.py
Un fichier
main.py
accompagné d'un fichierrequirements.txt
qui spécifie des dépendances :. ├── main.py └── requirements.txt
Un fichier
main.py
qui importe le code à partir d'une dépendance locale :. ├── main.py └── mylocalpackage/ ├── __init__.py └── myscript.py
Go
Dans l'environnement d'exécution Go, votre fonction doit se trouver dans un package Go à la racine de votre projet. Votre fonction ne peut pas se trouver dans package main
. Les sous-packages ne sont compatibles que lors de l'utilisation de modules Go.
Par exemple, les configurations de code source suivantes sont valides :
Un package à la racine du projet qui exporte une ou plusieurs fonctions :
. └── function.go
Un package à la racine du projet qui importe le code d'un sous-package et exporte une ou plusieurs fonctions :
. ├── function.go ├── go.mod └── shared/ └── shared.go
Un package à la racine de votre projet avec un sous-répertoire qui définit un
package main
:. ├── cmd/ | └── main.go └── function.go
Java
Dans l'environnement d'exécution Java, vous devez créer un répertoire de fonction de premier niveau contenant un sous-répertoire src/main/java/
et un fichier pom.xml
. Nous vous recommandons de placer les tests dans un sous-répertoire src/test/java/
.
. ├── pom.xml └── src/ ├── main/ | └── java/ | └── MyFunction.java └── test └── java/ └── MyFunctionTest.java
Si votre fichier .java
déclare un package (par exemple, functions
), votre hiérarchie de répertoires se présente comme suit :
. ├── pom.xml └── src/ ├── main/ | └── java/ | └── functions/ | └── MyFunction.java └── test/ └── java/ └── functions/ └── MyFunctionTest.java
Si votre fonction est définie dans un package spécifique comme la plupart des fonctions Java, il doit être spécifié dans votre valeur --entry-point
au moment du déploiement.
Regrouper plusieurs fonctions
Si vous envisagez de regrouper 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 partagées.
Comme indiqué ci-dessus, nous vous recommandons de placer chaque fonction dans son propre répertoire de premier niveau, avec un sous-répertoire src/main/java
et un fichier pom.xml
dédiés.
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.
En outre, des fonctions distinctes facilitent la spécification d'une fonction lors de l'exécution locale via le framework des fonctions. Cela peut être utile lors du développement et des tests locaux.
C#
Pour l'environnement d'exécution .NET, vous pouvez structurer vos projets comme vous le feriez pour tout autre code source .NET.
Lorsque vous utilisez des modèles pour créer une fonction C#, les fichiers suivants sont créés au même niveau dans le système de fichiers :
- Un fichier source de fonction appelé
Function.cs
- Un fichier de projet avec l'extension
.csproj
Exemple :
. ├── Function.cs └── HelloHttp.csproj
Le même schéma s'applique lorsque vous utilisez des modèles pour créer des fonctions F# et Visual Basic. Pour F#, le nom du fichier est Function.fs
et le fichier de projet porte l'extension .fsproj
. Pour Visual Basic, le nom du fichier est CloudFunction.vb
et le fichier de projet porte l'extension .vbproj
.
Toutefois, ces schémas ne sont que des conventions, et non des exigences. Vous pouvez structurer votre code comme vous le feriez avec tout autre projet standard C#, F# ou Visual Basic, qui peut contenir plusieurs fichiers sources, des ressources, etc.
En outre, si vous ne mettez en œuvre qu'une seule fonction par projet, vous pouvez commencer à l'héberger sans spécifier son nom, ce qui peut faciliter le développement local et le débogage.
Ruby
Dans l'environnement d'exécution Ruby, le point d'entrée de votre fonction doit être défini dans un fichier source Ruby nommé app.rb
situé dans le répertoire racine de la fonction.
En outre, les dépendances, y compris au moins le gem functions_framework
, doivent être répertoriées dans un fichier Gemfile
et dans le fichier Gemfile.lock
associé situé également dans le répertoire racine de la fonction. Votre fonction peut inclure des fichiers Ruby supplémentaires dans le répertoire racine ou les sous-répertoires.
Par exemple, les configurations de code source suivantes sont valides :
. ├── Gemfile ├── Gemfile.lock └── app.rb . ├── Gemfile ├── Gemfile.lock ├── app.rb └── lib/ └── my_class.rb
PHP
Pour l'environnement d'exécution PHP, vous devez créer un répertoire de fonction de premier niveau contenant un fichierindex.php
, qui stocke la mise en œuvre de votre fonction.
Le fichier composer.json
déclare les dépendances. Lorsque vous exécutez la commande composer require google/cloud-functions-framework
, comme décrit dans la section Spécifier des dépendances en PHP, elle crée un répertoire vendor/
dans le répertoire de votre code de fonction, qui contient les dépendances. Le fichier composer.lock
verrouille les dépendances de votre fonction, ce qui signifie que votre fonction conserve un enregistrement fidèle des versions de dépendance qui ont été installées. Si vous deviez à nouveau exécuter composer install
à l'avenir, vous utiliserez alors les versions de dépendance spécifiées dans le fichier composer.lock
.
Nous vous recommandons de placer les tests dans un répertoire test/
.
. ├── index.php ├── composer.json ├── composer.lock ├── vendor/ └── test/
Spécifier des dépendances
Vous spécifiez les dépendances de votre fonction de manière idiomatique en fonction de l'environnement d'exécution que vous utilisez. Pour plus d'informations, consultez la page appropriée :
- Spécifier des dépendances en Node.js
- Spécifier des dépendances en Python
- Spécifier des dépendances en Go
- Spécifier des dépendances en Java
- Spécifier des dépendances en .NET
- Spécifier des dépendances en Ruby
- Spécifier des dépendances en PHP
Nommer les fonctions cloud
Les fonctions Cloud Functions ont une propriété "name" définie au moment du déploiement et, une fois définie, celle-ci ne peut plus être modifiée. Le nom d'une fonction est utilisé comme identifiant et doit être unique dans une région. Consultez la documentation sur le déploiement pour en savoir plus.
Étapes suivantes
- Déployer des fonctions Cloud Functions
- Appeler des fonctions HTTP
- Appeler des fonctions du déclencheur Cloud Storage
- Appeler des fonctions du déclencheur Pub/Sub
- Tutoriel sur les fonctions HTTP
- Tutoriel Cloud Functions avec Cloud Storage
- Tutoriel Cloud Functions avec Pub/Sub
Faites l'essai
Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de Cloud Functions en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
Profiter d'un essai gratuit de Cloud Functions