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
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt und arbeiten Sie damit.
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;
-
Wechseln Sie in das Verzeichnis, das die Datei
main.js
enthält, oder notieren Sie den Pfad zu dieser Datei. -
Erstellen Sie eine Funktion mit dem Namen
myfun-local
, die einemain.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 unteribmcloud 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. -
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.
-
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 Namenmain.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;
-
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 Dateipackage.json
.{ "name": "function", "version": "1.0.0", "main": "main.js", "dependencies" : { "lorem-ipsum" : "2.0.8" } }
-
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 .
-
Führen Sie den bereitgestellten
fn get
-Befehl aus, um Details zu Ihrer Funktion zu suchen. -
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.
-
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), }
-
requirements.txt
mit den erforderlichen Abhängigkeiten für Ihre Funktion erstellenlorem-text
-
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 .
-
Führen Sie den bereitgestellten
fn get
-Befehl aus, um Details zu Ihrer Funktion zu suchen. -
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.