Exécution d'une fonction à partir d'une source locale

Avec ce tutoriel, exécutez une fonction avec l'interface de programmation Code Engine à partir d'un code sur votre système local

Une fonction est un extrait de code sans état qui exécute des tâches lorsqu'il est appelé par des requêtes d' HTTP. Avec les fonctions d' IBM Code Engine, vous pouvez exécuter votre logique métier de manière évolutive et sans serveur. IBM Code Engine offrent un environnement d'exécution optimisé pour prendre en charge les scénarios à faible latence et à montée en charge rapide. Votre code de fonction peut être écrit dans un runtime géré qui inclut des versions spécifiques d' Node.js, ou d' Python.

Un bundle de code est une collection de fichiers qui représente votre code de fonction. Ce bundle de code est injecté dans le conteneur d'exécution. Votre bundle de code est créé par Code Engine et est stocké dans le registre de conteneur ou en ligne avec la fonction. Un bundle de code n'est pas une image de conteneur standard OCI (Open Container Initiative).

Avant de commencer

Tous les utilisateurs Code Engine doivent avoir un compte de paiement à la carte. Les tutoriels peuvent entraîner des coûts. Utilisez l'estimateur de coût pour générer une estimation du coût en fonction de l'utilisation envisagée. Pour plus d'informations, voir Tarification Code Engine.

Configuration de votre environnement

  1. Connectez-vous à l'interface de ligne de commande IBM Cloud.

    ibmcloud login -r us-south
    
  2. Ciblez un groupe de ressources en exécutant la commande suivante : Pour obtenir la liste de vos groupes de ressources, exécutez la commande suivante ibmcloud resource groups.

    ibmcloud target -g <resource_group>
    

    Exemple de sortie

    Targeted resource group default
    
  3. Créez un projet dans Code Engine appelé sample.

    ibmcloud ce project create --name sample
    

    Exemple de sortie

    Creating project 'sample'...
    ID for project 'sample' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'.
    Waiting for project 'sample' to be active...
    Now selecting project 'sample'.
    OK
    

    Notez que votre projet est également sélectionné pour le contexte, de sorte que toutes les commandes d'application ultérieures se trouveront dans le périmètre de ce nouveau projet sample.

  4. Familiarisez-vous avec les commandes de fonctions en affichant les options de commande.

    ibmcloud ce fn --help
    

Créer le code source

Créez un fichier source Node.js appelé funhello.js avec l'exemple de code suivant.

  function main(params) {
      var msg = 'You did not tell me who you are.';
      if (params.name) {
          msg = `Hello, ${params.name}!`
       } else {
          msg = `Hello, Functions on CodeEngine!`
      }
      return {
          headers: { 'Content-Type': 'text/html; charset=utf-8' },
          body: `<html><body><h3>${msg}</h3></body></html>`
       }
  }

  module.exports.main = main;

Créez votre fonction

Créez la fonction à partir du fichier funhello.js.

ibmcloud ce fn create --name funhello --runtime nodejs --build-source funhello.js

Résultat de la commande

Preparing function 'funhello' for build push...
Creating function 'funhello'...
Packaging files to upload from source path 'hello.js'...
Submitting build run 'funhello-run-230623-090738611'...
Creating image 'private.stg.icr.io/ce--8a6a0-13c66hbi3rhz/function-funhello:230623-1407-s8kzr'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n funhello-run-230623-090738611' to check the build run status.
Waiting for function 'funhello' to become ready...
Function 'funhello' is ready.
OK
Run 'ibmcloud ce function get -n funhello' to see more details.

https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud

Après l'appel de la fonction URL, utilisez la commande suivante pour trouver des informations sur la fonction.

ibmcloud ce fn get -n funhello

Examinons plus en détail la commande**function create** précédente. Remarquez que la sortie de la commande function create fournit des informations sur la progression de l'exécution de la compilation avant que la fonction ne soit créée et déployée.

  1. Code Engine reçoit une demande de création d'une fonction à partir du code source.
  2. Code Engine recherche un identifiant de service IAM et une clé API associés au projet sélectionné. Cet identifiant de service doit être autorisé à lire et à écrire sur IBM Cloud Container Registry. Si aucun ID de service n'existe, Code Engine en crée un pour vous. Notez que cet ID de service est utilisé pour les demandes de génération Code Engine ultérieures qui sont exécutées à partir du même projet.
  3. Cet exemple construit le code à partir d'une source locale (--build-source). Le code source (hello.js) est rassemblé dans un fichier code-bundle et téléchargé dans un espace de noms géré au sein de l'instance IBM Cloud Container Registry de votre compte. Notez que vous ne pouvez cibler que IBM Cloud Container Registry pour vos générations locales. Pour plus d'informations sur IBM Container Registry, y compris des informations sur les limites de quotas et l'accès, voir Démarrer avec IBM Cloud Container Registry.
  4. Code Engine génère votre code source dans un bundle de code. Le paquet de code source est créé dans le même espace de noms que votre fichier d'archive source.
  5. Une fois la construction terminée, votre fonction est déployée. Vous pouvez accéder à votre fonction à partir du site URL.

Appelez votre fonction

Invoquez la fonction URL en la collant dans une fenêtre de navigateur. Vous pouvez également utiliser la commande curl dans votre ligne de commande.

Hello, Functions on CodeEngine!

Vous avez créé et appelé une fonction Code Engine !

Indiquez des paramètres pour votre fonction

Invoquez la fonction URL avec un paramètre en ajoutant ?name=Sunshine à la fin de l' URL, puis collez-la dans une fenêtre de navigateur.

https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud?name=Sunshine
Hello, Sunshine!

Nettoyer

Vous pouvez supprimer votre fonction à l'aide de la commande suivante.

ibmcloud ce fn delete -n funhello

Lorsque vous supprimez votre fonction, les fichiers de construction associés sont également supprimés.

Enfin, supprimez le paquet de code créé par la compilation à partir de IBM Cloud Container Registry.

  1. Aller vers Container Registry> Images dans le IBM Cloud console.
  2. Sélectionnez la région dans le Emplacement menu déroulant que vous avez sélectionné lors de votre connexion IBM Cloud.
  3. Recherchez l'image (qui représente votre ensemble de codes) associée à votre fonction en recherchant le nom de votre fonction (par exemple,funhello ).
  4. Sélectionnez l'image (par exemple,au.icr.io/ce--27b98-1jp42v8n9n3o/function-funhello@sha256:b53683f47e0e548b4fa1d3fc93404399fdc4008b54ccecc0852794ea88d01538 ) et sélectionnez Supprimer dans le menu points de suspension (...).

Etapes suivantes

  • Une fois votre fonction créée, vous pouvez y accéder en cliquant sur Test function dans la console ou en recherchant l' URL s de votre fonction avec la function get commande.

  • Vous pouvez créer un mappage de domaine personnalisé et l'affecter à votre fonction.

  • Une fois votre fonction créée et déployée, vous pouvez la mettre à jour pour répondre à vos besoins à partir de la console ou à l'aide de la commande ibmcloud ce function update. Si vous souhaitez mettre à jour votre source pour l'utiliser avec votre fonction, vous devez fournir l'option --build-source à la commande function update à l'aide de l'option.

Une fois votre fonction créée, vous pouvez la mettre à jour ainsi que son code référencé en utilisant l' une des méthodes suivantes, indépendamment de la façon dont vous avez créé ou mis à jour votre fonction précédemment :

  • Si vous disposez d'un bundle de code existant, vous devez fournir uniquement une référence à l'image, qui pointe vers l'emplacement de votre registre de conteneur lorsque vous déployez votre application. Pour plus d'informations, voir Création de charges de travail de fonction à partir de bundles de code existants.

    Si vous avez créé votre fonction à l'aide de la commande function create et que vous avez spécifié l'option --build-source pour générer le bundle de code à partir de la source locale ou du référentiel, et que vous souhaitez modifier votre fonction pour qu'elle pointe vers un bundle de code différent, vous devez d'abord supprimer l'association de la génération de votre fonction. Par exemple, exécutez ibmcloud ce function update -n FUN_NAME --build-clear. Après avoir supprimé l'association de la génération de votre fonction, vous pouvez mettre à jour la fonction pour référencer une image différente.

  • Si vous commencez avec un code source qui réside dans un dépôt Git, vous pouvez choisir de laisser Code Engine construire le paquet de code à partir de votre source et créer votre fonction en une seule opération. Dans ce scénario, Code Engine télécharge votre paquet de codes sur IBM Cloud® Container Registry. Pour en savoir plus, voir Création de votre fonction à partir du code source du référentiel.

  • Si vous démarrez avec du code source qui réside sur un poste de travail local, vous pouvez choisir pour Code Engine de générer le bundle de code à partir de votre source et de créer votre fonction à l'aide d'une commande d'interface de ligne de commande unique. Dans ce scénario, Code Engine télécharge votre code source et votre bundle de code dans IBM Cloud® Container Registry.

    Par exemple, vous pouvez choisir Code Engine pour construire votre source locale pendant que vous faites évoluer le développement de votre source pour la fonction. Ensuite, une fois que le bundle de code est arrivé à maturité, vous pouvez mettre à jour votre fonction pour référencer le bundle de code spécifique de votre choix. Vous pouvez répéter ce processus si nécessaire.

Vous recherchez d'autres exemples de code ? Consultez les exemples pour le IBM Cloud Code Engine GitHub.