Déployer des fonctions depuis votre machine locale

Cette page vous explique comment déployer une fonction Cloud depuis votre ordinateur local à l'aide de l'outil de ligne de commande gcloud. Lorsque vous utilisez l'outil de ligne de commande, Cloud Functions crée un package à partir du contenu du répertoire de votre fonction et l'importe dans un bucket Cloud Storage. Il exclut automatiquement les fichiers inutiles à l'aide du fichier .gcloudignore.

Vous pouvez également utiliser l'interface Cloud Functions dans Cloud Console pour importer un fichier ZIP que vous avez créé vous-même.

Pour obtenir un exemple complet exécutable et incluant un exemple de code téléchargeable, consultez le guide de démarrage rapide Utiliser l'outil de ligne de commande gcloud.

Effectuer un déploiement à l'aide de l'outil gcloud

Utilisez l'outil de ligne de commande gcloud pour déployer votre fonction depuis le répertoire contenant son code à l'aide de la commande gcloud functions deploy :

gcloud functions deploy NAME --entry-point ENTRY-POINT --runtime RUNTIME TRIGGER [FLAGS...]

Consultez les arguments de cette commande en tenant compte de la terminologie décrite dans la section Concepts de base :

Argument Description
NAME Nom enregistré de la fonction Cloud que vous déployez. L'argument NAME ne peut contenir que des lettres, des chiffres, des traits de soulignement et des tirets. NAME peut être le nom d'une fonction dans votre code source ou une chaîne personnalisée (par exemple, my-http-function). Si vous utilisez une chaîne personnalisée, vous devez également employer l'option --entry-point pour spécifier une fonction contenue dans votre code et indiquer à la commande deploy quelle fonction exécuter.
--entry-point ENTRY-POINT Nom d'une fonction ou d'une classe dans votre code source. Cette option s'utilise principalement de deux façons :
  • Vous pouvez l'employer à la place de NAME lorsque les fonctions de votre code source ne répondent pas aux exigences de dénomination de Cloud Functions. Par exemple, si vous spécifiez un nom de classe complet (FQN) complet pour Java qui contient des points (non autorisés dans NAME), vous devez utiliser cette option.
  • Si vous souhaitez simplement que votre nom enregistré (argument NAME) soit différent du nom de la fonction exécutée. Si vous n'utilisez pas cette option, NAME doit spécifier la fonction dans votre code source à exécuter lors du déploiement. Le nom enregistré sera alors le même que celui de la fonction.
--runtime RUNTIME Nom de l'environnement d'exécution que vous utilisez. Pour obtenir la liste complète, consultez la documentation de référence sur gcloud. Notez que vous devez inclure cette option lors du déploiement initial d'une fonction, mais vous pouvez l'omettre pour les déploiements ultérieurs.
TRIGGER Type de déclencheur pour cette fonction (consultez la page Événements et déclencheurs). Les règles permettant de spécifier des déclencheurs lors du déploiement d'une fonction sont les suivantes :
  • Si vous ne spécifiez pas de déclencheur lorsque vous déployez une mise à jour d'une fonction existante, celle-ci conserve son déclencheur actuel.
  • Lors du déploiement d'une nouvelle fonction, vous devez spécifier l'une des options --trigger-http, --trigger-topic ou --trigger-bucket, ou spécifier à la fois --trigger-event ET --trigger-resource. Utilisez l'option --trigger-http pour déployer des fonctions HTTP. Utilisez les autres options pour déployer des fonctions basées sur des événements.
FLAGS... (Facultatif) Options supplémentaires que vous pouvez spécifier lors du déploiement, telles que --stage-bucket ou --source. Pour accéder aux informations complètes, consultez la documentation sur gcloud functions deploy.

Chaque environnement d'exécution possède ses propres exigences en matière d'organisation des fichiers permettant à Cloud Functions de trouver la définition de votre fonction.

Exemple de fonction HTTP

Il existe trois types de fonctions Cloud : les fonctions HTTP, les fonctions d'arrière-plan et les fonctions CloudEvent. Pour consulter un exemple illustrant le déploiement d'une fonction basée sur des événements, reportez-vous à la section Exemple de fonction basée sur des événements.

Exemple Java

L'exemple suivant déploie une fonction HTTP écrite en Java et lui associe un déclencheur grâce à l'option --trigger-http :

gcloud functions deploy my-java-function --entry-point com.example.MyFunction --runtime java11 --trigger-http --allow-unauthenticated

Consultez les arguments de cette commande :

Argument Description
my-java-function Nom enregistré de la fonction Cloud que vous déployez. Dans le cas présent, my-java-function. Il s'agit d'un nom personnalisé que vous choisissez. Celui-ci ne peut contenir que des lettres, des chiffres, des traits de soulignement et des tirets.
--entry-point Nom complet d'une classe Java dans votre code source. Dans cet exemple, com.example.MyFunction.
--runtime java11 Environnement d'exécution pour cette fonction. Dans le cas présent, il s'agit de java11.
--trigger-http Type de déclencheur pour cette fonction, dans ce cas une requête HTTP (webhook).
--allow-unauthenticated Indique que la fonction ne nécessite pas d'authentification pour être appelée. Par défaut, les fonctions HTTP nécessitent une authentification. Si vous n'incluez pas cette option lors du déploiement initial d'une fonction HTTP, vous êtes invité à autoriser les appels sans authentification. Cette invitation n'est pas répétée lors d'appels ultérieurs.

Exemple Python

La syntaxe est la même que celle utilisée dans l'option --entry-point pour déployer une fonction HTTP autre que Java. Dans cet exemple, le nom enregistré est my-python-function et la fonction est helloworld :

gcloud functions deploy my-python-function --entry-point helloworld --runtime python37 --trigger-http --allow-unauthenticated

Si vous exécutez la même commande, mais sans l'option entry-point, l'argument NAME (nom enregistré) doit être une fonction de votre code source (dans cet exemple, helloworld) :

gcloud functions deploy helloworld --runtime python37 --trigger-http --allow-unauthenticated

Exemple de fonction basée sur des événements

L'exemple suivant permet de déployer une fonction basée sur des événements écrite en Node.js 12 et qui sera déclenchée par Cloud Storage :

gcloud functions deploy helloGCS --runtime nodejs12 --trigger-resource TRIGGER_BUCKET_NAME --trigger-event google.storage.object.finalize

Consultez les arguments de cette commande :

Argument Description
helloGCS Nom enregistré de la fonction Cloud que vous déployez. Dans le cas présent, helloGCS. Comme cette commande n'utilise pas l'option --entry-point, il doit s'agir du nom de la fonction dans votre code source à exécuter lors du déploiement.
--runtime nodejs12 Environnement d'exécution pour cette fonction. Dans le cas présent, il s'agit de nodejs12.
--trigger-resource Ressource de déclenchement pour cette fonction. La ressource de déclenchement spécifie la ressource pour laquelle l'événement de déclenchement est observé. Dans le cas présent, la ressource correspond au nom (TRIGGER_BUCKET_NAME) du bucket Cloud Storage qui déclenche la fonction.
--trigger-event Événement de déclenchement pour cette fonction, qui spécifie l'action devant déclencher la fonction. Dans le cas présent, l'événement est google.storage.object.finalize.

L'utilisation des options --trigger-resource MY_RESOURCE et --trigger-event MY_EVENT est le moyen le plus explicite de spécifier un déclencheur pour une fonction basée sur des événements. Cependant, gcloud fournit des raccourcis pour Pub/Sub et Cloud Storage :

  • Lorsque vous déployez des fonctions auxquelles sont associés des déclencheurs Pub/Sub, vous pouvez utiliser l'option --trigger-topic MY_TOPIC. Cette option est un raccourci pour --trigger-resource MY_TOPIC --trigger-event google.pubsub.topic.publish.

  • Lorsque vous déployez des fonctions auxquelles sont associés des déclencheurs Cloud Storage, vous pouvez utiliser l'option --trigger-bucket MY_STORAGE_BUCKET afin de déclencher l'exécution des fonctions lorsque les fichiers du bucket spécifié font l'objet de modifications.

Étapes suivantes