IBM Cloud Docs
Funktionsworkloads aus lokalem Quellcode erstellen

Funktionsworkloads aus lokalem Quellcode erstellen

Sie können Ihre Code Engine-Funktion direkt aus dem Quellcode auf Ihrer lokalen Workstation mit der IBM Cloud® Code Engine-CLI erstellen. Verwenden Sie den Befehl function create (oder fn create), um ein Code-Bundle aus Ihrer lokalen Quelle zu erstellen, und implementieren Sie Ihre Funktion, um auf dieses erstellte Code-Bundle zu verweisen.

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

Wenn Sie einen Build einreichen, der Code aus einem lokalen Verzeichnis abruft, wird Ihr Quellcode in eine Archivdatei gepackt. Code Engine lädt das Codepaket automatisch in einen IBM Cloud® Container Registry-Namensraum in Ihrem Konto hoch und erstellt und implementiert dann Ihre Funktion, um auf dieses erstellte Codepaket zu verweisen. Beachten Sie, dass Sie IBM Cloud Container Registry nur für Ihre lokalen Builds verwenden können. Für dieses Szenario müssen Sie nur einen Namen für die Funktion und den Pfad zur lokalen Quelle angeben. Eine vollständige Liste der Optionen finden Sie im ibmcloud ce fn create befehl.

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

Sie können bestimmte Dateimuster aus Ihrem Quellcode ignorieren, indem Sie die Datei .ceignore verwenden, die sich ähnlich wie eine .gitignore-Datei verhält. Zum Beispiel könnten Einträge für eine .ceignore-Datei für eine Node.js-Funktion node_modules und .npm enthalten. Weitere Beispiele für zu ignorierende Dateimuster finden Sie im GitHub.gitignore-Repository.

IBM Cloud® Container Registry ist für dieses Szenario erforderlich.

Vorbereitende Schritte

Bevor Sie mit der lokalen Quelle arbeiten, stellen Sie sicher, dass sich Ihre Quelle an einer zugänglichen Position auf Ihrer lokalen Workstation befindet.

Erstellen einer Funktion aus lokalem Quellcode mit der CLI

In diesem Beispiel wird der folgende als main.js-Datei gespeicherte Node.js-Code verwendet. Sie können Ihren eigenen Code ersetzen.

/**
 * 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.
*/
async function main(params) {
  // log environment variables available to the function
  console.log(process.env);
  // log Code Engine system headers available to the function
  console.log(params.__ce_headers);
  // log all parameters for debugging purposes
  console.log("params: "+params);
  // since functions are invoked through http(s), we return an HTTP response
  return {
      statusCode: 200,
      headers: { 'Content-Type': 'application/json' },
      body: params };
}

// 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;
  1. Wechseln Sie in das Verzeichnis, das die Datei main.js enthält, oder notieren Sie den Pfad zu dieser Datei.

  2. Erstellen Sie eine Funktion mit dem Namen myfun-local, die eine main.js-Datei als Quelle verwendet. Dieser Befehl erstellt und überträgt das Code-Bundle automatisch in einen Container Registry-Namensraum in Ihrem Konto. Wenn Sie nicht über einen Container Registry-Namensbereich verfügen, erstellt Code Engine diesen automatisch für Sie.

    ibmcloud ce fn create --name myfun-local --runtime nodejs-20 --build-source main.js
    

    Beispielausgabe

    Preparing function 'myfun-local' for build push...
    Creating function 'myfun-local'...
    Packaging files to upload from source path 'main.js'...
    Submitting build run 'myfun-local-run-230123-111011111'...
    Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun-local:230123-1650-yrj86'...
    Waiting for build run to complete...
    Build run status: 'Running'
    Build run completed successfully.
    Run 'ibmcloud ce buildrun get -n myfun-local-run-230626-115011911' to check the build run status.
    Waiting for function 'myfun-local' to become ready...
    Function 'myfun-local' is ready.
    OK
    Run 'ibmcloud ce function get -n myfun-local' to see more details.
    
    https://myfun-local.glxo4kabcde.us-south.codeengine.test.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-Bundle in den ce--abcde-glxo4kabcde-Namensraum in Container Registry hochgeladen.

    Die folgende Tabelle fasst die Optionen zusammen, die mit dem fn create befehl in diesem Beispiel verwendet werden. Weitere Informationen über den Befehl und seine Optionen finden Sie unter ibmcloud ce function create befehl. Da diese Optionen je nach Speicherort des Quellcodes variieren, sollten Sie sicherstellen, dass Ihr Quellcode an dem Ort gespeichert ist, der dem Beispiel entspricht.

    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 Der Pfad zur lokalen Quelle. Dieser Wert ist erforderlich.
    --runtime Die für diese Funktion zu verwendende Laufzeit. Dieser Wert ist erforderlich.
  3. Mit dem Befehl function get können Sie Informationen zu Ihrer App anzeigen, einschließlich Informationen zum Build.

    ibmcloud ce function get --name myfun-local
    

    Beispielausgabe

    Getting function 'myfun-local'...
    OK
    
    Name:          myfun-local
    Project Name:  sample
    Project ID:    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Age:           5m41s
    Created:       2023-06-26T16:50:14Z
    URL:           https://myfun-local.glxo4kabcde.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-local-run-230123-111011111
      Build Type:         local
      Build Strategy:     codebundle-nodejs-20
      Timeout:            600
      Source:             main.js
    
      Build Run Summary:  Succeeded
      Build Run Status:   Succeeded
      Build Run Reason:   All Steps have completed executing
      Run 'ibmcloud ce buildrun get -n myfun-local-run-230123-111011111' 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-local:230123-1650-yrj86
      Main:           main()
    

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. In diesem Fall befinden Sie sich in dem Verzeichnis, in dem sich die lokalen Dateien befinden, sodass Sie . als Buildquelle verwenden können.

    ibmcloud ce fn create --name nodelorem --runtime nodejs-20 --build-source .
    
  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. In diesem Fall befinden Sie sich in dem Verzeichnis, in dem sich die lokalen Dateien befinden, sodass Sie . als Buildquelle verwenden können.

    ibmcloud ce fn create --name pylorem --runtime python-3.11 --build-source .
    
  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 aus lokalem Quellcode erstellt und implementiert 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 aus lokaler Quelle oder aus Repository-Quellcode über die Befehlszeilenschnittstelle implementiert 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 Build-Lauf nicht in der Konsole anzeigen.

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