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 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.

  1. Ouvrez la console Code Engine.
  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 d'exécution pour votre code de fonction. Pour plus d'informations, voir Environnements d'exécution.
  7. Sélectionnez l'option Utiliser un bundle de code existant.
  8. Indiquez l'emplacement de votre bundle de code au format registry/namespace/repository:tag.
  9. 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.
  10. Spécifiez vos informations de ressource, y compris les combinaisons d'UC et de mémoire et Scale down delay.
  11. Vous pouvez éventuellement spécifier un domaine personnalisé ou des variables d'environnement.
  12. Cliquez sur Créer.
  13. 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

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.

  1. 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_file
    

    Si 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.

  2. 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ée myregistry. Notez que, même si les options --server et --username sont spécifiées dans l'exemple de commande, la valeur par défaut pour l'option --server est us.icr.io et que l'option --username prend par défaut la valeur iamapikey lorsque le serveur est us.icr.io.

    ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEY
    

    Exemple de sortie

    Creating registry secret 'myregistry'...
    OK
    
  3. 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 create commande pour créer la fonction myhellofun afin de référencer le fichier icr.io/codeengine/samples/function-nodejs-codebundle à l’aide des informations d’accès myregistry.

    ibmcloud ce fn create --name myhellofun --code-bundle icr.io/NAMESPACE/REGISTRY:TAG --registry-secret myregistry
    

    Le nom du bundle de code correspondant à cette fonction se présente sous la forme « REGISTRY/NAMESPACE/REGISTRY:TAG », où « REGISTRY » et « TAG » sont facultatifs. Si REGISTRY n'est pas spécifié, la valeur par défaut est icr.io. Si TAG n'est pas spécifié, la valeur par défaut est latest.

  4. 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 get fournie. 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 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 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 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 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 ».