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, sowie der von Ihnen angegebene Aufruftyp die maximale Ausführungszeit der Funktion und andere Ausführungsverhaltensweisen bestimmen.

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 "Synchronisierung" als Funktionsaufruftyp (Standard) angeben, führt OCI Functions die Anforderung synchron aus. Nach erfolgreichem Abschluss gibt OCI Functions einen HTTP 200-Statuscode aus und gibt das Ergebnis zusammen mit der Kontrolle an den Aufrufer zurück.
  • Zuordnung aufgehoben: Wenn Sie "Zuordnung getrennt" als Funktionsaufruftyp angeben, führt OCI Functions die Anforderung asynchron 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.

Die Angabe von Sync als Funktionsaufruftyp wird auch als Aufruf der Funktion im Synchronisierungsmodus oder als synchroner Aufruf bezeichnet. Die Angabe von {\b Detached} als Funktionsaufruftyp wird auch als Aufruf der Funktion im Modus {\b Detached} oder als getrennter Aufruf bezeichnet.

Ein getrennter Aufruf kann besser sein als ein synchroner Aufruf für Funktionen, die eine lange Ausführung benötigen, da der getrennte Aufruf einen längeren Ausführungstimeout unterstützt und auch zusätzliche Konfigurationsoptionen für Zustellungsziele nach der Ausführung unterstützt (siehe Funktionen im getrennten Modus aufrufen). Die Vorteile eines getrennten Aufrufs sind in der Regel sehr nützlich für Funktionen, die Sie für die Ausführung nach einem wiederkehrenden Zeitplan planen. Daher werden Funktionen, die Sie planen, immer mit dem Aufruftyp "Getrennt" aufgerufen (siehe Funktionen planen).

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"}'

Timeout für Funktion, Timeout für Funktionsaufruf und Timeout für Funktionsausführung

Der Funktionstimeout kann genauer definiert werden als:

  • Timeout beim Funktionsaufruf, der sich auf die Zeit bezieht, die ein Client, der eine Funktion aufruft, auf eine Antwort von der Funktion wartet, bevor er aufgibt.
  • Funktionsausführungstimeout, der sich auf die Dauer bezieht, für die OCI Functions eine Funktion ausführen lässt, bevor die Ausführung beendet wird.

Wenn Sie eine Funktion mit dem Aufruftyp {\b Sync} aufrufen, sind das Timeout für den Funktionsaufruf und das Timeout für die Funktionsausführung identisch. Wenn Sie jedoch eine Funktion mit dem Aufruftyp "Abgetrennt" aufrufen, steuert der Parameter Timeout bei getrenntem Aufruf (detachedModeTimeoutInSeconds) den Timeout für die Funktionsausführung und ist vom Timeout für den Funktionsaufruf getrennt.

Wie Sie eine Funktion aufrufen und den von Ihnen angegebenen Aufruftyp bestimmen, wie lange die Funktion maximal ausgeführt werden kann:

  • Wenn Sie eine Funktion mit der Fn-Projekt-CLI (mit Sync als Aufruftyp) aufrufen, wird der Parameter Synchronous invocation timeout (timeoutInSeconds), den Sie in der Funktionsdefinition angeben, angewendet (Standardwert ist 30 Sekunden). Siehe Changing Default Memory and Timeout Settings.
  • Wenn Sie eine Funktion mit der Oracle Cloud Infrastructure-CLI (mit Sync als Aufruftyp) 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 (mit Sync als Aufruftyp) aufrufen, wird der für den Client angegebene Lese-Timeout 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).
  • Wenn Sie eine Funktion mit dem Aufrufstyp "Getrennt" aufrufen, wird der Parameter Timeout bei getrenntem Aufruf (detachedModeTimeoutInSeconds), den Sie in der Funktionsdefinition angeben, angewendet (zwischen 5 Sekunden und 3600 Sekunden oder 1 Stunde). Wenn Sie eine Funktion mit dem Aufrufstyp "Getrennt" aufrufen und der Parameter Timeout bei getrenntem Aufruf (detachedModeTimeoutInSeconds) nicht festgelegt ist, wird der Wert des Parameters Synchroner Aufruf - Timeout (timeoutInSeconds) angewendet. Siehe Funktionen im getrennten Modus aufrufen.

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.

Funktionen im getrennten Modus aufrufen

Rufen Sie eine Funktion mit {\b Detached} als Aufruftyp auf, wenn:

  • Sie möchten eine Funktion aufrufen, deren Ausführung lange dauert.
  • Sie möchten, dass die Funktion asynchron ausgeführt wird, sodass die Kontrolle unmittelbar nach dem Aufruf der Funktion an den Aufrufer zurückgegeben wird, ohne auf die Ergebnisse des Aufrufs zu warten.
  • Sie möchten Ziele angeben, an die Ergebnisse erfolgreicher und nicht erfolgreicher Aufrufe gesendet werden sollen.

Durch den getrennten Aufruf können Workloads mit langer Ausführungszeit (wie große ETL-Aufgaben, AI/ML-Jobs und Integrationen) beendet werden, ohne durch den synchronen Aufruf-Timeout eingeschränkt zu werden.

Timeout und Ziele für getrennte Aufrufe einer Funktion angeben

Beim Erstellen oder Aktualisieren einer Funktion können Sie optional Folgendes festlegen:

  • Parameter Timeout bei getrenntem Aufruf (detachedModeTimeoutInSeconds), um den Timeout bei der Funktionsausführung für getrennte Aufrufe anzugeben
  • das Erfolgsziel und das Fehlerziel (successDestination bzw. failureDestination), um Ziele anzugeben, an die Ergebnisse von getrennten Aufrufen gesendet werden sollen. Beachten Sie, dass die Ziele "Erfolg" und "Fehler" nur für getrennte Aufrufe gelten. Wenn Sie ein Erfolgs- und/oder Fehlerziel angeben, stellt OCI Functions Folgendes bereit:
    • Ein Aufrufdatensatz für das Erfolgsziel, wenn ein getrennter Aufruf erfolgreich ist.
    • Ein Aufrufdatensatz für das Fehlerziel, wenn ein getrennter Aufruf nicht erfolgreich verläuft.

    Unterstützte Ziele für die Ergebnisse von getrennten Aufrufen sind der Notifications-Service, der Queue-Service und der Streaming-Service. Beachten Sie, dass OCI Functions IAM-Policy-Berechtigungen benötigt, um in den Zielservice zu schreiben (siehe IAM-Policys für "Erfolgs- und Fehlerziele beim getrennten Aufruf erstellen").

Mit der Konsole, der OCI-CLI und der API können Sie den Timeout und die Ziele für getrennte Aufrufe angeben.

Beispiel: Sie können den folgenden OCI-CLI-Befehl eingeben, um eine Funktion zu erstellen, die beim Aufruf mit dem Aufruftyp "Getrennt" bis zu 1800 Sekunden lang ausgeführt wird, bevor ein Timeout auftritt. Für diese Funktion werden die Ergebnisse erfolgreicher und nicht erfolgreicher Aufrufe an die in success-dest.json bzw. failure-dest.json angegebenen Ziele gesendet:

oci fn function create --application-id <ocid> --display-name "fn_longer_demo" --image <image> --memory-in-mbs 256 \
  --detached-mode-timeout-in-seconds 1800 \
  --success-destination file://success-dest.json \
  --failure-destination file://failure-dest.json

Hierbei gilt:

  • success-dest.json enthält die folgende JSON-Zeichenfolge:
    {"kind": "STREAM", "streamId": "ocid1.stream.oc1...."}
  • failure-dest.json enthält die folgende JSON-Zeichenfolge:
    {"kind": "QUEUE", "queueId": "ocid1.queue.oc1....", "channelId": "failure1234"}

Die Attribute, die für verschiedene Zielservices angegeben werden sollen, finden Sie in der API-Dokumentation unter SuccessDestinationDetails und FailureDestinationDetails.

IAM-Policys für erfolgreiche getrennte Aufrufe und Fehlerziele erstellen

OCI Functions erfordert IAM-Berechtigungen, um die Ergebnisse von getrennten Aufrufen in die Erfolgs- und Fehlerziele zu schreiben, die Sie in Funktionsdefinitionen angeben. Der Notifications-Service, der Streaming-Service und der Queue-Service werden als Erfolgs- und Fehlerziele unterstützt. Wenn die Berechtigungen noch nicht vorhanden sind, müssen Sie entsprechende IAM-Policys erstellen, die die erforderlichen Policy-Anweisungen enthalten.

Beispiel:

  • Damit OCI Functions die Ergebnisse getrennter Aufrufe in Erfolgs- und Fehlerziele im Notifications-Service schreiben kann, nehmen Sie eine Policy-Anweisung ähnlich der folgenden in eine IAM-Policy auf:
    Allow any-user to use ons-topics in compartment <destination-topic-compartment-ocid> where all {request.principal.type= 'fnapp', request.principal.compartment.id='<compartment-ocid>'}
  • Um zu ermöglichen, dass OCI Functions die Ergebnisse getrennter Aufrufe in Erfolgs- und Fehlerziele im Queue-Service schreiben kann, nehmen Sie eine Policy-Anweisung wie die folgende in eine IAM-Policy auf:
    Allow any-user to use queues in compartment <destination-queue-compartment-ocid> where all {request.principal.type= 'fnapp', target.queue.id='<queue-ocid>', request.principal.compartment.id='<compartment-ocid>'}
  • Damit OCI Functions die Ergebnisse von getrennten Aufrufen in Erfolgs- und Fehlerziele im Streaming-Service schreiben kann, nehmen Sie eine Policy-Anweisung ähnlich der folgenden in eine IAM-Policy auf:
    Allow any-user to use streams in compartment <destination-stream-compartment-ocid> where all {request.principal.type= 'fnapp', target.stream.id='<stream-ocid>', request.principal.compartment.id='<compartment-ocid>'}

Funktionen im getrennten Modus aufrufen

Nachdem Sie die Eigenschaft Timeout bei getrenntem Aufruf (detachedModeTimeoutInSeconds) einer Funktion auf den erforderlichen Funktionsausführungstimeout gesetzt und optional Erfolgs- und Fehlerziele für Aufrufergebnisse angegeben haben (zusammen mit den entsprechenden Policy-Anweisungen, mit denen OCI Functions auf diese Ziele zugreifen kann), können Sie die Funktion aufrufen und "Getrennt" als Aufruftyp angeben.

Beispiel:

  • Um eine Funktion im getrennten Modus mit der OCI-CLI fn function invoke aufzurufen, geben Sie einen Befehl wie den folgenden ein:

    oci fn function invoke --function-id <function-ocid> --file "-" --body '{"name": "ABC"}' --fn-invoke-type detached
  • Um eine Funktion im getrennten Modus mit dem OCI-CLI-Befehl raw-request aufzurufen, geben Sie einen Befehl wie den folgenden ein:

    oci raw-request --http-method POST --target-uri <invoke-endpoint> --request-body '{"name": "ABC"}' --request-headers '{"fn-invoke-type" : "detached"}'

Getrennte Zustellung von Aufrufergebnissen

Wenn Sie Erfolgs- und Fehlerziele für die Ergebnisse von getrennten Aufrufen einer Funktion angegeben haben (und entsprechende Policy-Anweisungen erstellt haben, damit OCI Functions auf diese Ziele zugreifen kann), stellt OCI Functions Folgendes bereit:

  • Ein Aufrufdatensatz für das Erfolgsziel, wenn ein getrennter Aufruf erfolgreich ist.
  • Ein Aufrufdatensatz für das Fehlerziel, wenn ein getrennter Aufruf nicht erfolgreich verläuft.

Beispiel-Aufrufdatensatz für erfolgreichen Aufruf:

{
  "id": "01K1Q6K12C1BT01KRZJ000HKB9",
  "version": "1.0",
  "data": {
    "compartmentId": "ocid1.compartment.oc1..aaaaaaaa______jf4a",
    "functionId": "...",
    "applicationId": "...",
    "request": {
      "opcRequestId": "...",
      "fnCallId": "..."
    },
    "response": {
      "status": "200",
      "errorCode": null,
      "errorMessage": null,
      "timestamp": "2025-08-03T05:31:21.392988237Z"
    }
  }
}

Beispiel-Aufrufdatensatz für fehlgeschlagenen Aufruf:

{
    "id": "01J6BS40ZC000000000000H7Z0",
    "version": "1.0",
    "data":
    {
        "compartmentId": "ocid1.compartment.oc1..aaaaaaaa______jf4a",
        "functionId": "...",
        "applicationId": "...",
        "request": {
            "opcRequestId": "...",
            "fnCallId": "..."
        },
        "response": {
            "status": "502",
            "errorCode": "FunctionInvokeExecutionFailed",
            "errorMessage": "function failed",
            "timestamp": "2024-08-11T21:47:41.264Z"
        }
    }
}

OCI Functions stellt Aufrufdatensätze in dem vom Ziel erwarteten Format bereit.

Wenn OCI Functions keinen Aufrufdatensatz an das Ziel übermitteln kann (z.B. aufgrund fehlender Berechtigungen), können Sie mit Logs und Metriken Zustellungsfehler verfolgen.

Monitoring und Metriken

Um zwischen Sync- und Detached-Aufruftypen zu unterscheiden, enthalten die Metriken FunctionExecutionDuration, FunctionInvocationCount und FunctionResponseCount die Dimension InvokeType.

Um erfolgreiche und nicht erfolgreiche Zustellungen von Aufrufdatensätzen an Ziele zu verfolgen, verwenden Sie die Metrik FunctionDetachedDeliveries.

Weitere Informationen zu OCI Functions-Metriken finden Sie unter Funktionsmetriken.

Tipps zur Fehlerbehebung bei Problemen mit getrennten Aufrufen

Wenn Probleme mit getrennten Aufrufen auftreten oder Aufrufdatensätze nicht zugestellt werden:

  • Prüfen Sie, ob die erforderlichen IAM-Berechtigungen vorhanden sind, um OCI Functions Zugriff auf das Ziel zu erteilen (siehe IAM-Policys für "Erfolgs- und Fehlerziele bei getrenntem Aufruf erstellen").
  • Mit dem OCI Logging-Service können Sie Fehlermeldungen prüfen. Wenn OCI Functions keinen Aufrufdatensatz an ein Ziel übermitteln konnte, enthält es den Grund in den Aufruflogs in OCI Logging. Der Logeintrag beginnt mit Invocation record delivery to failure destination failed due to - ... (siehe Funktionslogs speichern und anzeigen).
  • Mit der Metrik FunctionDetachedDeliveries können Sie Zustellungsdetails und -fehler prüfen (siehe Funktionsmetriken). Bei nicht erfolgreichen Übermittlungen an Zielziele enthält die Dimension responseType der Metrik Fehler, und die Dimension errorMessage enthält die Fehlerursache.