IBM Cloud Docs
Funktionsworkloads mit Repository-Quellcode erstellen

Funktionsworkloads mit Repository-Quellcode erstellen

Sie können Ihre Funktion direkt aus dem Quellcode erstellen, der sich in einem Git-Repository von der IBM Cloud® Code Engine-Konsole oder mit der CLI befindet.

Ein Codepaket ist eine Sammlung von Dateien, die Ihren Funktionscode darstellt. Dieses Codepaket wird in den Laufzeitcontainer eingefügt. Ihr Code-Bundle wird von Code Engine erstellt und in der Container-Registry oder in der Funktion gespeichert. Ein Codepaket ist kein OCI-Standard-Container-Image (Open Container Initiative).

In diesem Szenario erstellt Code Engine ein Code-Bundle aus Ihrer Git-Repository-Quelle, lädt das Code-Bundle automatisch in Ihre Container-Registry hoch und erstellt dann Ihre Funktion zum Referenzieren dieses erstellten Code-Bundles. Sie müssen nur einen Namen für die Funktion, die URL an das Git-Repository und die Laufzeit für die Funktion angeben. In diesem Fall verwaltet Code Engine den Namensbereich für Sie. Wenn Sie jedoch eine andere Container-Registry verwenden möchten, müssen Sie das Code-Bundle und ein Registry-Secret für diese Container-Registry angeben.

Informationen zu den erforderlichen Zugriffsberechtigungen bezüglich Image-Registrys finden Sie unter Berechtigungen für Image-Registrys einrichten.

Funktionsworkloads mit Repository-Quellcode über die Konsole erstellen

Erstellen Sie über die Konsole eine Funktion mit Quellcode.

  1. Öffnen Sie die Code Engine-Konsole.
  2. Wählen Sie Los geht's aus.
  3. Funktion auswählen.
  4. Geben Sie einen Namen für die Funktion ein, z. B. myfunction. Verwenden Sie für Ihre Funktion einen Namen, der innerhalb des Projekts eindeutig ist.
  5. Wählen Sie ein Projekt aus der Liste der verfügbaren Projekte aus. Sie können auch ein neues erstellen. Sie müssen ein Projekt auswählen, um eine Funktion zu erstellen.
  6. Wählen Sie ein Laufzeitimage für Ihren Funktionscode. Weitere Informationen finden Sie unter Laufzeiten.
  7. Wählen Sie "Code-Paket aus Quellcode erstellen ". Wenn Sie diese Option auswählen, wird Ihre Funktion aus Quellcode erstellt und in der Container-Registry gespeichert.
  8. Wählen Sie ein Quellenrepository aus, z. B. https://github.com/IBM/CodeEngine. Wenn Sie die Beispielquelle verwenden möchten, benötigen Sie keine Berechtigungsnachweise, damit Sie None für den Code-Repository-Zugriff auswählen können. Sie können optional einen Verzweigungsnamen angeben. Wenn Sie keinen Verzweigungsnamen angeben und das Feld leer lassen, verwendet Code Engine automatisch die Standardverzweigung des angegebenen Repositorys. Klicken Sie Weiter.
  9. Wählen Sie eine Strategie für Ihren Build sowie Ressourcen für Ihren Build aus. Weitere Informationen zu Buildoptionen finden Sie im Abschnitt Build planen. Klicken Sie auf Weiter.
  10. Wählen Sie eine Position für die Container-Registry aus, z. B. IBM Registry Dallas, um anzugeben, wo das Image Ihrer Buildausgabe gespeichert werden soll. Wenn Ihre Registry privat ist, müssen Sie den Zugriff auf diese Registry einrichten.
  11. Geben Sie Registryinformationen dazu an, wo das Image Ihrer Buildausgabe gespeichert werden soll. Wählen Sie ein vorhandenes Registrierungsgeheimnis aus oder erstellen Sie ein neues. Wenn Sie Ihr Image in einer Container Registry-Instanz erstellen, die sich in Ihrem Konto befindet, können Sie Code Engine managed secret auswählen und Code Engine den geheimen Schlüssel für Sie erstellen und verwalten lassen.
  12. Wählen Sie einen Namensbereich, einen Namen und einen Tag für Ihr Image aus. Wenn Sie Ihr Image in einer IBM Cloud Container Registry-Instanz erstellen, die sich in Ihrem Konto befindet, können Sie einen vorhandenen Namensbereich auswählen oder Code Engine den Namensbereich für Sie erstellen und verwalten lassen. Klicken Sie für weitere Hilfe auf Hilfe zur Angabe des Codepakets. Weitere Informationen finden Sie unter Auf Container-Registrys zugreifen.
  13. Geben Sie Ihre Ressourceninformationen an, einschließlich CPU-und Speicherkombinationen und Scale-down-Verzögerung.
  14. Geben Sie optional eine angepasste Domäne oder Umgebungsvariablen an. Sie können diese Optionen später hinzufügen.
  15. Klicken Sie auf Erstellen.
  16. Nachdem der Funktionsstatus auf "Bereit" geändert wurde, können Sie die Funktion testen. Klicken Sie auf Testfunktion und anschließend auf Anforderung senden. Um die Funktion auf einer Webseite zu öffnen, klicken Sie auf "Funktion URL ".
  17. Sie können Ihren Funktionscode auch im Editorfenster ändern. Wenn Sie Ihre Funktion erneut implementieren, wird der Code inline gespeichert.

Sie können Ihre Funktion aufrufen, indem Sie auf Funktion testen und anschließend auf Anforderung senden klicken.

Funktionsworkloads mit Repository-Quellcode über die CLI erstellen

Verwenden Sie den Befehl function create, um ein Code-Bundle aus Ihrer Git-Repositoryquelle zu erstellen, und erstellen Sie Ihre Funktion, um auf dieses erstellte Code-Bundle zu verweisen. Eine vollständige Liste der Optionen finden Sie im ibmcloud ce function create befehl.

Vorbereitende Schritte

Der folgende Beispielbefehl function create erstellt die Funktion myfun, die auf Code in https://github.com/IBM/CodeEngine verweist. Dieser Befehl erstellt das Code-Bundle automatisch und lädt es in einen IBM Cloud® Container Registry-Namespace in Ihrem Konto hoch. Die Funktion referenziert dieses erstellte Codepaket. Wenn Sie die Option --build-context-dir angeben, verwendet der Build die Quelle im Verzeichnis helloworld-samples/function-nodejs.

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

Beispielausgabe

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

Beachten Sie, dass die Ausgabe des Befehls function create Informationen zum Fortschritt der Buildausführung enthält, bevor die Funktion erstellt wird.

In diesem Beispiel wird das erstellte Code-Paket in den ce--abcde-4svg40kna19-Namensraum in Container Registry hochgeladen.

Die folgende Tabelle fasst die Optionen zusammen, die mit dem function create befehl in diesem Beispiel verwendet werden. Weitere Informationen über den Befehl und seine Optionen finden Sie unter ibmcloud ce function create befehl.

Befehlsbeschreibung
Option Beschreibung
--name

Der Name der Funktion. Verwenden Sie einen Namen, der innerhalb des Projekts eindeutig ist. Dieser Wert ist erforderlich.

  • Der Name muss mit einem Kleinbuchstaben beginnen.
  • Der Name muss mit einem alphanumerischen Zeichen enden.
  • Der Name darf maximal 63 Zeichen lang sein und muss Buchstaben, Ziffern und Bindestriche (-) enthalten.
--build-source Die URL des Git-Repositorys, in dem der Quellcode enthalten ist; Beispiel: https://github.com/IBM/CodeEngine.
--build-context-dir Das Verzeichnis im Repository, das den Code enthält. Dieser Wert ist optional.
--runtime Die Laufzeit für die Funktion.

Die folgende Ausgabe zeigt das Ergebnis des Befehls function get für dieses Beispiel, einschließlich Informationen zum Build.

Beispielausgabe

Getting function 'myfun'
'...
OK

Name:          myfun  
Project Name:  sample  
Project ID:    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f  
Age:           27m  
Created:       2023-06-27T21:07:26Z  
URL:           https://myfun.13c66hbi3rhz.us-south.codeengine.test.appdomain.cloud  
Status:        Ready  

Resources:    
  CPU:                 0.25  
  Memory:              500M  
  Max Execution Time:  60 seconds  

Build Information:    
  Build Run Name:     myfun-run-230111-111212718  
  Build Type:         git  
  Build Strategy:     codebundle-nodejs-20  
  Timeout:            600  
  Source:             https://github.com/IBM/CodeEngine  
  Context Directory:  /helloworld-samples/function-nodejs    

  Build Run Summary:  Succeeded  
  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-20 (managed)  
  Bundle Secret:  ce-auto-icr-us-south  
  Code Bundle:    cr://icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o
  Main:           main()

Nachdem Ihre Funktion aus dem Quellcode des Repositorys erstellt wurde, können Sie die Funktion mit dem Befehl ibmcloud ce function update an Ihre Anforderungen anpassen. Wenn Sie Ihre Quelle für die Verwendung mit Ihrer Funktion aktualisieren möchten, müssen Sie die Option --build-source im function update befehl angeben.

Wenn Ihre Funktion über Repository-Quellcode oder lokale Quelle über die Befehlszeilenschnittstelle erstellt wird, basiert die resultierende Buildausführung nicht auf einer Buildkonfiguration. Buildausführungen, die abgeschlossen werden, werden letztendlich automatisch gelöscht. Buildausführungen, die nicht auf einer Buildkonfiguration basieren, werden nach einer Stunde gelöscht, wenn die Buildausführung erfolgreich war. Wenn die Buildausführung nicht erfolgreich ist, wird sie nach 24 Stunden gelöscht. Sie können Informationen zu dieser Buildausführung nur mit der Befehlszeilenschnittstelle anzeigen. Sie können diesen Buildlauf nicht in der Konsole anzeigen.

Abhängigkeiten für Ihre Funktion einschließen

Sie können Funktionen in vielen verschiedenen Programmiersprachen erstellen. Wenn Ihr Funktionscode komplex wird, können Sie Codemodule als Abhängigkeiten für Ihre Funktion hinzufügen. Jede Sprache verfügt über eigene Module zur Verwendung mit Ihrem Funktionscode. Node.js-Abhängigkeiten sind beispielsweise normalerweise vorhandene npm-Module, während Python Python-Pakete verwendet. Diese Abhängigkeiten müssen deklariert und in einer Datei mit Ihrem Quellcode erstellt werden.

Module für eine Node.js-Funktion einschließen

Erstellen Sie eine Funktion, die eine Abhängigkeit für ein bestimmtes Node.js-Modul enthält, indem Sie eine package.json-Datei erstellen. In diesem Fall befinden sich Quellcode und Paketdatei in demselben Ordner.

  1. Erstellen Sie Ihren Quellcode, indem Sie Ihren Code in eine main.js-Datei schreiben. Kopieren Sie beispielsweise das folgende Codebeispiel in eine Datei mit dem Namen 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. Erstellen Sie eine Datei package.json, die die erforderlichen Abhängigkeiten für Ihre Funktion enthält. Verwenden Sie für das vorherige Codebeispiel den folgenden Inhalt für Ihre Datei package.json.

    {
      "name": "function",
      "version": "1.0.0",
      "main": "main.js",
      "dependencies" : {
    		    "lorem-ipsum" : "2.0.8"
     	}
    }
    
  3. Erstellen Sie Ihre Dateien als Funktion in Code Engine. Beide vorherigen Dateien müssen im Repository zugänglich sein. Wenn sie sich in einem privaten Repository befinden, erstellen Sie Zugriff auf privates Code-Repository und geben Sie dann diesen Wert mit der Option --build-git-repo-secret an. Wenn sich Ihre Dateien in einem anderen Verzeichnis als dem Hauptverzeichnis befinden, geben Sie den Pfad zu dem Verzeichnis mit der Option --build-context-dir an. Im folgenden Beispiel werden die Dateien aus dem öffentlichen Repository von https://github.com/IBM/CodeEngine extrahiert.

    ibmcloud ce fn create -n nodelorem -runtime nodejs-20 --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs/
    
  4. Führen Sie den bereitgestellten fn get-Befehl aus, um Details zu Ihrer Funktion zu suchen.

  5. Rufen Sie Ihre Funktion auf, indem Sie URL in einen Webbrowser eingeben. Ihr Browser zeigt eine Passage von lorem ipsum an.

Weitere Informationen zum Befehl fn create und seinen Optionen finden Sie unter Funktion erstellen.

Module für eine Python-Funktion einschließen

Erstellen Sie eine Funktion, die eine Abhängigkeit für ein bestimmtes Python-Modul enthält, indem Sie eine requirements.txt-Datei erstellen. In diesem Fall befinden sich der Quellcode und die Anforderungsdatei in demselben Ordner.

  1. Erstellen Sie Ihre Funktion, indem Sie Ihren Code in einer __main__.py-Datei speichern.

    # 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. requirements.txt mit den erforderlichen Abhängigkeiten für Ihre Funktion erstellen

    lorem-text
    
  3. Erstellen Sie Ihre Dateien als Funktion in Code Engine. Beide vorherigen Dateien müssen im Repository zugänglich sein. Wenn sie sich in einem privaten Repository befinden, erstellen Sie Zugriff auf privates Code-Repository und geben Sie dann diesen Wert mit der Option --build-git-repo-secret an. Wenn sich Ihre Dateien in einem anderen Verzeichnis als dem Hauptverzeichnis befinden, geben Sie den Pfad zu dem Verzeichnis mit der Option --build-context-dir an. Im folgenden Beispiel werden die Dateien aus dem öffentlichen Repository von https://github.com/IBM/CodeEngine extrahiert.

    ibmcloud ce fn create -n pylorem -runtime python-3.11 --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-python/
    
  4. Führen Sie den bereitgestellten fn get-Befehl aus, um Details zu Ihrer Funktion zu suchen.

  5. Rufen Sie Ihre Funktion auf, indem Sie URL in einen Webbrowser eingeben. Ihr Browser zeigt eine Passage von lorem ipsum an.

Weitere Informationen zum Befehl fn create und seinen Optionen finden Sie unter Funktion erstellen.

Nächste Schritte

  • Nachdem Ihre Funktion erstellt wurde, können Sie auf Ihre Funktion zugreifen, indem Sie in der Konsole auf "Funktion testen" klicken oder die URL für Ihre Funktion mit dem function get befehl.

  • Sie können eine angepasste Domänenzuordnung erstellen und sie Ihrer Funktion zuordnen.

  • Nach der Erstellung und Implementierung Ihrer Funktion können Sie die Funktion über die Konsole oder mit dem Befehl ibmcloud ce function update aktualisieren, um sie an Ihre Anforderungen anzupassen. Wenn Sie Ihre Quelle für die Verwendung mit Ihrer Funktion aktualisieren möchten, müssen Sie die Option --build-source im function update befehl angeben.

Nachdem Ihre Funktion erstellt wurde, können Sie Ihre Funktion und den zugehörigen Code auf eine der folgenden Arten aktualisieren, unabhängig davon, wie Sie Ihre Funktion erstellt oder zuvor aktualisiert haben:

  • Wenn Sie über ein vorhandenes Code-Bundle verfügen, müssen Sie nur einen Verweis auf das Image angeben, der auf die Position Ihrer Container-Registry verweist, wenn Sie Ihre App implementieren. Weitere Informationen finden Sie unter Funktionsworkloads aus vorhandenen Code-Bundles erstellen.

    Wenn Sie Ihre Funktion mit dem Befehl function create erstellt und die Option --build-source angegeben haben, um das Codepaket aus einer lokalen Quelle oder einer Repository-Quelle zu erstellen, und Sie Ihre Funktion so ändern möchten, dass sie auf ein anderes Codepaket verweist, müssen Sie zuerst die Zuordnung des Builds aus Ihrer Funktion entfernen. Führen Sie beispielsweise ibmcloud ce function update -n FUN_NAME --build-clear aus. Nachdem Sie die Zuordnung des Builds zu Ihrer Funktion entfernt haben, können Sie die Funktion aktualisieren, um auf ein anderes Image zu verweisen.

  • Wenn Sie mit Quellcode beginnen, der sich in einem Git-Repository befindet, können Sie Code Engine das Codepaket aus Ihrer Quelle erstellen lassen und Ihre Funktion mit einem einzigen Vorgang erstellen. In diesem Szenario lädt Code Engine Ihr Code-Paket auf IBM Cloud® Container Registry hoch. Weitere Informationen finden Sie unter Funktion aus Repository-Quellcode erstellen.

  • Wenn Sie mit Quellcode beginnen, der sich auf einer lokalen Workstation befindet, können Sie für Code Engine auswählen, das Code-Bundle aus Ihrer Quelle zu erstellen und Ihre Funktion mit einem einzelnen CLI-Befehl zu erstellen. In diesem Szenario lädt Code Engine Ihren Quellcode und Ihr Codepaket in IBM Cloud® Container Registryhoch.

    Sie könnten beispielsweise Code Engine als lokale Quelle wählen, während Sie die Entwicklung Ihrer Quelle für die Funktion weiterentwickeln. Nachdem das Codepaket ausgereift ist, können Sie Ihre Funktion so aktualisieren, dass sie auf das gewünschte Codepaket verweist. Sie können diesen Prozess nach Bedarf wiederholen.

Benötigen Sie weitere Codebeispiele? Sehen Sie sich die Beispiele für IBM Cloud Code Engine GitHub repoan.