Richiamo funzioni

Scopri i diversi modi per richiamare le funzioni distribuite in OCI Functions.

È possibile richiamare una funzione distribuita in OCI Functions in diversi modi:

  • Utilizzo dell'interfaccia CLI Fn Project.
  • Uso dell'interfaccia CLI di Oracle Cloud Infrastructure.
  • Utilizzando gli SDK di Oracle Cloud Infrastructure.
  • Esecuzione di una richiesta HTTP firmata all'endpoint di richiamo della funzione. Ogni funzione ha un endpoint di richiamo.

Ciascuno di questi richiami la funzione tramite richieste all'API. Qualsiasi richiesta all'API deve essere autenticata includendo una firma e l'OCID del compartimento a cui appartiene la funzione nell'intestazione della richiesta. Tale richiesta è denominata richiesta "firmata". La firma include le credenziali di Oracle Cloud Infrastructure in forma cifrata.

Se si utilizza l'interfaccia CLI di Fn Project o l'interfaccia CLI di Oracle Cloud Infrastructure per richiamare una funzione, l'autenticazione viene gestita automaticamente. Vedere Utilizzo dell'interfaccia CLI di Fn Project per richiamare le funzioni e Utilizzo dell'interfaccia CLI di Oracle Cloud Infrastructure per richiamare le funzioni.

Se utilizzi un SDK Oracle Cloud Infrastructure per richiamare una funzione, puoi utilizzare l'SDK per gestire l'autenticazione. Vedere Utilizzo di SDK per richiamare le funzioni.

Se effettui una richiesta HTTP firmata all'endpoint di richiamo di una funzione, dovrai gestire l'autenticazione includendo una firma e l'OCID del compartimento a cui appartiene la funzione nell'intestazione della richiesta. Puoi farlo in diversi modi:

Tenere presente che il modo in cui viene richiamata una funzione determina il periodo di tempo massimo per il quale la funzione può essere eseguita, come indicato di seguito.

  • Se si richiama una funzione utilizzando l'interfaccia CLI di Fn Project, viene applicato il Timeout specificato nella definizione della funzione (l'impostazione predefinita è 30 secondi). Vedere Modifica delle impostazioni predefinite di memoria e timeout.
  • Se si richiama una funzione utilizzando l'interfaccia CLI di Oracle Cloud Infrastructure, viene applicato il valore del parametro globale --read-timeout dell'interfaccia CLI OCI (l'impostazione predefinita è 60 secondi). Vedere il richiamo della funzione oci fn.
  • Se si richiama una funzione utilizzando gli SDK di Oracle Cloud Infrastructure, viene applicato il timeout di lettura specificato per il client. Ad esempio, consulta la documentazione relativa a SDK Java e SDK Python.
  • Se si richiama una funzione utilizzando l'SDK PL/SQL, viene applicato il valore UTL_HTTP.set_transfer_timeout (l'impostazione predefinita è 60 secondi).
  • Se si richiama una funzione dall'interfaccia API REST DBMS_CLOUD utilizzando DBMS_CLOUD.SEND_REQUEST, viene applicato il valore di UTL_HTTP.set_transfer_timeout (l'impostazione predefinita è 60 secondi).
Suggerimento

Se non si riesce a completare correttamente uno dei passi di questo argomento, esaminare le soluzioni per individuare i problemi più comuni (vedere Risoluzione dei problemi delle funzioni OCI).

Tipi di richiamo sincrono e scollegato

Quando si richiama una funzione, è possibile specificare un tipo per il richiamo della funzione. Il tipo di richiamo della funzione determina la responsabilità per la gestione dei risultati, quando il controllo viene restituito al chiamante e il codice di stato HTTP restituito, come riportato di seguito.

  • Sincronizzazione: se si specifica Sync come tipo di richiamo della funzione (impostazione predefinita), OCI Functions esegue la richiesta. Successivamente, al completamento con esito positivo, OCI Functions emette un codice di stato HTTP 200 e restituisce il risultato al chiamante, insieme al controllo.
  • Scollegato: se si specifica Scollegato come tipo di richiamo della funzione, OCI Functions esegue la richiesta. Successivamente, non appena inizia l'elaborazione, OCI Functions emette un codice di stato HTTP 202 e restituisce il controllo al chiamante. La funzione stessa è responsabile della gestione dei risultati.

Per specificare il tipo di richiamo della funzione, effettuare le operazioni riportate di seguito.

  • Quando si richiama una funzione utilizzando il comando fn function invoke dell'interfaccia CLI OCI, utilizzare il parametro --fn-invoke-type. Ad esempio:
    oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body "" --fn-invoke-type "detached"
  • Quando si richiama una funzione da un'altra funzione utilizzando uno degli FDK, specificare il tipo di richiamo nella chiamata di funzione. Ad esempio, utilizzando il FDK Python:
    resp = client.invoke_function(function_id=function_ocid, invoke_function_body=function_body, fn_invoke_type='detached')
  • Quando si richiama una funzione utilizzando il comando raw-request dell'interfaccia CLI OCI, includere "fn-invoke-type" nel parametro --request- headers. Ad esempio:
    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"}'

Utilizzo dell'interfaccia CLI di Fn Project per richiamare le funzioni

Per richiamare una funzione distribuita in OCI Functions utilizzando l'interfaccia CLI Fn Project, effettuare le operazioni riportate di seguito.

  1. Accedere all'ambiente di sviluppo come sviluppatore di funzioni.

  2. In una finestra del terminale, immettere:

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

    Dove:

    • <app-name> è il nome dell'applicazione contenente la funzione che si desidera richiamare
    • <function-name> è il nome della funzione che si desidera richiamare

    Ad esempio:

    fn invoke helloworld-app helloworld-func

    output:

    Hello World !
    Suggerimento

    Se si desidera passare argomenti e valori a una funzione, anteporre al comando fn invoke echo -n '<argument>=<value>' |

    Se la funzione prevede l'argomento e il valore come JSON, utilizzare un formato JSON valido. Ad esempio:

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

    output:

    Hello John !

Utilizzo dell'interfaccia CLI di Oracle Cloud Infrastructure per richiamare le funzioni

Se hai installato l'interfaccia CLI di Oracle Cloud Infrastructure, puoi utilizzarla per inviare richieste API per richiamare funzioni. Tra le altre cose, l'interfaccia CLI di Oracle Cloud Infrastructure faciliterà l'autenticazione di Oracle Cloud Infrastructure. Per informazioni sull'uso dell'interfaccia CLI di Oracle Cloud Infrastructure, vedere Command Line Interface (CLI).

Queste istruzioni presuppongono:

  • è già stata installata e configurata l'interfaccia CLI di Oracle Cloud Infrastructure
  • si desidera richiamare una funzione come sviluppatore di funzioni configurato per l'ambiente di sviluppo

Per richiamare una funzione utilizzando l'interfaccia CLI di Oracle Cloud Infrastructure:

  1. Accedere all'ambiente di sviluppo come sviluppatore di funzioni.

  2. In una finestra del terminale, immettere:

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

    Dove:

    • <function-ocid> è l'OCID della funzione che si desidera richiamare. Per individuare l'OCID di una funzione, utilizzare il comando fn inspect per visualizzare il valore della proprietà id della funzione (vedere Listing Functions).
    • <output-filepath> è il percorso e il nome di un file in cui scrivere la risposta. Per scrivere la risposta a stdout, specificare --file "-"
    • <request-parameters> sono facoltativamente argomenti e valori da passare alla funzione. Se la funzione prevede argomenti e valori come JSON, utilizzare un formato JSON valido. Ad esempio, --body '{"name":"John"}'. Si noti che è necessario includere --body "" nella richiesta, anche se non sono presenti parametri di richiesta da passare.

    Ad esempio:

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

      output:

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

      output:

      Hello John !

Utilizzo degli SDK per richiamare le funzioni

Se stai scrivendo un programma per richiamare una funzione in una lingua per la quale esiste un SDK Oracle Cloud Infrastructure, ti consigliamo di utilizzare tale SDK per inviare richieste API per richiamare la funzione. Tra le altre cose, l'SDK faciliterà l'autenticazione di Oracle Cloud Infrastructure.

Tenere presente che quando si utilizza un SDK per richiamare una funzione, non si specifica l'intero endpoint di richiamo specificato quando si utilizza il comando raw-request dell'interfaccia CLI di Oracle Cloud Infrastructure (vedere Come ottenere l'endpoint di richiamo di una funzione). Specificare invece solo la prima parte dell'endpoint di richiamo della funzione. Ad esempio, quando si utilizza un SDK, non specificare l'endpoint di richiamo della funzione come https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke. Specificare invece l'endpoint di richiamo della funzione come https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com.

Per informazioni sull'uso dell'API e delle richieste di firma, consulta la documentazione dell'API REST e le credenziali di sicurezza. Per informazioni sugli SDK, vedere SDK e l'interfaccia CLI.

Utilizzare l'operazione API InvokeFunction per richiamare le funzioni.

Recupero dell'endpoint di richiamo di una funzione

Quando si richiama una funzione utilizzando il comando raw-request dell'interfaccia CLI di Oracle Cloud Infrastructure, è necessario specificare l'endpoint di richiamo della funzione.

Per ottenere l'endpoint di richiamo di una funzione:

  1. Accedere all'ambiente di sviluppo come sviluppatore di funzioni.

  2. In una finestra del terminale, immettere:

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

    Dove:

    • <app-name> è il nome dell'applicazione che contiene la funzione per la quale si desidera ottenere l'endpoint di richiamo
    • <function-name> è il nome della funzione per la quale si desidera ottenere l'endpoint di richiamo

    Ad esempio:

    fn inspect function helloworld-app helloworld-func

    output:

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

    L'endpoint di richiamo della funzione è il valore "fnproject.io/fn/invokeEndpoint" . Ad esempio, "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke" (abbreviato per leggibilità).

Invio di una richiesta firmata all'endpoint di richiamo di una funzione (mediante il comando raw-request CLI di Oracle Cloud Infrastructure)

Se hai installato l'interfaccia CLI di Oracle Cloud Infrastructure, puoi utilizzarla per inviare richieste API per richiamare funzioni. Tra le altre cose, l'interfaccia CLI faciliterà l'autenticazione di Oracle Cloud Infrastructure. Per ulteriori informazioni sull'uso dell'interfaccia CLI di Oracle Cloud Infrastructure, vedere Command Line Interface (CLI).

Queste istruzioni presuppongono:

  • è già stata installata e configurata l'interfaccia CLI di Oracle Cloud Infrastructure
  • si desidera richiamare una funzione come sviluppatore di funzioni configurato per l'ambiente di sviluppo

Per richiamare una funzione distribuita in OCI Functions inviando una richiesta firmata all'endpoint di richiamo della funzione utilizzando il comando raw-request dell'interfaccia CLI di Oracle Cloud Infrastructure:

  1. Accedere all'ambiente di sviluppo come sviluppatore di funzioni.

  2. Ottenere l'endpoint di richiamo della funzione (vedere Come ottenere l'endpoint di richiamo di una funzione).

    Ad esempio, "fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke" (abbreviato per leggibilità).

  3. Utilizzare il comando raw-request dell'interfaccia CLI di Oracle Cloud Infrastructure per richiamare la funzione inviando una richiesta POST firmata all'endpoint di richiamo della funzione immettendo:

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

    Dove:

    • <invoke-endpoint> è l'endpoint ottenuto nel passo precedente.
    • <request-parameters> sono facoltativamente argomenti e valori da passare alla funzione. Se la funzione prevede argomenti e valori come JSON, utilizzare un formato JSON valido. Si noti che è necessario includere --request-body "" nella richiesta, anche se non sono presenti parametri di richiesta da passare.

    Ad esempio:

    • 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 ""

      output:

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

      output:

      Hello John !
  4. Se è stata fornita una passphrase per cifrare la chiave di firma API, immettere la passphrase quando richiesto.