Création de charges de travail fonctionnelles avec le code source du référentiel

Vous pouvez créer votre fonction directement à partir du code source stocké dans un référentiel Git, depuis la console IBM Cloud® Code Engine ou via l'interface de ligne de commande (CLI).

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

Dans ce scénario, Code Engine construit un paquet de code à partir de la source de votre dépôt Git, télécharge automatiquement le paquet de code dans votre registre de conteneurs, puis crée votre fonction pour faire référence à ce paquet de code construit. Vous ne devez fournir qu'un nom pour la fonction, le lien URL vers le référentiel Git et la durée d'exécution de la fonction. Dans ce cas, Code Engine gère l'espace de nom pour vous. Toutefois, si vous souhaitez utiliser un autre registre de conteneurs, vous devez alors spécifier le bundle de code ainsi qu'un secret de registre correspondant à ce registre de conteneurs.

Pour plus d'informations sur les droits requis pour l'accès aux registres d'images, voir Configuration des droits pour les registres d'images.

Création de charges de travail fonctionnelles avec le code source du référentiel à partir de la console

Créer une fonction avec le code source à partir de la console.

  1. Ouvrez la Code Engine console.
  2. Sélectionnez « Commencer la création ».
  3. Sélectionnez un projet dans la liste des projets disponibles. Vous pouvez aussi en créer un. Vous devez sélectionner un projet pour créer une fonction.
  4. Sélectionnez « Fonction ».
  5. Saisissez un nom pour la fonction; par exemple, « myfunction ». Choisissez pour votre fonction un nom unique au sein du projet.
  6. Sélectionnez une image Runtime pour votre code de fonction. Pour plus d'informations, voir Runtimes.
  7. Sélectionnez cette option pour compiler le bundle de code à partir du code source. Lorsque vous sélectionnez cette option, votre fonction est créée à partir du code source et stockée dans le registre du conteneur.
  8. Sélectionnez un référentiel source, par exemple https://github.com/IBM/CodeEngine. Si vous choisissez d'utiliser l'exemple de source, vous n'avez pas besoin d'informations d'identification, vous pouvez donc sélectionner None pour l'accès au répertoire de code. Vous pouvez éventuellement fournir un nom de branche. Si vous ne fournissez pas de nom de branche et que vous laissez la zone vide, Code Engine utilise automatiquement la branche par défaut du référentiel spécifié. Cliquez sur Suivant.
  9. Sélectionnez une stratégie et des ressources pour votre génération. Pour plus d'informations sur les options de génération, voir Planification de votre génération. Cliquez sur Suivant.
  10. Sélectionnez un emplacement de registre de conteneur, tel que IBM Registry Dallas , pour indiquer où stocker l'image de votre sortie de génération. Si votre registre est privé, vous devez configurer l'accès à ce dernier.
  11. Fournit des informations de registre sur l'emplacement de stockage de l'image de votre sortie de génération. Sélectionnez un secret de registre existant ou créez-en un nouveau. Si vous créez votre image sur une instance Container Registry qui se trouve dans votre compte, vous pouvez sélectionner Code Engine managed secret et laisser Code Engine créer et gérer le secret pour vous.
  12. Sélectionnez un espace de nom, un nom et une balise pour votre image. Si vous créez votre image sur une instance IBM Cloud Container Registry qui se trouve dans votre compte, vous pouvez sélectionner un espace-noms existant ou laisser Code Engine créer et gérer l'espace de nom pour vous. Pour obtenir de l'aide supplémentaire, cliquez sur Aidez-moi à spécifier l'ensemble de codes. Pour plus d'informations, voir Accès aux registres de conteneurs.
  13. Spécifiez les informations relatives à vos ressources, y compris les combinaisons de CPU et de mémoire et le délai de mise à l'échelle.
  14. En option, spécifiez un domaine personnalisé ou des variables d'environnement. Vous pouvez ajouter ces options ultérieurement.
  15. Cliquez sur Créer.
  16. Une fois que l'état de la fonction passe à « **Prêt ** », vous pouvez tester cette fonction. Cliquez sur Fonction de test, puis sur Envoyer la demande. Pour ouvrir la fonction dans une page Web, cliquez sur « Fonction » URL.
  17. Vous pouvez également modifier votre code de fonction dans la fenêtre de l'éditeur. Lorsque vous redéployez votre fonction, le code est stocké en ligne.

Vous pouvez invoquer votre fonction en cliquant sur Tester la fonction, puis sur Envoyer la demande.

Créer des charges de travail fonctionnelles avec le code source du référentiel à l'aide de l'interface CLI

Utilisez la commande function create pour construire un paquet de code à partir de la source de votre dépôt Git, et créer votre fonction pour faire référence à ce paquet de code construit. Pour obtenir la liste complète des options, consultez la ibmcloud ce function create commande.

Avant de commencer

L'exemple suivant function create crée la fonction myfun, qui fait référence au code situé dans https://github.com/IBM/CodeEngine. Cette commande construit automatiquement le paquet de code et le télécharge dans un espace de noms IBM Cloud® Container Registry dans votre compte. La fonction fait référence à ce paquet de code construit. En spécifiant l'option--build-context-dir, la génération utilise la source dans le répertoirehelloworld-samples/function-codebundle-nodejs.

ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs

Exemple de sortie

Preparing function 'myfun' for build push...
Creating function 'myfun'...
Submitting build run 'myfun-run-230111-111212718'...
Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' to check the build run status.
Waiting for function 'myfun' to become ready...
Function 'myfun' is ready.
OK                                                
Run 'ibmcloud ce function get -n myfun' to see more details.
https://myfun.11a66hbi3rhz.us-south.codeengine.appdomain.cloud

Remarquez que la sortie de la commande function create fournit des informations sur la progression de l'exécution de la compilation avant la création de la fonction.

Dans cet exemple, le bundle de code généré est mis en ligne dans l'espace de noms « ce--abcde-4svg40kna19 » sur Container Registry.

Le tableau suivant récapitule les options utilisées avec la function create commande dans cet exemple. Pour plus d'informations sur cette commande et ses options, consultez la ibmcloud ce function create commande.

Description de la commande
Option Description
--name

Nom de la fonction. Utilisez un nom unique dans le projet. Cette valeur est requise.

  • Le nom doit commencer par une lettre minuscule.
  • Le nom doit se terminer par un caractère alphanumérique en minuscules.
  • Le nom doit contenir 63 caractères ou moins et peut contenir des lettres, des nombres et des traits d'union (-).
--build-source L'URL du référentiel Git qui contient votre code source ; par exemple, https://github.com/IBM/CodeEngine.
--build-context-dir Le répertoire du référentiel qui contient le code. Cette valeur est facultative.
--runtime La durée d'exécution de la fonction.

La sortie suivante montre le résultat de la commande **function get**pour cet exemple, y compris des informations sur la génération.

Exemple de sortie

Getting function 'myfun'
'...
OK
Name:          myfun  
Project Name:  sample  
Project ID:    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Age:           27m  
Created:       2023-06-27T21:07:26Z  
Visibility:    public  
URL:           https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud  
Internal URL:  http://myfun.13c66hbi3rhz.function.cluster.local  
Resources:    
  CPU:               0.25  
  Memory:            500M  
  Timeout:           60 seconds  
  Scale Down Delay:  1 seconds  
  Trusted profiles:  disabled  
Environment Variables:    
  Type     Name             Value  
  Literal  CE_API_BASE_URL  https://api.us-south.codeengine.cloud.ibm.com  
  Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
  Literal  CE_FUNCTION      myfun  
  Literal  CE_REGION        us-south  
  Literal  CE_SUBDOMAIN     13c66hbi3rhz  
  Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Build Information:    
  Build Run Name:     myfun-run-230111-111212718  
  Build Type:         git  
  Build Strategy:     codebundle-nodejs-22
  Timeout:            600  
  Source:             https://github.com/IBM/CodeEngine  
  Context Directory:  /helloworld-samples/function-codebundle-nodejs    
                      
  Build Run Status:   Succeeded  
  Build Run Reason:   All Steps have completed executing  
  Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' for details.  
Function Code:    
  Runtime:        nodejs-22
  Bundle Secret:  ce-auto-icr-us-south  
  Code Bundle:    cr://icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o
  Main:           main
Status:  Ready  
URL:     https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud

Maintenant que votre fonction est créée à partir du code source du référentiel, vous pouvez la mettre à jour pour qu'elle réponde à vos besoins en utilisant la commande ibmcloud ce function update pour l'adapter à vos besoins. Si vous souhaitez mettre à jour votre source pour l'utiliser avec votre fonction, vous devez spécifier l'option « --build-source » dans la function update commande.

Lorsque votre fonction est créée à partir du code source du référentiel ou du code source local à l'aide de l'interface de programmation, l'exécution de la compilation qui en résulte n'est pas basée sur une configuration de compilation. Les séries de construction qui se terminent sont finalement automatiquement supprimées. Les exécutions qui ne sont pas basées sur une configuration de construction sont supprimées au bout d'une heure si l'exécution de la construction s'est déroulée avec succès. Si l'exécution de la compilation n'est pas réussie, elle est supprimée au bout de 24 heures. Vous ne pouvez afficher des informations sur ce cycle de construction qu'avec l'interface de programmation. Vous ne pouvez pas visualiser cette exécution dans la console.

Inclure les dépendances pour votre fonction

Vous pouvez créer des fonctions dans de nombreux langages de programmation différents. Lorsque le code de votre fonction devient complexe, vous pouvez ajouter des modules de code en tant que dépendances pour votre fonction. Chaque langue possède ses propres modules à utiliser avec votre code de fonction. Par exemple, les dépendances de Node.js sont généralement des modules existants de npm, tandis que Python utilise des paquets de Python. Ces dépendances doivent être déclarées et créées dans un fichier avec votre code source

Inclure des modules pour une fonction Node.js

Créez une fonction qui inclut une dépendance pour un module spécifique Node.js en créant un fichier package.json. Dans ce cas, le code source et le fichier du paquet sont situés dans le même dossier.

  1. Créez votre code source en écrivant votre code dans un fichier main.js. Par exemple, copiez l'exemple de code suivant dans un fichier appelé main.js.

    /**
    * The `main` function is the entry-point into the function.
    * It has one optional argument, which carries all the
    * parameters the function was invoked with.
    */
    function main(params /* optional */) {
      // use third-party 'lorem-ipsum' package to generate random words
      const LoremIpsum = require("lorem-ipsum").LoremIpsum;
      const lorem = new LoremIpsum();
      // Since functions are invoked through http(s), we return an HTTP response.
      return {
        headers: { "Content-Type": "text/plain;charset=utf-8" },
        body: lorem.generateWords(10),
      };
    }
    // This step is necessary, if you gave your main function a different name.
    // We include it here for documentation purposes only.
    module.exports.main = main;
    
  2. Créez un fichier package.json qui contient les dépendances requises pour votre fonction. Pour l'exemple de code précédent, utilisez le contenu suivant pour votre fichier package.json.

    {
      "name": "function",
      "version": "1.0.0",
      "main": "main.js",
      "dependencies" : {
    		    "lorem-ipsum" : "2.0.8"
     	}
    }
    
  3. Créez vos fichiers comme une fonction dans Code Engine. Les deux fichiers précédents doivent être accessibles dans le référentiel. S'ils se trouvent dans un dépôt privé, créez un accès au dépôt de code privé et fournissez ensuite cette valeur avec l'option --build-git-repo-secret. Si vos fichiers se trouvent dans un répertoire autre que le répertoire principal, indiquez le chemin d'accès à ce répertoire à l'aide de l'option --build-context-dir. L'exemple suivant extrait les fichiers du dépôt public https://github.com/IBM/CodeEngine.

    ibmcloud ce fn create -n nodelorem -runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs/
    
  4. Exécutez la commande fn get fournie pour obtenir des détails sur votre fonction.

  5. Invoquez votre fonction en collant l'adresse URL dans un navigateur web. Votre navigateur affiche un passage de lorem ipsum.

Pour plus d'informations sur la commande fn create et ses options, voir Créer une fonction.

Inclure des modules pour une fonction Python

Créez une fonction qui inclut une dépendance pour un module spécifique Python en créant un fichier requirements.txt. Dans ce cas, le code source et le fichier d'exigences se trouvent dans le même dossier.

  1. Créez votre fonction en enregistrant votre code dans un fichier __main__.py

    # use third-party 'lorem-ipsum' package to generate random words
    from lorem_text import lorem
    # The `main` function is the entry-point into the function.
    # It has one optional argument, which carries all the
    # parameters the function was invoked with.
    def main(params):
        words = 10
        # since functions are invoked through http(s), we return an HTTP response
        return {
          "headers": {
            "Content-Type": "text/plain;charset=utf-8",
        },
        "body": lorem.words(words),
    }
    def main(params):
         words = 10
         return {
              "headers": {
                  "Content-Type": "text/plain;charset=utf-8",
              },
              "body": lorem.words(words),
          }
    
  2. Créez un site requirements.txt contenant les dépendances nécessaires à votre fonction

    lorem-text
    
  3. Créez vos fichiers comme une fonction dans Code Engine. Les deux fichiers précédents doivent être accessibles dans le référentiel. S'ils se trouvent dans un dépôt privé, créez un accès au dépôt de code privé et fournissez ensuite cette valeur avec l'option --build-git-repo-secret. Si vos fichiers se trouvent dans un répertoire autre que le répertoire principal, indiquez le chemin d'accès à ce répertoire à l'aide de l'option --build-context-dir. L'exemple suivant extrait les fichiers du dépôt public https://github.com/IBM/CodeEngine.

    ibmcloud ce fn create -n pylorem -runtime python --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-python/
    
  4. Exécutez la commande fn get fournie pour obtenir des détails sur votre fonction.

  5. Invoquez votre fonction en collant l'adresse URL dans un navigateur web. Votre navigateur affiche un passage de lorem ipsum.

Pour plus d'informations sur la commande fn create et ses options, voir Créer une fonction.

Etapes suivantes

  • Une fois votre fonction créée, vous pouvez y accéder en cliquant sur Test function dans la console ou en trouvant le site URL pour votre fonction avec la commande function get pour votre fonction.

  • Vous pouvez créer un mappage de domaine personnalisé et l'attribuer à 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 en utilisant la commande ibmcloud ce function update à partir de la console ou en utilisant la commande Si vous souhaitez mettre à jour votre source pour l'utiliser avec votre fonction, vous devez spécifier l'option « --build-source » dans la function update commande.

Une fois votre fonction créée, vous pouvez la mettre à jour, ainsi que le code auquel elle fait référence, en utilisant l'une des méthodes suivantes, quelle que soit la manière dont vous avez créé ou mis à jour précédemment votre fonction :

  • Si vous disposez d'un code bundle existant, vous ne devez fournir qu'une référence à l'image, qui pointe vers l'emplacement de votre registre de conteneurs lorsque vous déployez votre application. Pour plus d'informations, voir Création de charges de travail de fonctions à partir de lots de codes 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 construire l'ensemble de codes à partir de sources locales ou du référentiel, et que vous souhaitez modifier votre fonction pour qu'elle pointe vers un ensemble de codes différent, vous devez d'abord supprimer l'association de la construction de votre fonction. Par exemple, exécutez ibmcloud ce function update -n FUN_NAME --build-clear. Après avoir supprimé l'association de la construction de votre fonction, vous pouvez mettre à jour la fonction pour qu'elle fasse référence à une autre image.

  • Si vous partez d'un code source hébergé dans un dépôt Git, vous pouvez choisir de laisser Code Engine se charger de compiler le bundle à partir de votre code source et de créer votre fonction en une seule opération. Dans ce scénario, Code Engine télécharge votre ensemble de codes vers IBM Cloud® Container Registry. Pour en savoir plus, voir Création d'une fonction à partir du code source du référentiel.

  • Si vous commencez avec un code source qui réside sur un poste de travail local, vous pouvez choisir Code Engine pour construire le paquet de code à partir de votre source et créer votre fonction avec une seule commande CLI. Dans ce scénario, Code Engine télécharge votre code source et votre paquet de codes vers IBM Cloud® Container Registry.

    Par exemple, vous pouvez choisir d'utiliser Code Engine pour compiler votre code source local pendant que vous poursuivez le développement de ce dernier pour cette fonctionnalité. Ensuite, lorsque l'ensemble de codes est arrivé à maturité, vous pouvez mettre à jour votre fonction pour qu'elle fasse référence à l'ensemble de codes spécifique que vous souhaitez. Vous pouvez répéter ce processus si nécessaire.

Vous recherchez d'autres exemples de code ? Consultez le répertoire Samples for IBM Cloud Code Engine GitHub.