Funktionsworkloads aus vorhandenen Code-Bundles erstellen

Erstellen Sie Ihre „ Code Engine “-Funktion mit einem Code-Bundle unter IBM Cloud® Container Registry. Sie können eine Funktion über die Konsole oder über die CLI erstellen.

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

Sie können Code-Bundles nur von der Website Container Registry abrufen.

Vorbereitende Schritte

Möchten Sie Ihr Projekt so konfigurieren, dass alle Nutzer des Projekts Bilder in „ Container Registry “ speichern und darauf zugreifen können, ohne manuell Registrierungsgeheimnisse anlegen zu müssen? Mit ausreichenden Berechtigungen können Sie diesen Standardzugriff auf die Registry pro Standort (Region) konfigurieren. Wenn Sie nicht über ausreichende Berechtigungen zum Ausführen dieser Aktionen verfügen, können Sie diese Seite verwenden, um die erforderlichen Berechtigungen zu verstehen. Siehe Projektweite Einstellungen konfigurieren.

Funktion erstellen, die auf ein Code-Bundle in Container Registry mit der Konsole verweist

Erstellen Sie mithilfe der „ Code Engine “-Konsole eine Funktion, die ein vorhandenes Code-Bundle verwendet.

Code Engine kann Code-Bundles automatisch aus Container Registryextrahieren.

  1. Öffnen Sie die Code Engine-Konsole.
  2. Wählen Sie „ Erstellen “ aus.
  3. 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.
  4. Wählen Sie „ Funktion “ aus.
  5. Geben Sie einen Namen für die Funktion ein, zum Beispiel „ myfunction “. Wählen Sie für Ihre Funktion einen Namen, der innerhalb des Projekts eindeutig ist.
  6. Wählen Sie ein Laufzeitimage für Ihren Funktionscode. Weitere Informationen finden Sie unter Laufzeiten.
  7. Wählen Sie Vorhandenes Code-Bundle verwenden aus.
  8. Geben Sie die Position Ihres Code-Bundles im Format registry/namespace/repository:tag an.
  9. Wenn sich Ihr Code-Bundle in Ihrem Konto oder in einer öffentlichen Registry befindet, müssen Sie keinen geheimen Registry-Schlüssel angeben. Wenn sich das Codepaket in einer privaten Registry befindet, müssen Sie den geheimen Registry-Schlüssel hinzufügen. Klicken Sie für weitere Hilfe auf Hilfe zur Angabe des Codepakets. Weitere Informationen finden Sie unter Auf Container-Registrys zugreifen.
  10. Geben Sie Ihre Ressourceninformationen an, einschließlich CPU-und Speicherkombinationen und Scale-down-Verzögerung.
  11. Geben Sie optional eine angepasste Domäne oder Umgebungsvariablen an.
  12. Klicken Sie auf Erstellen.
  13. Sobald der Funktionsstatus auf „Bereit“ wechselt, 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.

Funktion mit einem vorhandenen Codepaket über die Befehlszeilenschnittstelle implementieren

Erstellen Sie eine Funktion, die ein unter IBM Cloud® Container Registry gespeichertes Code-Bundle mithilfe der CLI und des ibmcloud ce fn create Befehl. Eine vollständige Liste der Optionen finden Sie unter dem ibmcloud ce fn create Befehl.

Vorbereitende Schritte

Funktion über eine öffentliche Registry über die Befehlszeilenschnittstelle implementieren

Wenn sich Ihr vorhandenes Codepaket in Ihrem Account oder in einer öffentlichen Registry befindet, können Sie den Befehl ibmcloud ce fn create verwenden.

Führen Sie beispielsweise den folgenden Befehl aus, um ein vorhandenes Code-Bundle aus der öffentlichen Registry zu extrahieren und eine Funktion zu erstellen.

ibmcloud ce fn create --name myhellofun --code-bundle icr.io/codeengine/samples/function-nodejs-codebundle --runtime nodejs

Führen Sie den bereitgestellten fn get Befehl aus, um die Datei „ URL “ zu finden. Anschließend können Sie den Befehl „ curl “ verwenden, um diese Datei „ URL “ aufzurufen.

Beispielausgabe aus dem vorhandenen Code-Bundle

<html><body><h3>Hello, Functions on CodeEngine!</h3></body></html>

Funktion aus einer privaten Registry über die Befehlszeilenschnittstelle implementieren

Um über eine private Registry auf ein vorhandenes Code-Bundle zugreifen zu können, müssen Sie den Zugriff auf die Registry einrichten, einen geheimen Registry-Schlüssel erstellen und diesen geheimen Schlüssel angeben, wenn Sie den Befehl ibmcloud ce fn create ausführen.

  1. Um den Zugriff auf Container Registry hinzuzufügen, erstellen Sie einen IAM-API-Schlüssel. Führen Sie zum Erstellen eines IBM Cloud IAM-API-Schlüssels in der Befehlszeilenschnittstelle den Befehl iam api-key-create aus. Um beispielsweise einen API-Schlüssel namens „ cliapikey “ mit der Beschreibung „ My CLI API key “ zu erstellen und ihn in einer Datei namens „ key_file “ zu speichern, führen Sie den folgenden Befehl aus:

    ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
    

    Wenn Sie Ihren Schlüssel nicht in einer Datei speichern möchten, müssen Sie den API-Schlüssel notieren, der angezeigt wird, wenn Sie ihn erstellen. Sie können ihn später nicht mehr abrufen.

  2. Erstellen Sie nach dem Erstellen Ihres API-Schlüssels einen geheimen Registry-Schlüssel für Code Engine. Verwenden Sie zum Erstellen eines geheimen Registry-Schlüssels den Befehl ibmcloud ce secret create --format registry. Der folgende Befehl richtet beispielsweise einen Registrierungszugriff auf eine „ Container Registry “-Instanz mit dem Namen „ myregistry “ ein. Beachten Sie: Obwohl im Beispielbefehl die Optionen --server und --username angegeben sind, ist der Standardwert für die Option --server us.icr.io und die Option --username nimmt den Standardwert iamapikey an, wenn der Server us.icr.io ist.

    ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEY
    

    Beispielausgabe

    Creating registry secret 'myregistry'...
    OK
    
  3. Erstellen Sie Ihre Funktion und referenzieren Sie ein Code-Bundle in einer privaten Registry in Container Registry. Verwenden Sie beispielsweise den ibmcloud ce fn create Befehl, um die Funktion „ myhellofun “ zu erstellen, die mithilfe der Zugriffsinformationen von „ myregistry “ auf „ icr.io/codeengine/samples/function-nodejs-codebundle “ verweist.

    ibmcloud ce fn create --name myhellofun --code-bundle icr.io/NAMESPACE/REGISTRY:TAG --registry-secret myregistry
    

    Das Format des Namens des Codebündels für diese Funktion lautet „ REGISTRY/NAMESPACE/REGISTRY:TAG “, wobei „ REGISTRY “ und „ TAG “ optional sind. Wenn „ REGISTRY “ nicht angegeben wird, lautet die Standardeinstellung „ icr.io “. Wird TAG nicht angegeben, ist latest der Standardwert.

  4. Nachdem Ihre Funktion erstellt hat, können Sie sie aufrufen. Um die „ URL “ Ihrer Funktion zu ermitteln, führen Sie den bereitgestellten Befehl „ ibmcloud ce fn get “ aus. Anschließend können Sie den Befehl „ curl “ verwenden, um diese Datei „ URL “ aufzurufen.

Nächste Schritte

  • Nachdem Sie Ihre Funktion erstellt haben, können Sie darauf 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 Sie Ihre Funktion erstellt haben, können Sie diese sowie den darin referenzierten Code auf eine der folgenden Weisen 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 arbeiten, der sich in einem „ Git “-Repository befindet, können Sie Code Engine nutzen, um das Code-Bundle aus Ihrem Quellcode zu erstellen und Ihre Funktion in einem einzigen Schritt zu generieren. In diesem Szenario lädt Code Engine Ihr Code-Bundle 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 sich beispielsweise dafür entscheiden, „ Code Engine “ zu verwenden, um Ihren lokalen Quellcode zu erstellen, während Sie die Entwicklung Ihres Quellcodes für die Funktion weiter vorantreiben. 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? Schaut euch die Beispiele im Repository „ IBM Cloud Code Engine “ unter GitHub an.