Esta página ha sido traducida por una máquina.

Llamadas a funciones

Descubra las diferentes formas de llamar a funciones desplegadas en OCI Functions.

Puede llamar a una función desplegada en OCI Functions de distintas formas:

  • Con la CLI de Fn Project
  • Con la CLI de Oracle Cloud Infrastructure
  • Con los SDK de Oracle Cloud Infrastructure
  • Mediante la creación de una solicitud HTTP firmada al punto final de llamada de la función Cada función tiene un punto final de llamada.

Cada una de las opciones anteriores llama a la función mediante solicitudes a la API. Cualquier solicitud a la API se debe autenticar incluyendo una firma y el OCID del compartimento al que pertenece la función en la cabecera de la solicitud. Dicha solicitud se denomina solicitud "firmada". La firma incluye las credenciales de Oracle Cloud Infrastructure con formato cifrado.

Si utiliza la CLI de Fn Project o la CLI de Oracle Cloud Infrastructure para llamar a una función, se gestionará la autenticación. Consulte Uso de la CLI de Fn Project para llamar a funciones y Uso de la CLI de Oracle Cloud Infrastructure para llamar a funciones.

Si utiliza un SDK de Oracle Cloud Infrastructure para llamar a una función, puede utilizar el SDK para gestionar la autenticación. Consulte Uso de SDK para llamar a funciones.

Si crea una solicitud HTTP firmada para el punto final de llamada de una función, tendrá que gestionar la autenticación mediante la inclusión de una firma y el OCID del compartimento al que pertenece la función en la cabecera de la solicitud. Puede hacerlo de distintas formas:

Tenga en cuenta que la forma de llamar a una función determina la cantidad máxima de tiempo durante la que se puede ejecutar la función, de la siguiente forma:

  • Si llama a una función mediante la CLI de Fn Project, se aplica el Timeout que especifique en la definición de función (el valor por defecto es 30 segundos). Consulte Changing Default Memory and Timeout Settings.
  • Si llama a una función mediante la CLI de Oracle Cloud Infrastructure, se aplica el valor del parámetro global --read-timeout de la CLI de OCI (el valor por defecto es 60 segundos). Consulte llamada de funciónoci fn.
  • Si llama a una función mediante los SDK de Oracle Cloud Infrastructure, se aplica el timeout de lectura especificado para el cliente. Por ejemplo, consulte la documentación del SDK de Java y el SDK de Python.
  • Si llama a una función mediante el SDK de PL/SQL, se aplica el valor UTL_HTTP.set_transfer_timeout (el valor por defecto es 60 segundos).
  • Si llama a una función desde la API de REST DBMS_CLOUD mediante DBMS_CLOUD.SEND_REQUEST, se aplica el valor de UTL_HTTP.set_transfer_timeout (el valor por defecto es 60 segundos).
Consejo

Si no puede completar correctamente uno de los pasos de este tema, revise las soluciones para problemas comunes (consulte Solución de problemas de OCI Functions).

Tipos de Llamada Síncrona y Desasociada

Al llamar a una función, puede especificar un tipo para la llamada a la función. El tipo de llamada de función determina la responsabilidad del manejo de resultados, cuando se devuelve el control al emisor de la llamada y el código de estado HTTP que se devuelve, de la siguiente manera:

  • Sincronizar: si especifica Sync como tipo de llamada de función (valor por defecto), OCI Functions ejecuta la solicitud. A continuación, cuando se completa correctamente, OCI Functions emite un código de estado HTTP 200 y devuelve el resultado al emisor de la llamada, junto con el control.
  • Desasociado: si especifica Desasociado como tipo de llamada de función, OCI Functions ejecuta la solicitud. A continuación, en cuanto comienza el procesamiento, OCI Functions emite un código de estado HTTP 202 y devuelve el control al emisor de la llamada. La función en sí es responsable de la gestión de los resultados.

Para especificar el tipo de llamada a la función:

  • Al llamar a una función mediante el comando fn function invoke de la CLI de OCI, utilice el parámetro --fn-invoke-type. Por ejemplo:
    oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body "" --fn-invoke-type "detached"
  • Al llamar a una función desde otra función mediante una de las FDK, especifique el tipo de llamada en la llamada de función. Por ejemplo, utilizando Python FDK:
    resp = client.invoke_function(function_id=function_ocid, invoke_function_body=function_body, fn_invoke_type='detached')
  • Al llamar a una función mediante el comando raw-request de la CLI de OCI, incluya "fn-invoke-type" en el parámetro --request- headers. Por ejemplo:
    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"}'

Uso de la CLI de Fn Project para llamar a funciones

Para llamar a una función desplegada en OCI Functions mediante la CLI de Fn Project:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.

  2. En una ventana de terminal, introduzca:

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

    donde:

    • <app-name> es el nombre de la aplicación que contiene la función a la que desea llamar.
    • <function-name> es el nombre de la función a la que desea llamar.

    Por ejemplo:

    Comando
    fn invoke helloworld-app helloworld-func

    Salida:

    Hello World !
    Consejo

    Si desea transferir argumentos y valores a una función, agregue al comando fn invoke el prefijo echo -n '<argument>=<value>' |.

    Si la función espera el argumento y el valor como JSON, utilice un formato JSON válido. Por ejemplo:

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

    Salida:

    Hello John !

Uso de la CLI de Oracle Cloud Infrastructure para llamar a funciones

Si ha instalado la CLI de Oracle Cloud Infrastructure, puede utilizarla para enviar solicitudes de API para llamar a funciones. Entre otras cosas, la CLI de Oracle Cloud Infrastructure facilita la autenticación de Oracle Cloud Infrastructure. Para obtener información sobre el uso de la CLI de Oracle Cloud Infrastructure, consulte Interfaz de línea de comandos (CLI).

En estas instrucciones se supone lo siguiente:

  • Ya ha instalado y configurado la CLI de Oracle Cloud Infrastructure.
  • Desea llamar a una función como desarrollador de funciones configurado para su entorno de desarrollo.

Para invocar una función con la CLI de Oracle Cloud Infrastructure:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.

  2. En una ventana de terminal, introduzca:

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

    donde:

    • <function-ocid> es el OCID de la función a la que desea llamar. Para averiguar el OCID de una función, utilice el comando fn inspect para ver el valor de la propiedad id de la función (consulte Lista de funciones).
    • <output-filepath> es la ruta y el nombre de un archivo en el que escribir la respuesta. Para escribir la respuesta en stdout, especifique --file "-"
    • <request-parameters> hace referencia a argumentos y valores opcionales para transferirlos a la función. Si la función espera argumentos y valores como JSON, utilice un formato JSON válido. Por ejemplo, --body '{"name":"John"}'. Tenga en cuenta que debe incluir --body "" en la solicitud, incluso si no hay ningún parámetro de solicitud que transferir.

    Por ejemplo:

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

      Salida:

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

      Salida:

      Hello John !

Uso de SDK para llamar a funciones

Si está escribiendo un programa para llamar a una función en un lenguaje para el que existe un SDK de Oracle Cloud Infrastructure, recomendamos utilizar ese SDK para enviar solicitudes de API para llamar a la función. Entre otras cosas, el SDK facilitará la autenticación de Oracle Cloud Infrastructure.

Tenga en cuenta que al utilizar un SDK para llamar a una función, no especifica el punto final de llamada completo que especifique al utilizar el comando raw-request de la CLI de Oracle Cloud Infrastructure (consulte Obtención del punto final de llamada de una función). En su lugar, solo especifique la primera parte del punto final de llamada de la función. Por ejemplo, al utilizar un SDK, no especifique el punto final de llamada de la función como https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke. En su lugar, especifique el punto final de llamada de la función como https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com.

Para obtener más información sobre el uso de la API y la firma de solicitudes, consulte la documentación de la API de REST y Credenciales de seguridad. Para obtener información sobre los SDK, consulte Los SDK y la CLI.

Utilice la operación API de InvokeFunction para llamar a funciones.

Obtención del punto final de llamada de una función

Al llamar a una función mediante el comando raw-request de la CLI de Oracle Cloud Infrastructure, debe especificar el punto final de llamada de la función.

Para obtener el punto final de llamada de una función:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.

  2. En una ventana de terminal, introduzca:

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

    donde:

    • <app-name> es el nombre de la aplicación que contiene la función para la que desea obtener el punto final de llamada.
    • <function-name> es el nombre de la función para la que desea obtener el punto final de llamada.

    Por ejemplo:

    Comando
    fn inspect function helloworld-app helloworld-func

    Salida:

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

    El punto final de llamada de la función es el valor de "fnproject.io/fn/invokeEndpoint". Por ejemplo, "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke" (abreviado para mejorar la legibilidad).

Envío de una solicitud firmada al punto final de llamada de una función (mediante el comando raw-request de la CLI de Oracle Cloud Infrastructure)

Si ha instalado la CLI de Oracle Cloud Infrastructure, puede utilizarla para enviar solicitudes de API para llamar a funciones. Entre otras cosas, la CLI facilitará la autenticación de Oracle Cloud Infrastructure. Para obtener más información sobre el uso de la CLI de Oracle Cloud Infrastructure, consulte Interfaz de línea de comandos (CLI).

En estas instrucciones se supone lo siguiente:

  • Ya ha instalado y configurado la CLI de Oracle Cloud Infrastructure.
  • Desea llamar a una función como desarrollador de funciones configurado para su entorno de desarrollo.

Para llamar a una función desplegada en OCI Functions enviando una solicitud firmada al punto final de llamada de la función con el comando raw-request de la CLI de Oracle Cloud Infrastructure:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.

  2. Obtenga el punto final de llamada de la función (consulte Obtención del punto final de llamada de una función).

    Por ejemplo, "fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke" (abreviado para mejorar la legibilidad).

  3. Utilice el comando raw-request de la CLI de Oracle Cloud Infrastructure para llamar a la función enviando una solicitud POST firmada al punto final de llamada de la función mediante la introducción de lo siguiente:

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

    donde:

    • <invoke-endpoint> es el punto final que ha obtenido en el paso anterior.
    • <request-parameters> hace referencia a argumentos y valores opcionales para transferirlos a la función. Si la función espera argumentos y valores como JSON, utilice un formato JSON válido. Tenga en cuenta que debe incluir --request-body "" en la solicitud, aunque no haya ningún parámetro de solicitud que transferir.

    Por ejemplo:

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

      Salida:

      Hello World !
    • Comando
      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"}'

      Salida:

      Hello John !
  4. Si se ha proporcionado una frase de contraseña para cifrar la clave de firma de API, introduzca la frase de contraseña cuando se le solicite.