Funktionsworkloads aus lokalem Quellcode erstellen
Mit der CLI „ IBM Cloud® Code Engine “ können Sie Ihre „ Code Engine “-Funktion direkt aus dem Quellcode auf Ihrem lokalen Rechner 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 bezieht, wird Ihr Quellcode in eine Archivdatei gepackt. „ Code Engine “ lädt das Code-Bundle automatisch in einen „ IBM Cloud® Container Registry “-Namespace in Ihrem Konto
hoch und erstellt und stellt anschließend Ihre Funktion bereit, sodass diese auf dieses erstellte Code-Bundle verweist. Beachten Sie, dass Sie IBM Cloud Container Registry nur für Ihre lokalen Builds verwenden können. In diesem Fall müssen Sie
lediglich einen Namen für die Funktion und den Pfad zur lokalen Quelle angeben. Eine vollständige Liste der Optionen finden Sie unter dem 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. Beispielsweise könnten Einträge in einer „ .ceignore “-Datei für eine „ Node.js “-Funktion „ node_modules “ und „ .npm “ enthalten. Weitere Beispiele für zu ignorierende Dateimuster finden Sie im Repository „ GitHub.gitignore “.
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 über die Befehlszeilenschnittstelle (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.jsenthä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 das Code-Bundle automatisch und überträgt es in einen „ Container Registry “-Namespace 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 --build-source main.jsBeispielausgabe
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.cloudBeachten Sie, dass die Ausgabe des Befehls
function createInformationen zum Fortschritt der Buildausführung enthält, bevor die Funktion erstellt wird.In diesem Beispiel wird das erstellte Code-Bundle in den Namespace „
ce--abcde-glxo4kabcde“ unter Container Registry hochgeladen.Die folgende Tabelle fasst die Optionen zusammen, die in diesem Beispiel mit dem
fn createBefehl in diesem Beispiel verwendet werden. Weitere Informationen zu dem Befehl und seinen Optionen finden Sie unter demibmcloud ce function createBefehl. 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 --nameDer 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-sourceDer Pfad zur lokalen Quelle. Dieser Wert ist erforderlich. --runtimeDie für diese Funktion zu verwendende Laufzeit. Dieser Wert ist erforderlich. -
Mit dem Befehl
function getkönnen Sie Informationen zu Ihrer App anzeigen, einschließlich Informationen zum Build.ibmcloud ce function get --name myfun-localBeispielausgabe
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-22 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-22 (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 --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 ipsuman.
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.txtmit 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 --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 ipsuman.
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 Ihren Quellcode 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? Schau dir die Beispiele im Repository „ IBM Cloud Code Engine “ unter GitHub an.