Création de charges de travail de fonction à partir de bundles de code existants
Créez votre fonction « Code Engine » à l'aide d'un ensemble de codes disponible à l'adresse IBM Cloud® Container Registry. Vous pouvez créer une fonction depuis la console ou via l'interface de ligne de commande (CLI).
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).
Vous ne pouvez pas récupérer des ensembles de code à partir d'un autre emplacement que Container Registry.
Avant de commencer
-
Vous devez disposer d'un bundle de code dans IBM Cloud® Container Registry. Pour plus d'informations, voir Initiation à Container Registry. Vous pouvez également générer une image à partir de la source du référentiel ou de la source locale.
-
Vérifiez que vous pouvez accéder au registre. Pour plus d'informations, voir Configuration de droits d'accès aux registres de conteneurs.
Vous souhaitez configurer votre projet de manière à ce que tous les utilisateurs puissent stocker et consulter des images sur Container Registry sans avoir à créer manuellement des secrets de registre? Avec des droits suffisants, vous pouvez configurer cet accès au registre par défaut par emplacement (région). Si vous ne disposez pas des droits suffisants pour effectuer ces actions, vous pouvez utiliser cette page pour vous aider à comprendre les droits requis. Voir Configuration des paramètres à l'échelle du projet.
Création d'une fonction qui fait référence à un bundle de code dans Container Registry à l'aide de la console
Créez une fonction qui utilise un ensemble de code existant à l'aide de la console « Code Engine ».
Code Engine peut extraire automatiquement des bundles de code de Container Registry.
- Ouvrez la console Code Engine.
- 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 d'exécution pour votre code de fonction. Pour plus d'informations, voir Environnements d'exécution.
- Sélectionnez l'option Utiliser un bundle de code existant.
- Indiquez l'emplacement de votre bundle de code au format
registry/namespace/repository:tag. - Si votre bundle de code se trouve dans votre compte ou dans un registre public, vous n'avez pas besoin de spécifier un secret de registre. Si le bundle de code se trouve dans un registre privé, vous devez ajouter le secret de registre. Pour obtenir de l'aide supplémentaire, cliquez sur Aide pour spécifier le bundle de code. Pour plus d'informations, voir Accès aux registres de conteneurs.
- Spécifiez vos informations de ressource, y compris les combinaisons d'UC et de mémoire et Scale down delay.
- Vous pouvez éventuellement spécifier un domaine personnalisé ou des variables d'environnement.
- 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.
Déploiement d'une fonction avec un bundle de code existant à l'aide de l'interface de ligne de commande
Créez une fonction qui utilise un ensemble de codes stocké sur IBM Cloud® Container Registry à l'aide de l'interface de ligne de commande (CLI) avec la ibmcloud ce fn create commande. Pour obtenir la liste complète
des options, consultez la ibmcloud ce fn create commande.
Avant de commencer
- Configurez votre environnement d'interface de ligne de commande Code Engine.
- Créez et utilisez un projet.
- Avant de pouvoir utiliser une fonction « Code Engine » faisant référence à un ensemble de codes disponible sur Container Registry, vous devez d’abord lui accorder un accès au registre afin que Code Engine puisse récupérer cet ensemble de codes lors de la création de la fonction. Pour plus d'informations sur les droits requis pour accéder aux registres, voir Configuration des droits pour les registres d'images.
Déploiement d'une fonction à partir d'un registre public à l'aide de l'interface de ligne de commande
Si votre bundle de code existant se trouve dans votre compte ou dans un registre public, vous pouvez utiliser la commande ibmcloud ce fn create.
Par exemple, exécutez la commande suivante pour extraire un bundle de code existant du registre public et créer une fonction.
ibmcloud ce fn create --name myhellofun --code-bundle icr.io/codeengine/samples/function-nodejs-codebundle --runtime nodejs
Exécutez la fn get pour trouver l' URL. Vous pouvez ensuite utiliser la commande « curl » pour appeler ce fichier « URL ».
Exemple de sortie du bundle de code existant.
<html><body><h3>Hello, Functions on CodeEngine!</h3></body></html>
Déploiement d'une fonction à partir d'un registre privé à l'aide de l'interface de ligne de commande
Pour accéder à un bundle de code existant à partir d'un registre privé, vous devez configurer l'accès au registre, créer un secret de registre, puis fournir ce secret lorsque vous exécutez la commande ibmcloud ce fn create.
-
Pour ajouter un accès dans Container Registry, créez une clé d'API IAM. Pour créer une clé d'API IAM IBM Cloud via l'interface de ligne de commande, exécutez la commande
iam api-key-create. Par exemple, pour créer une clé API nommée «cliapikey» avec la description «My CLI API key» et l'enregistrer dans un fichier nommé «key_file», exécutez la commande suivante :ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_fileSi vous choisissez de ne pas sauvegarder votre clé dans un fichier, vous devez enregistrer la clé d'API qui s'affiche lors de sa création. Vous ne pourrez pas la récupérer ultérieurement.
-
Après avoir créé votre clé d'API, créez un secret de registre dans Code Engine. Pour créer un secret de registre, utilisez la commande
ibmcloud ce secret create --format registry. Par exemple, la commande suivante crée une entrée de registre permettant d'accéder à une instance d' Container Registry nomméemyregistry. Notez que, même si les options--serveret--usernamesont spécifiées dans l'exemple de commande, la valeur par défaut pour l'option--serverestus.icr.ioet que l'option--usernameprend par défaut la valeuriamapikeylorsque le serveur estus.icr.io.ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEYExemple de sortie
Creating registry secret 'myregistry'... OK -
Créez votre fonction et référencez un bundle de code dans un registre privé dans Container Registry. Par exemple, utilisez la
ibmcloud ce fn createcommande pour créer la fonctionmyhellofunafin de référencer le fichiericr.io/codeengine/samples/function-nodejs-codebundleà l’aide des informations d’accèsmyregistry.ibmcloud ce fn create --name myhellofun --code-bundle icr.io/NAMESPACE/REGISTRY:TAG --registry-secret myregistryLe nom du bundle de code correspondant à cette fonction se présente sous la forme «
REGISTRY/NAMESPACE/REGISTRY:TAG», où «REGISTRY» et «TAG» sont facultatifs. SiREGISTRYn'est pas spécifié, la valeur par défaut esticr.io. SiTAGn'est pas spécifié, la valeur par défaut estlatest. -
Une fois votre fonction créée, vous pouvez l'appeler. Pour obtenir l' URL ion de votre fonction, exécutez la commande
ibmcloud ce fn getfournie. Vous pouvez ensuite utiliser la commande «curl» pour appeler cette URL.
Etapes suivantes
-
Une fois votre fonction créée, vous pouvez y accéder en cliquant sur « Tester la fonction » dans la console ou en recherchant l' URL s relatives à votre fonction à l'aide de la
function getcommande. -
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 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 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 createet que vous avez spécifié l'option--build-sourcepour 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écutezibmcloud 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 partez d'un code source hébergé dans un dépôt Git, vous pouvez choisir de laisser Code Engine se charger de générer le bundle de code à 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 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 d'utiliser Code Engine pour compiler votre code source local pendant que vous poursuivez le développement de ce dernier pour cette fonctionnalité. 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 ? Découvrez le site Exemples pour le dépôt « IBM Cloud Code Engine GitHub ».