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.
- Öffnen Sie die Code Engine-Konsole.
- Wählen Sie Los geht's aus.
- Funktion auswählen.
- 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. - 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.
- Wählen Sie ein Laufzeitimage für Ihren Funktionscode. Weitere Informationen finden Sie unter Laufzeiten.
- 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.
- 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 SieNone
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. - 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.
- 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. - 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. - 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.
- Geben Sie Ihre Ressourceninformationen an, einschließlich CPU-und Speicherkombinationen und Scale-down-Verzögerung.
- Geben Sie optional eine angepasste Domäne oder Umgebungsvariablen an. Sie können diese Optionen später hinzufügen.
- Klicken Sie auf Erstellen.
- 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 ".
- 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
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt und arbeiten Sie damit.
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.
Option | Beschreibung |
---|---|
--name |
Der Name der Funktion. Verwenden Sie einen Namen, der innerhalb des Projekts eindeutig ist. Dieser Wert ist erforderlich.
|
--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.
-
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. 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 vonhttps://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/
-
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. 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 vonhttps://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/
-
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 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
imfunction 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 beispielsweiseibmcloud 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.