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.
- Ouvrez la Code Engine console.
- Sélectionnez « Commencer la création ».
- 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.
- Sélectionnez « Fonction ».
- Saisissez un nom pour la fonction; par exemple, «
myfunction». Choisissez pour votre fonction un nom unique au sein du projet. - Sélectionnez une image Runtime pour votre code de fonction. Pour plus d'informations, voir Runtimes.
- 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.
- 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électionnerNonepour 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. - 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.
- 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. - 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 secretet laisser Code Engine créer et gérer le secret pour vous. - 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.
- 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.
- En option, spécifiez un domaine personnalisé ou des variables d'environnement. Vous pouvez ajouter ces options ultérieurement.
- Cliquez sur Créer.
- 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.
- 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
- Configurez votre environnement d'interface de ligne de commande Code Engine.
- Créez et utilisez un projet.
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.
| Option | Description |
|---|---|
--name |
Nom de la fonction. Utilisez un nom unique dans le projet. Cette valeur est requise.
|
--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.
-
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; -
Créez un fichier
package.jsonqui contient les dépendances requises pour votre fonction. Pour l'exemple de code précédent, utilisez le contenu suivant pour votre fichierpackage.json.{ "name": "function", "version": "1.0.0", "main": "main.js", "dependencies" : { "lorem-ipsum" : "2.0.8" } } -
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 publichttps://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/ -
Exécutez la commande
fn getfournie pour obtenir des détails sur votre fonction. -
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.
-
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), } -
Créez un site
requirements.txtcontenant les dépendances nécessaires à votre fonctionlorem-text -
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 publichttps://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/ -
Exécutez la commande
fn getfournie pour obtenir des détails sur votre fonction. -
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 getpour 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 lafunction updatecommande.
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 createet que vous avez spécifié l'option--build-sourcepour 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écutezibmcloud 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.