Function Development Kits (FDKs)

Erfahren Sie mehr über die Function Development Kits (FDKs), die von OCI Functions zur Unterstützung verschiedener Sprachen verwendet werden.

OCI Functions verwendet Fn Project Function Development Kits (FDKs), um gängige Sprachen zu unterstützen - Java, Node.js, Python, Go, Ruby und C#. Ein FDK ist eine Gruppe von Helper-Bibliotheken, die systeminterne Bibliotheken verarbeiten (wie Protokolle, Parsing von Eingabe und Ausgabe sowie Logik für Funktionscontainer). Jede Sprache FDK besteht aus drei Komponenten:

  • Ein Build-Time-Basisimage, das sprachspezifische Librarys und Tools zum Erstellen ausführbarer Funktionen enthält.
  • Ein Laufzeitbasisimage zur Bereitstellung einer sprachspezifischen Laufzeitumgebung, in der ausführbare Funktionen ausgeführt werden können.
  • Eine FDK-Library (bei Java ist die FDK-Library in den Build-Time- und Runtime-Basisimages enthalten).

FDKs sind spezifisch für bestimmte Versionen einer bestimmten Sprache. Oracle veröffentlicht regelmäßig neue FDK-Build-Time- und Runtime-Basisimages für unterstützte Sprachen (z.B. zur Ausgabe eines Patches oder zur Unterstützung einer neu veröffentlichten Version der Sprache). Bei Java enthält ein FDK-Update immer alle drei Komponenten (die Builld-Time- und Runtime-Basisimages sowie die FDK-Library). Bei anderen Sprachen kann ein FDK-Update eine oder mehrere Komponenten enthalten.

Wenn Sie zum ersten Mal eine Funktion mit dem Fn-Projekt-CLI-Befehl fn init erstellen, geben Sie mit der Befehlsoption --runtime die Sprache an, in der der Quellcode der Funktion geschrieben wird. Neben der Angabe einer Sprache können Sie optional auch eine Version der Sprache angeben. Wenn Sie die Sprachversion nicht angeben, geht die Fn-Projekt-CLI davon aus, dass Sie die neueste Version des verfügbaren Sprach-FDK verwenden möchten. Die Fn-Projekt-CLI zeichnet den Wert der Befehlsoption --runtime als Wert des Parameters runtime: in der Funktion func.yaml auf. Die Fn-Projekt-CLI fügt außerdem Werte für die Parameter build_image: und run_image: in der Datei func.yaml entsprechend der angegebenen Befehlsoption --runtime wie folgt hinzu:

  • Wenn Sie nur eine Sprache als Wert der Befehlsoption --runtime angeben, fügt die Fn-Projekt-CLI die neuesten Versionen der FDK-Build-Time- und Runtime-Basisimages dieser Sprache als Werte für die Parameter build_image: und run_image: hinzu. Beispiel: Wenn Sie fn init --runtime python helloworld-func eingeben und Python 3.11 die neueste verfügbare Version ist, fügt die Fn-Projekt-CLI Folgendes hinzu:
    runtime: python
    build_image: fnproject/python:3.11-dev
    run_image: fnproject/python:3.11
  • Wenn Sie sowohl eine Sprache als auch eine Version als Wert der Befehlsoption --runtime angeben, fügt die Fn-Projekt-CLI die entsprechende Version der FDK-Build-Time- und Runtime-Basisimages der Sprache als Werte für die Parameter build_image: und run_image: hinzu. Beispiel: Wenn Sie fn init --runtime python3.9 helloworld-func eingeben, fügt die Fn-Projekt-CLI Folgendes hinzu:
    runtime: python3.9
    build_image: fnproject/python:3.9-dev
    run_image: fnproject/python:3.9

Wenn Sie eine Funktion mit fn build oder fn deploy erstellen, erstellt die Fn-Projekt-CLI ein Docker-Image (und überträgt das Image im Fall von fn deploy in eine Docker-Registry). Das Docker-Image enthält die Laufzeitabhängigkeiten der Funktion. Wenn die Funktion in einer Sprache geschrieben ist, für die ein FDK verfügbar ist, führt die Fn-Projekt-CLI folgende Schritte aus:

  • Verwendet das mit dem Parameter build_image: angegebene Build-Zeit-Basisimage, um eine ausführbare Version der Funktion zu erstellen, und enthält die ausführbare Funktion im Docker-Image.
  • Enthält das Laufzeitbasisimage, das mit dem Parameter run_image: im Docker-Image angegeben wird, um die Laufzeitumgebung zur Ausführung der ausführbaren Funktion bereitzustellen.

Die Fn-Projekt-CLI verwendet gecachte Versionen der Build-Time- und Runtime-Basisimages des FDK, sofern diese verfügbar sind. Wenn keine gecachten Versionen der Basisimages verfügbar sind, ruft die Fn-Projekt-CLI die Build-Time- und Laufzeit-Basisimages des Sprach-FDK aus Docker Hub ab.

Wenn eine neue Version eines Sprach-FDK freigegeben wird, werden die Werte für die Parameter build_image: und run_image: in der Datei func.yaml einer vorhandenen Funktion nicht automatisch aktualisiert. Die anfänglichen Versionen der Build-Time- und Runtime-Basisimages des Sprach-FDK, die zuvor als Werte für die Parameter build_image: und run_image: angegeben wurden, als die Funktion erstellt wurde, werden weiterhin zum Erstellen der ausführbaren Funktionsdatei und zur Bereitstellung der Laufzeitumgebung verwendet. Mit den Anfangswerten der Parameter build_image: und run_image: kann sichergestellt werden, dass der Funktionscode mit den Build-Time- und Runtime-Basisimages des Sprach-FDK kompatibel bleibt.

Wenn Sie eine vorhandene Funktion mit einer anderen Sprachversion neu erstellen und eine andere Laufzeit in das Docker-Image der Funktion aufnehmen möchten, ändern Sie die Werte der Parameter build_image: und run_image: in der Datei func.yaml der Funktion, um eine andere Version des Sprach-FDK zu referenzieren. Um Konsistenz zu gewährleisten und Verwechslungen zu vermeiden, aktualisieren Sie den Wert des Parameters runtime: so, dass er der Befehlsoption --runtime für die Version des Sprach-FDK entspricht. Bei Java-Funktionen müssen Sie auch die FDK-Version in der Datei pom.xml der Funktion ändern.

Beispiele

Bei den Beispielen in diesem Abschnitt wird davon ausgegangen, dass Sie die Fn-Projekt-CLI-Version 0.6.7 (oder höher) verwenden und dass Python 3.11 die neueste Version von Python ist, die vom Python-FDK unterstützt wird.

Beispiel 1: Neue Funktion mit Python 3.11 erstellen

Wenn Sie eine neue Funktion mit Python 3.11 erstellen möchten, führen Sie einen der folgenden Befehle aus:

fn init --runtime python helloworld-func
fn init --runtime python3.11 helloworld-func

Im Fall von fn init --runtime python helloworld-func zeichnet die Fn-Projekt-CLI den Wert der Befehlsoption --runtime als Wert des Parameters runtime: in der func.yaml der Funktion auf und fügt die neuesten Versionsnummern der Build-Time- und Laufzeit-Basisimages des Python FDK als Werte für die Parameter build_image: und run_image: hinzu:

runtime: python
build_image: fnproject/python:3.11-dev
run_image: fnproject/python:3.11

Im Fall von fn init --runtime python3.11 helloworld-func zeichnet die Fn-Projekt-CLI den Wert der Befehlsoption --runtime als Wert des Parameters runtime: in der func.yaml der Funktion auf und fügt die Build-Time- und Laufzeit-Basisimages des Python 3.11-FDK als Werte für die Parameter build_image: und run_image: hinzu:

runtime: python3.11
build_image: fnproject/python:3.11-dev
run_image: fnproject/python:3.11

Wenn Sie die Funktion erstellen, verwendet die Fn-Projekt-CLI ab sofort diese anfänglichen Versionen der Build-Zeit- und Laufzeitbasisimages weiterhin, um die ausführbare Funktion zu erstellen und die Laufzeitumgebung bereitzustellen.

Beispiel 2: Neue Funktion mit Python 3.9 erstellen

Wenn Sie eine neue Funktion mit Python 3.9 erstellen möchten, führen Sie den folgenden Befehl aus:

fn init --runtime python3.9 helloworld-func

Die Fn-Projekt-CLI zeichnet den Wert der Befehlsoption --runtime als Wert des Parameters runtime: in der func.yaml der Funktion auf und fügt die Version der Build-Time- und Laufzeitbasisimages des Python-FDK hinzu, die für Python 3.9 als Werte für die Parameter build_image: und run_image: geeignet sind, wie dargestellt:

runtime: python3.9
build_image: fnproject/python:3.9-dev
run_image: fnproject/python:3.9

Wenn Sie die Funktion erstellen, verwendet die Fn-Projekt-CLI ab sofort weiterhin diese anfänglichen Python 3.9-Versionen der Build-Time- und Laufzeitbasisimages, um die ausführbare Funktionsdatei zu erstellen und die Laufzeitumgebung bereitzustellen.

Beispiel 3: Vorhandene Funktion mit Python 3.8 neu erstellen

Wenn Sie eine vorhandene Funktion neu erstellen möchten, die ursprünglich mit Python 3.8 erstellt wurde, und Sie sie mit Python 3.8 weiter erstellen möchten, führen Sie den folgenden Befehl aus:

fn build helloworld-func

Die Parameter build_image: und run_image: in der Datei func.yaml wurden ursprünglich auf Versionen der Build-Time- und Runtime-Basisimages des Python FDK festgelegt, die für Python 3.8 geeignet sind. Wenn Sie die Funktion erstellen, verwendet die Fn-Projekt-CLI weiterhin dieselben Python 3.8-Build-Time- und Laufzeit-Basisimages, um die ausführbare Funktionsdatei zu erstellen und die Laufzeitumgebung bereitzustellen.

Beispiel 4: Vorhandene Python 3.8-Funktion mit Python 3.11 neu erstellen

Wenn Sie eine vorhandene Funktion neu erstellen möchten, die ursprünglich mit Python 3.8 erstellt wurde, und Sie sie jetzt mit Python 3.11 erstellen möchten:
  • Ändern Sie die Werte der Parameter build_image: und run_image: in der func.yaml der Funktion, um die neueste FDK-Version für Python 3.11 zu referenzieren (siehe So ermitteln Sie die neuesten FDK-Build-Time- und Runtime Base Image-Versionen für eine bestimmte unterstützte Sprachversion):
    runtime: python3.8
    build_image: fnproject/python:3.11-dev
    run_image: fnproject/python:3.11

  • Um Konsistenz zu gewährleisten und Verwirrung zu vermeiden, aktualisieren Sie den Wert des Parameters runtime: so, dass er der Befehlsoption --runtime für Python 3.11 entspricht.
    runtime: python3.11
    build_image: fnproject/python:3.11-dev
    run_image: fnproject/python:3.11
  • Führen Sie den folgenden Befehl aus:
    fn build helloworld-func

Die Fn-Projekt-CLI verwendet die Versionen der Build-Time- und Laufzeit-Basisimages des Python-FDK, die mit den Parametern build_image: und run_image: in der Datei func.yaml angegeben werden, um die ausführbare Funktionsdatei zu erstellen und die Laufzeitumgebung bereitzustellen. Wenn Sie die Funktion erstellen, verwendet die Fn-Projekt-CLI ab sofort diese Versionen der Build-Zeit- und Laufzeitbasisimages.

Verhalten in früheren Versionen der Fn-Projekt-CLI (vor Version 0.6.7)

Wenn Sie Versionen der Fn-Projekt-CLI vor Version 0.6.7 verwenden, verwendete die Fn-Projekt-CLI jedes Mal, wenn Sie eine Funktion in einer Sprache erstellt oder neu erstellt haben, die von einem FDK unterstützt wird (mit Ausnahme von Java, siehe unten), gecachte Versionen der Build-Time- und Runtime-Basisimages der Sprache FDK, sofern diese verfügbar waren. Wenn keine gecachten Versionen der Basisimages verfügbar waren, hat die Fn-Projekt-CLI die neuesten Versionen der Basisimages aus Docker Hub abgerufen. Daher konnten Sie nicht sicher sein, ob der Funktionscode mit dem Build-Time-Basisimage der Sprache FDK kompatibel war, mit dem die ausführbare Funktion erstellt wurde, oder mit dem Runtime-Basisimage, mit dem die Laufzeitumgebung bereitgestellt wird.

Sie können weiterhin vorhandene Funktionen wie zuvor erstellen, indem Sie beim Erstellen einer Funktion nicht explizit die Version des Sprach-FDK angeben. Die Fn-Projekt-CLI verwendet weiterhin gecachte Versionen der Build-Time- und Laufzeit-Basisimages des FDK (sofern verfügbar) oder ruft die neuesten Versionen der Basisimages aus Docker Hub ab (sofern keine gecachten Images verfügbar sind).

Ab der Fn-Projekt-CLI-Version 0.6.7:

  • Wenn Sie beim Erstellen einer Funktion explizit die Version des Sprach-FDK angeben, fügt die Fn-Projekt-CLI diese Version als Wert der Parameter build_image: und run_image: in der Datei func.yaml der Funktion hinzu.
  • Wenn Sie eine Funktion erstellen oder bereitstellen und die Datei func.yaml der Funktion noch nicht die Parameter build_image: und run_image: enthält, weil sie mit einer früheren Fn-Projekt-CLI-Version erstellt wurde, fügt die Fn-Projekt-CLI die Parameter zur Datei func.yaml hinzu. Die Werte der Parameter build_image: und run_image: zeichnen die Versionen der FDK-Build-Time- und Runtime-Basisimages auf, die aktuell von der Fn-Projekt-CLI verwendet werden.

Wenn Sie bei der späteren Neuerstellung der Funktion nicht explizit eine andere Version angeben, verwendet die Fn-Projekt-CLI weiterhin die FDK-Version, die mit den Parametern build_image: und run_image: angegeben wird.

Beachten Sie, dass bei Java-Funktionen vorherige Versionen der Fn-Projekt-CLI die Parameter runtime:, build_image: und run_image: zu func.yaml-Dateien hinzugefügt haben, um sicherzustellen, dass der Funktionscode mit den Build-Time- und Runtime-Basisimages des Java FDK kompatibel bleibt.

Wenn Sie eine vorhandene Funktion mit einer anderen Sprachversion neu erstellen und eine andere Laufzeit in das Docker-Image der Funktion aufnehmen möchten, ändern Sie die Werte der Parameter build_image: und run_image: in der Datei func.yaml der Funktion, um eine andere Version des Sprach-FDK zu referenzieren. Um Konsistenz zu gewährleisten und Verwechslungen zu vermeiden, aktualisieren Sie den Wert des Parameters runtime: so, dass er der Befehlsoption --runtime für die Version des Sprach-FDK entspricht. Bei Java-Funktionen müssen Sie auch die FDK-Version in der Datei pom.xml der Funktion ändern.

So finden Sie die von FDKs unterstützten Sprachversionen

So ermitteln Sie die von FDKs unterstützten Versionen von Sprachen (Java, Node.js, Python, Go, Ruby und C#):

  1. Wenn noch kein Upgrade durchgeführt wurde, führen Sie ein Upgrade der Fn-Projekt-CLI auf die neueste Version durch. Siehe Fn-Projekt-CLI upgraden.
  2. Geben Sie in einem Terminalfenster Folgendes ein:
    fn init --help | grep runtime

    Beispiel:

    fn init --help | grep runtime
    
    --runtime value Choose an existing runtime - dotnet, dotnet3.1, dotnet6.0, dotnet8.0, go, go1.18, go1.19, java, java11, java17, java8, kotlin, node, node14, node16, node18, python, python3.11, python3.8, python3.9, ruby, ruby2.7, ruby3.1

    Im obigen Beispiel sehen Sie, dass verschiedene FDKs Folgendes unterstützen:

    • drei Versionen von dotnet (für C#), Java, Python und Node.js
    • Zwei Versionen von Go und Ruby
    • Eine Version von Kotlin

    Weitere Details zu den unterstützten Versionen finden Sie unter Von OCI Functions unterstützte Sprachen.

So ermitteln Sie die Version der FDK-Build-Time- und Runtime-Basisimages, die für eine vorhandene Funktion verwendet werden

So ermitteln Sie die Version der FDK-Build-Time- und Runtime-Basisimages, mit denen die Fn-Projekt-CLI derzeit die ausführbare Funktionsdatei erstellt und die Laufzeitumgebung bereitstellt:

  1. Wenn noch kein Upgrade durchgeführt wurde, führen Sie ein Upgrade der Fn-Projekt-CLI auf die neueste Version durch. Siehe Fn-Projekt-CLI upgraden.
  2. Ändern Sie in einem Terminalfenster in das Verzeichnis, das den Funktionscode enthält.
  3. Verwenden Sie die Befehle fn build oder fn deploy, um die Funktion zu erstellen oder bereitzustellen.

    Die Parameter build_image: und run_image: werden der Datei func.yaml der Funktion hinzugefügt, sofern sie noch nicht vorhanden sind. Die Parameterwerte zeigen die Version der FDK-Build-Time- und Runtime-Basisimages an, mit denen die Fn-Projekt-CLI derzeit die ausführbare Funktionsdatei erstellt und die Laufzeitumgebung bereitstellt.

So ermitteln Sie die Standardversionen von FDK-Build-Time- und Runtime-Basisimages für eine bestimmte Sprache

So ermitteln Sie die Standardversionen von FDK-Build-Time- und Runtime-Basisimages, mit denen die Fn-Projekt-CLI derzeit ausführbare Funktionsdateien erstellt und die Laufzeitumgebung für Funktionen bereitstellt, die in einer bestimmten Sprache geschrieben sind:

  1. Wenn noch kein Upgrade durchgeführt wurde, führen Sie ein Upgrade der Fn-Projekt-CLI auf die neueste Version durch. Siehe Fn-Projekt-CLI upgraden.
  2. Erstellen Sie in einem Terminalfenster eine neue Helloworld-Funktion, indem Sie Folgendes eingeben:
    fn init --runtime <language> hello-func

    wobei <language> die Sprache ist, für die Sie sich interessieren (eine der folgenden Sprachen: java, python, node, ruby, go, kotlin oder dotnet (für C#).

    Beispiel:

    fn init --runtime java hello-func
  3. Wechseln Sie in das Verzeichnis /hello-func, das für die neue Funktion erstellt wurde, und öffnen Sie die Datei func.yaml in einem Texteditor.

    Die Standardversionen von FDK-Build-Time und Runtime Base Image für die angegebene Sprache werden als Werte der Parameter build_image: und run_image: angezeigt.

So ermitteln Sie die neuesten FDK-Build-Time- und Runtime-Basisimageversionen für eine bestimmte unterstützte Sprachversion

Um die neuesten FDK-Build-Time- und Runtime-Basisimageversionen zu ermitteln, mit denen die Fn-Projekt-CLI derzeit ausführbare Dateien erstellt und die Laufzeitumgebung für Funktionen in einer bestimmten Version einer bestimmten Sprache bereitstellt.

  1. Wenn noch kein Upgrade durchgeführt wurde, führen Sie ein Upgrade der Fn-Projekt-CLI auf die neueste Version durch. Siehe Fn-Projekt-CLI upgraden.
  2. Um die unterstützten verfügbaren Sprachversionen anzuzeigen, führen Sie Folgendes aus:

    fn init --help | grep runtime

    Beispiel:

    fn init --help | grep runtime
    
    --runtime value Choose an existing runtime - dotnet, dotnet3.1, dotnet6.0, dotnet8.0, go, go1.18, go1.19, java, java11, java17, java8, kotlin, node, node14, node16, node18, python, python3.11, python3.8, python3.9, ruby, ruby2.7, ruby3.1

    Beachten Sie die gültigen Werte der Befehlsoption --runtime für die gewünschte Sprache, einschließlich der Anzahl der unterstützten Versionen. Beispiel:

    • java17, java11, java8
    • python3.11, python3.9, python3.8
    • node18, node16, node14
    • ruby2.7, ruby3.1
    • go1.19, go1.18
    • dotnet3.1, dotnet6.0, dotnet8.0 (für C#)
  3. Erstellen Sie in einem Terminalfenster eine neue Helloworld-Funktion, indem Sie Folgendes eingeben:
    fn init --runtime <language-version> hello-func

    wobei <language-version> die Sprache und Version ist, an der Sie interessiert sind.

    Beispiel:

    fn init --runtime java17 hello-func
  4. Wechseln Sie in das Verzeichnis /hello-func, das für die neue Funktion erstellt wurde, und öffnen Sie die Datei func.yaml in einem Texteditor.

    Die neuesten unterstützten FDK-Build-Time- und Runtime Base Image-Versionen für die angegebene Sprachversion werden als Werte der Parameter build_image: und run_image: angezeigt.

So aktualisieren Sie eine vorhandene Funktion, um die neueste FDK-Build-Time- und Runtime-Basisimageversion für eine unterstützte Sprache zu verwenden

Um eine vorhandene Funktion so zu aktualisieren, dass die Fn-Projekt-CLI die neuesten FDK-Build-Time- und Runtime Base Image-Versionen für eine unterstützte Sprache verwendet, um die ausführbare Funktion zu erstellen und die Laufzeitumgebung bereitzustellen:

  1. Wenn noch kein Upgrade durchgeführt wurde, führen Sie ein Upgrade der Fn-Projekt-CLI auf die neueste Version durch. Siehe Fn-Projekt-CLI upgraden.
  2. Ändern Sie in einem Terminalfenster in das Verzeichnis, das den Funktionscode enthält, und öffnen Sie die Datei func.yaml in einem Texteditor.
    Die Parameter build_image: und run_image: zeigen die FDK-Build-Time- und Runtime Base Image-Versionen an, die aktuell von der Fn-Projekt-CLI verwendet werden, um die ausführbare Funktionsdatei zu erstellen und die Laufzeitumgebung bereitzustellen. Beispiel:
    build_image: fnproject/fn-java-fdk-build:jdk11-1.0.105
    run_image: fnproject/fn-java-fdk:jre11-1.0.105

    Wenn die Parameter build_image: und run_image: nicht in der Datei func.yaml vorhanden sind, erstellen Sie die Funktion mit den Befehlen fn build oder fn deploy. Dadurch werden die Parameter build_image: und run_image: der Datei func.yaml hinzugefügt, die auf das FDK-Build Image und die Laufzeitimageversionen gesetzt sind, die derzeit von der Fn-Projekt-CLI verwendet werden.

  3. Finden Sie die FDK-Build-Time Image- und Runtime Base Image-Versionen für die Version der Sprache heraus, die von der Fn-Projekt-CLI verwendet werden soll (siehe So finden Sie die neuesten FDK-Build-Time- und Runtime Base Image-Versionen für eine bestimmte unterstützte Sprachversion).

  4. Öffnen Sie die Datei func.yaml in einem Texteditor (sofern sie noch nicht geöffnet ist), und aktualisieren Sie sie wie folgt:
    1. Ändern Sie die Werte der Parameter build_image: und run_image: in die FDK-Build-Time- und Runtime Base Image-Versionen, die Sie im vorherigen Schritt identifiziert haben.

      So könnten Sie z.B.:

      build_image: fnproject/fn-java-fdk-build:jdk11-1.0.105
      run_image: fnproject/fn-java-fdk:jre11-1.0.105

      nach

      build_image: fnproject/fn-java-fdk-build:jdk11-1.0.130
      run_image: fnproject/fn-java-fdk:jre11-1.0.130
    2. Um Konsistenz zu gewährleisten und Verwechslungen zu vermeiden, ändern Sie den Wert des Parameters runtime: so, dass er der Befehlsoption --runtime für die Version der Sprache entspricht. Beispiel:
      runtime: java11
  5. Öffnen Sie nur für Java-Funktionen die Datei pom.xml in einem Texteditor, und aktualisieren Sie das Element <fdk.version> so, dass es der in func.yaml angegebenen Version entspricht.

    Beispiel: Sie können <fdk.version>1.0.105</fdk.version> in <fdk.version>1.0.130</fdk.version> ändern.

  6. Stellen Sie die Funktion erneut bereit, und testen Sie sie, um zu bestätigen, dass der Funktionscode mit den neuen FDK-Build-Time- und Runtime Base Image-Versionen kompatibel ist, mit denen die Fn-Projekt-CLI jetzt die ausführbare Funktionsdatei erstellt und die Laufzeitumgebung bereitstellt.