Funktionen aufrufen

Finden Sie heraus, wie Sie Funktionen aufrufen können, die in OCI Functions bereitgestellt sind.

Sie können eine Funktion, die Sie in OCI Functions bereitgestellt haben, auf unterschiedliche Weise aufrufen:

  • Mit der Fn-Projekt-CLI.
  • Mit der Oracle Cloud Infrastructure-CLI.
  • Mit den Oracle Cloud Infrastructure-SDKs.
  • Mit einer signierten HTTP-Anforderung an den Aufrufendpunkt der Funktion. Jede Funktion verfügt über einen Aufrufendpunkt.

Jede der oben genannten Aufrufarten ruft die Funktion über Anforderungen an die API auf. Jede Anforderung an die API muss authentifiziert werden, indem eine Signatur und die OCID des Compartments, zu dem die Funktion gehört, in den Anforderungsheader aufgenommen wird. Eine solche Anforderung wird als "signierte" Anforderung bezeichnet. Die Signatur umfasst Oracle Cloud Infrastructure-Zugangsdaten in verschlüsselter Form.

Wenn Sie die Fn-Projekt-CLI oder die Oracle Cloud Infrastructure-CLI zum Aufrufen einer Funktion verwenden, wird die Authentifizierung für Sie verarbeitet. Siehe Funktionen mit der Fn-Projekt-CLI aufrufen und Funktionen mit der Oracle Cloud Infrastructure-CLI aufrufen.

Wenn Sie ein Oracle Cloud Infrastructure-SDK zum Aufrufen einer Funktion verwenden, können Sie die Authentifizierung vom SDK verarbeiten lassen. Siehe Funktionen mit SDKs aufrufen.

Wenn Sie eine signierte HTTP-Anforderung an den Aufrufendpunkt einer Funktion senden, müssen Sie die Authentifizierung selbst verarbeiten, indem Sie eine Signatur und die OCID des Compartments, zu dem die Funktion gehört, in den Anforderungsheader aufnehmen. Hierfür gibt es verschiedene Möglichkeiten:

Beachten Sie, dass die Art und Weise, wie Sie eine Funktion aufrufen, wie folgt bestimmt, wie lange die Funktion maximal ausgeführt werden kann:

  • Wenn Sie eine Funktion mit der Fn-Projekt-CLI aufrufen, wird der in der Funktionsdefinition angegebene Timeout angewendet (Standardwert ist 30 Sekunden). Siehe Standardeinstellungen für Arbeitsspeicher und Timeout ändern.
  • Wenn Sie eine Funktion mit der Oracle Cloud Infrastructure-CLI aufrufen, wird der Wert des globalen OCI-CLI-Parameters --read-timeout angewendet (Standardwert ist 60 Sekunden). Siehe oci fn function invoke.
  • Wenn Sie eine Funktion mit den Oracle Cloud Infrastructure-SDKs aufrufen, wird der für den Client angegebene Lesetimeout angewendet. Beispiel: Weitere Informationen finden Sie in der Dokumentation zu Java SDK und Python SDK.
  • Wenn Sie eine Funktion mit dem PL/SQL-SDK aufrufen, wird der Wert von UTL_HTTP.set_transfer_timeout angewendet (Standard ist 60 Sekunden).
  • Wenn Sie eine Funktion aus der REST-API DBMS_CLOUD mit DBMS_CLOUD.SEND_REQUEST aufrufen, wird der Wert von UTL_HTTP.set_transfer_timeout angewendet (Standard ist 60 Sekunden).
Tipp

Wenn Sie einen der Schritte in diesem Thema nicht erfolgreich abschließen können, lesen Sie die Lösungen zu allgemeinen Problemen (siehe Fehlerbehebung in OCI Functions).

Synchrone und getrennte Aufruftypen

Wenn Sie eine Funktion aufrufen, können Sie einen Typ für den Funktionsaufruf angeben. Der Funktionsaufruftyp bestimmt die Zuständigkeit für die Ergebnisverarbeitung, wenn die Kontrolle an den Aufrufer zurückgegeben wird, und den zurückgegebenen HTTP-Statuscode wie folgt:

  • Synchronisierung: Wenn Sie Sync als Funktionsaufruftyp (Standard) angeben, führt OCI Functions die Anforderung aus. Nach erfolgreichem Abschluss gibt OCI Functions dann einen HTTP 200-Statuscode aus und gibt das Ergebnis zusammen mit der Kontrolle an den Aufrufer zurück.
  • Getrennt: Wenn Sie "Getrennt" als Funktionsaufruftyp angeben, führt OCI Functions die Anforderung aus. Sobald die Verarbeitung beginnt, gibt OCI Functions einen HTTP 202-Statuscode aus und gibt die Kontrolle an den Aufrufer zurück. Die Funktion selbst ist für die Ergebnisbehandlung verantwortlich.

So geben Sie den Funktionsaufruftyp an:

  • Wenn Sie eine Funktion mit dem OCI-CLI-Befehl fn function invoke aufrufen, verwenden Sie den Parameter --fn-invoke-type. Beispiel:
    oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body "" --fn-invoke-type "detached"
  • Wenn Sie eine Funktion aus einer anderen Funktion mit einem der FDKs aufrufen, geben Sie den Aufruftyp im Funktionsaufruf an. Beispiel: Verwenden Sie das Python-FDK:
    resp = client.invoke_function(function_id=function_ocid, invoke_function_body=function_body, fn_invoke_type='detached')
  • Wenn Sie eine Funktion mit dem OCI-CLI-Befehl raw-request aufrufen, nehmen Sie "fn-invoke-type" in den Parameter --request- headers auf. Beispiel:
    oci raw-request --http-method POST --target-uri https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke --request-body ""  --request-headers '{"fn-invoke-type" : "detached"}'

Funktionen mit der Fn-Projekt-CLI aufrufen

So rufen Sie eine in OCI Functions bereitgestellte Funktion mit der Fn-Projekt-CLI auf:

  1. Melden Sie sich als Funktionsentwickler bei Ihrer Entwicklungsumgebung an.

  2. Geben Sie in einem Terminalfenster Folgendes ein:

    fn invoke <app-name> <function-name>

    Hierbei gilt:

    • <app-name> ist der Name der Anwendung, die die aufzurufende Funktion enthält.
    • <function-name> ist der Name der aufzurufenden Funktion.

    Beispiel:

    fn invoke helloworld-app helloworld-func

    Ausgabe:

    Hello World !
    Tipp

    Wenn Sie Argumente und Werte an eine Funktion übergeben möchten, stellen Sie dem Befehl fn invoke das Präfix echo -n '<argument>=<value>'| voran.

    Wenn die Funktion das Argument und den Wert als JSON erwartet, verwenden Sie ein gültiges JSON-Format. Beispiel:

    echo -n '{"name":"John"}' | fn invoke helloworld-app helloworld-func

    Ausgabe:

    Hello John !

Funktionen mit der Oracle Cloud Infrastructure-CLI aufrufen

Wenn Sie die Oracle Cloud Infrastructure-CLI installiert haben, können Sie API-Anforderungen zum Aufrufen von Funktionen verwenden. Die Oracle Cloud Infrastructure-CLI vereinfacht außerdem die Oracle Cloud Infrastructure-Authentifizierung. Informationen zur Verwendung der Oracle Cloud Infrastructure-CLI finden Sie unter Befehlszeilenschnittstelle (CLI).

Bei diesen Anweisungen wird Folgendes vorausgesetzt:

  • Sie haben die Oracle Cloud Infrastructure-CLI bereits installiert und konfiguriert.
  • Sie möchten eine Funktion als Funktionsentwickler aufrufen, der für Ihre Entwicklungsumgebung konfiguriert ist.

So rufen Sie eine Funktion mit der Oracle Cloud Infrastructure-CLI auf:

  1. Melden Sie sich als Funktionsentwickler bei Ihrer Entwicklungsumgebung an.

  2. Geben Sie in einem Terminalfenster Folgendes ein:

    oci fn function invoke --function-id <function-ocid> --file "<output-filepath>" --body "<request-parameters>"

    Hierbei gilt:

    • <function-ocid> ist die OCID der Funktion, die aufgerufen werden soll. Um die OCID einer Funktion zu ermitteln, verwenden Sie den Befehl fn inspect, um den Wert der Eigenschaft id der Funktion anzuzeigen (siehe Funktionen auflisten).
    • <output-filepath> ist der Pfad und der Name einer Datei, in die die Antwort geschrieben werden soll. Um die Antwort in "stdout" zu schreiben, geben Sie --file "-" an.
    • <request-parameters> sind optionale Argumente und Werte, die an die Funktion übergeben werden. Wenn die Funktion Argumente und Werte als JSON erwartet, verwenden Sie ein gültiges JSON-Format. Beispiel: --body '{"name":"John"}'. Beachten Sie, dass Sie --body "" in die Anforderung aufnehmen müssen, selbst wenn keine zu übergebenden Anforderungsparameter vorhanden sind.

    Beispiel:

    • oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body ""

      Ausgabe:

      Hello World !
    • oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body '{"name":"John"}'

      Ausgabe:

      Hello John !

Funktionen mit SDKs aufrufen

Wenn Sie ein Programm schreiben, um eine Funktion in einer Sprache aufzurufen, für die ein Oracle Cloud Infrastructure-SDK vorhanden ist, wird empfohlen, dass Sie dieses SDK verwenden, um API-Anforderungen zum Aufrufen der Funktion zu senden. Das SDK vereinfacht außerdem die Oracle Cloud Infrastructure-Authentifizierung.

Wenn Sie eine Funktion mit einem SDK aufrufen, geben Sie nicht den gesamten Aufrufendpunkt an, den Sie bei Verwendung des Oracle Cloud Infrastructure-CLI-Befehls raw-request angeben (siehe Aufrufendpunkt einer Funktion abrufen). Geben Sie stattdessen nur den ersten Teil des Aufrufendpunkts der Funktion an. Beispiel: Wenn Sie ein SDK verwenden, geben Sie den Aufrufendpunkt der Funktion nicht als https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke an. Geben Sie stattdessen den Aufrufendpunkt der Funktion als https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com an.

Informationen zur Verwendung der API und zu Signieranforderungen finden Sie unter REST-API-Dokumentation und Sicherheitszugangsdaten. Informationen zu SDKs finden Sie unter SDKs und die CLI.

Mit dem API-Vorgang InvokeFunction können Sie Funktionen aufrufen.

Aufrufendpunkt einer Funktion abrufen

Wenn Sie eine Funktion mit dem Oracle Cloud Infrastructure-CLI-Befehl raw-request aufrufen, müssen Sie den Aufrufendpunkt der Funktion angeben.

So rufen Sie den Aufrufendpunkt einer Funktion ab:

  1. Melden Sie sich als Funktionsentwickler bei Ihrer Entwicklungsumgebung an.

  2. Geben Sie in einem Terminalfenster Folgendes ein:

    fn inspect function <app-name> <function-name>

    Hierbei gilt:

    • <app-name> ist der Name der Anwendung mit der Funktion, für die Sie den Aufrufendpunkt abrufen möchten.
    • <function-name> ist der Name der Funktion, für die Sie den Aufrufendpunkt abrufen möchten.

    Beispiel:

    fn inspect function helloworld-app helloworld-func

    Ausgabe:

    {
       "annotations": {
    		"fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke",
    
    ...
    }

    Der Aufrufendpunkt der Funktion ist der Wert von "fnproject.io/fn/invokeEndpoint". Beispiel: "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke" (aus Gründen der Lesbarkeit abgekürzt).

Signierte Anforderung an Aufrufendpunkt einer Funktion senden (mit dem Oracle Cloud Infrastructure-CLI-Befehl raw-request)

Wenn Sie die Oracle Cloud Infrastructure-CLI installiert haben, können Sie API-Anforderungen zum Aufrufen von Funktionen verwenden. Die CLI vereinfacht außerdem die Oracle Cloud Infrastructure-Authentifizierung. Weitere Informationen zur Verwendung der Oracle Cloud Infrastructure-CLI finden Sie unter Befehlszeilenschnittstelle (CLI).

Bei diesen Anweisungen wird Folgendes vorausgesetzt:

  • Sie haben die Oracle Cloud Infrastructure-CLI bereits installiert und konfiguriert.
  • Sie möchten eine Funktion als Funktionsentwickler aufrufen, der für Ihre Entwicklungsumgebung konfiguriert ist.

So rufen Sie eine in OCI Functions bereitgestellte Funktion auf, indem Sie mit dem Oracle Cloud Infrastructure-CLI-Befehl raw-request eine signierte Anforderung an den Aufrufendpunkt der Funktion senden:

  1. Melden Sie sich als Funktionsentwickler bei Ihrer Entwicklungsumgebung an.

  2. Rufen Sie den Aufrufendpunkt der Funktion ab (siehe Aufrufendpunkt einer Funktion abrufen).

    Beispiel: "fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke" (aus Gründen der Lesbarkeit abgekürzt).

  3. Verwenden Sie den Oracle Cloud Infrastructure-CLI-Befehl raw-request, um die Funktion aufzurufen. Senden Sie dazu eine signierte POST-Anforderung an den Aufrufendpunkt der Funktion, indem Sie Folgendes eingeben:

    oci raw-request --http-method POST --target-uri <invoke-endpoint> --request-body "<request-parameters>"

    Hierbei gilt:

    • <invoke-endpoint> ist der Endpunkt, den Sie im vorherigen Schritt abgerufen haben.
    • <request-parameters> sind optionale Argumente und Werte, die an die Funktion übergeben werden. Wenn die Funktion Argumente und Werte als JSON erwartet, verwenden Sie ein gültiges JSON-Format. Beachten Sie, dass Sie --request-body "" in die Anforderung aufnehmen müssen, selbst wenn keine zu übergebenden Anforderungsparameter vorhanden sind.

    Beispiel:

    • oci raw-request --http-method POST --target-uri https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke --request-body ""

      Ausgabe:

      Hello World !
    • oci raw-request --http-method POST --target-uri https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke --request-body '{"name":"John"}'

      Ausgabe:

      Hello John !
  4. Wenn eine Passphrase angegeben wurde, um den API-Signaturschlüssel zu verschlüsseln, geben Sie sie bei entsprechender Aufforderung ein.