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 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:
Mediante la escritura de código para firmar solicitudes mediante programación. Para obtener más información sobre las credenciales necesarias y cómo firmar las solicitudes, consulte Firmas de solicitudes.
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:
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:
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:
Conéctese al entorno de desarrollo como desarrollador de funciones.
En una ventana de terminal, introduzca:
Comando
CopiarProbar
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
CopiarProbar
oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body ""
Salida:
Hello World !
Comando
CopiarProbar
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.
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:
Conéctese al entorno de desarrollo como desarrollador de funciones.
En una ventana de terminal, introduzca:
Comando
CopiarProbar
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
CopiarProbar
fn inspect function helloworld-app helloworld-func
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:
Conéctese al entorno de desarrollo como desarrollador de funciones.
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).
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
CopiarProbar
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
CopiarProbar
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:
Copiar
Hello World !
Comando
CopiarProbar
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 !
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.