Appel de fonctions
Découvrez les différentes façons d'appeler des fonctions déployées dans le service des fonctions pour OCI.
Vous pouvez appeler une fonction que vous avez déployée dans le service des fonctions pour OCI de différentes façons :
- À l'aide de l'interface de ligne de commande Fn Project.
- À l'aide de l'interface de ligne de commande Oracle Cloud Infrastructure.
- À l'aide des trousses SDK Oracle Cloud Infrastructure.
- En créant une demande HTTP signée pour le point d'extrémité d'appel de la fonction. Chaque fonction possède un point d'extrémité d'appel.
Chacune des méthodes ci-dessus appelle la fonction au moyen de demandes à l'API. Toute demande destinée à l'API doit être authentifiée en incluant une signature et l'OCID du compartiment auquel appartient la fonction dans l'en-tête de la demande. Une demande de ce type est une demande "signée". La signature inclut des données d'identification Oracle Cloud Infrastructure dans un formulaire chiffré.
Si vous utilisez l'interface de ligne de commande Fn Project ou l'interface de ligne de commande Oracle Cloud Infrastructure pour appeler une fonction, l'authentification est gérée pour vous. Voir Utilisation de l'interface de ligne de commande Fn Project pour appeler des fonctions et Utilisation de l'interface de ligne de commande Oracle Cloud Infrastructure pour appeler des fonctions.
Si vous utilisez une trousse SDK Oracle Cloud Infrastructure pour appeler une fonction, vous pouvez utiliser la trousse SDK pour gérer l'authentification. Voir Utilisation de trousses SDK pour appeler des fonctions.
Si vous envoyez une demande HTTP signée au point d'extrémité d'une fonction, vous devrez traiter l'authentification vous-même en incluant une signature et l'OCID du compartiment associé à la fonction dans l'en-tête de la demande. Vous pouvez procéder de différentes façons :
- À l'aide de la commande
raw-request
de l'interface de ligne de commande Oracle Cloud Infrastructure. Voir Envoi d'une demande signée au point d'extrémité d'appel d'une fonction (à l'aide de la commande raw-request de l'interface de ligne de commande Oracle Cloud Infrastructure). - En écrivant du code pour signer des demandes par programmation. Pour plus d'informations sur les données d'identification requises et la signature des demandes, voir Signatures des demandes.
Notez que la façon dont vous appelez une fonction détermine la durée maximale d'exécution de la fonction, comme suit :
- Si vous appelez une fonction à l'aide de l'interface de ligne de commande Fn Project, la temporisation que vous spécifiez dans la définition de la fonction est appliquée (la valeur par défaut est 30 secondes). Voir Modification des paramètres de mémoire par défaut et de temporisation.
- Si vous appelez une fonction à l'aide de l'interface de ligne de commande d'Oracle Cloud Infrastructure, la valeur du paramètre global
--read-timeout
de l'interface de ligne de commande OCI est appliquée (la valeur par défaut est 60 secondes). Voir oci fn function invoke. - Si vous appelez une fonction à l'aide des trousses SDK d'Oracle Cloud Infrastructure, la temporisation de lecture spécifiée pour le client est appliquée. Par exemple, voir la documentation sur la trousse SDK Java et la trousse SDK Python.
- Si vous appelez une fonction à l'aide de la trousse SDK PL/SQL, la valeur de
UTL_HTTP.set_transfer_timeout
est appliquée (la valeur par défaut est 60 secondes). - Si vous appelez une fonction à partir de l'API REST DBMS_CLOUD à l'aide de DBMS_CLOUD.SEND_REQUEST, la valeur de
UTL_HTTP.set_transfer_timeout
est appliquée (la valeur par défaut est 60 secondes).
Si vous ne parvenez pas à effectuer une des étapes de cette rubrique, consultez les solutions aux problèmes communs (voir Dépannage du service des fonctions pour OCI).
Types d'appel synchrones et détachés
Lorsque vous appelez une fonction, vous pouvez spécifier un type pour l'appel de la fonction. Le type d'appel de fonction détermine la responsabilité du traitement des résultats, lorsque le contrôle est retourné à l'appelant et le code d'état HTTP retourné, comme suit :
- Synchroniser : Si vous spécifiez Synchroniser comme type d'appel de fonction (valeur par défaut), le service des fonctions pour OCI exécute la demande. Ensuite, une fois l'exécution réussie, le service des fonctions pour OCI émet un code de statut HTTP 200 et retourne le résultat à l'appelant, ainsi que le contrôle.
- Détaché : Si vous spécifiez Détaché comme type d'appel de fonction, le service des fonctions pour OCI exécute la demande. Ensuite, dès que le traitement commence, le service des fonctions pour OCI émet un code de statut HTTP 202 et retourne le contrôle à l'appelant. La fonction elle-même est responsable de la gestion des résultats.
Pour spécifier le type d'appel de fonction :
- Lors de l'appel d'une fonction à l'aide de la commande
fn function invoke
de l'interface de ligne de commande OCI, utilisez le paramètre--fn-invoke-type
. Par exemple :oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body "" --fn-invoke-type "detached"
- Lors de l'appel d'une fonction à partir d'une autre fonction à l'aide de l'un des trousses FDK, spécifiez le type d'appel dans l'appel de fonction. Par exemple, à l'aide de la trousse FDK Python :
resp = client.invoke_function(function_id=function_ocid, invoke_function_body=function_body, fn_invoke_type='detached')
- Lors de l'appel d'une fonction à l'aide de la commande
raw-request
de l'interface de ligne de commande OCI, incluez"fn-invoke-type"
dans le paramètre--request- headers
. Par exemple :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"}'
Utilisation de l'interface de ligne de commande Fn Project pour appeler des fonctions
Pour appeler une fonction déployée dans le service des fonctions pour OCI à l'aide de l'interface de ligne de commande Fn Project :
-
Connectez-vous à votre environnement de développement en tant que développeur de fonctions.
-
Dans une fenêtre de terminal, entrez :
fn invoke <app-name> <function-name>
où :
-
<app-name>
est le nom de l'application contenant la fonction à appeler -
<function-name>
est le nom de la fonction à appeler
Par exemple :
fn invoke helloworld-app helloworld-func
Sortie :
Hello World !
Conseil
Si vous souhaitez transmettre des arguments et des valeurs à une fonction, préfixez la commande
fn invoke
avececho -n '<argument>=<value>' |
Si la fonction attend l'argument et une valeur JSON, utilisez un format JSON valide. Par exemple :
echo -n '{"name":"John"}' | fn invoke helloworld-app helloworld-func
Sortie :
Hello John !
-
Utilisation de l'interface de ligne de commande Oracle Cloud Infrastructure pour appeler des fonctions
Si vous avez installé l'interface de ligne de commande Oracle Cloud Infrastructure, vous pouvez l'utiliser pour envoyer des demandes d'API pour appeler des fonctions. Entre autres, l'interface de ligne de commande Oracle Cloud Infrastructure simplifie l'authentification dans Oracle Cloud Infrastructure. Pour plus d'informations sur l'utilisation de l'interface de ligne de commande Oracle Cloud Infrastructure, voir Interface de ligne de commande (CLI).
Ces instructions supposent que :
- Vous avez déjà installé et configuré l'interface de ligne de commande Oracle Cloud Infrastructure.
- Vous voulez, en tant que développeur de fonctions, appeler une fonction qui est configurée pour votre environnement de développement.
Pour appeler une fonction à l'aide de l'interface de ligne de commande Oracle Cloud Infrastructure :
-
Connectez-vous à votre environnement de développement en tant que développeur de fonctions.
-
Dans une fenêtre de terminal, entrez :
oci fn function invoke --function-id <function-ocid> --file "<output-filepath>" --body "<request-parameters>"
où :
-
<function-ocid>
est l'OCID de la fonction à appeler. Pour rechercher un OCID de fonction, utilisez la commandefn inspect
pour voir la valeur de la propriétéid
de la fonction (voir Liste des fonctions). -
<output-filepath>
est le chemin et le nom d'un fichier dans lequel écrire la réponse. Pour écrire la réponse dans stdout, spécifiez--file "-"
<request-parameters>
sont des arguments et des valeurs facultatifs à transmettre à la fonction. Si la fonction attend des arguments et des valeurs dans le format JSON, utilisez un format JSON valide. Par exemple,--body '{"name":"John"}'
. Notez que vous devez inclure--body ""
dans la demande, même s'il n'y a aucun paramètre de demande à transmettre.
Par exemple :
oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body ""
Sortie :
Hello World !
oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body '{"name":"John"}'
Sortie :
Hello John !
-
Utilisation de trousses SDK pour appeler des fonctions
Si vous écrivez un programme pour appeler une fonction dans une langue pour laquelle une trousse SDK Oracle Cloud Infrastructure existe, nous vous recommandons d'utiliser cette trousse SDK pour envoyer des demandes d'API pour appeler la fonction. Entre autres, la trousse SDK simplifie l'authentification Oracle Cloud Infrastructure.
Notez que lorsque vous utilisez une trousse SDK pour appeler une fonction, vous ne spécifiez pas le point d'extrémité d'appel complet que vous spécifiez lors de l'utilisation de la commande raw-request
de l'interface de ligne de commande Oracle Cloud Infrastructure (voir Obtention du point d'extrémité d'appel d'une fonction). À la place, spécifiez uniquement la première partie du point d'extrémité d'appel de la fonction. Par exemple, lors de l'utilisation d'une trousse SDK, ne spécifiez pas le point d'extrémité d'appel de la fonction comme https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke
. À la place, spécifiez le point d'extrémité d'appel de la fonction comme https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com
.
Pour plus d'informations sur l'utilisation de l'API et sur les demandes de signature, voir la documentation de l'API REST et Données d'identification de sécurité. Pour plus d'informations sur les trousses SDK, voir Trousses SDK et interface de ligne de commande.
Utilisez l'opération d'API InvokeFunction pour appeler des fonctions.
Obtention du point d'extrémité d'appel d'une fonction
Lorsque vous appelez une fonction à l'aide de la commande raw-request
de l'interface de ligne de commande Oracle Cloud Infrastructure, vous devez spécifier le point d'extrémité d'appel de la fonction.
Pour obtenir le point d'extrémité d'appel d'une fonction :
-
Connectez-vous à votre environnement de développement en tant que développeur de fonctions.
-
Dans une fenêtre de terminal, entrez :
fn inspect function <app-name> <function-name>
où :
-
<app-name>
est le nom de l'application contenant la fonction pour laquelle vous voulez obtenir le point d'extrémité d'appel -
<function-name>
est le nom de la fonction pour laquelle vous voulez obtenir le point d'extrémité d'appel
Par exemple :
fn inspect function helloworld-app helloworld-func
Sortie :
{ "annotations": { "fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke", ... }
Le point d'extrémité d'appel de la fonction est la valeur de
"fnproject.io/fn/invokeEndpoint"
. Par exemple,"https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke"
(abrégé à des fins de lisibilité). -
Envoi d'une demande signée au point d'extrémité d'appel d'une fonction (à l'aide de la commande raw-request de l'interface de ligne de commande Oracle Cloud Infrastructure)
Si vous avez installé l'interface de ligne de commande Oracle Cloud Infrastructure, vous pouvez l'utiliser pour envoyer des demandes d'API pour appeler des fonctions. Entre autres, l'interface de ligne de commande simplifie l'authentification Oracle Cloud Infrastructure. Pour plus d'informations sur l'utilisation de l'interface de ligne de commande Oracle Cloud Infrastructure, voir Interface de ligne de commande (CLI).
Ces instructions supposent que :
- Vous avez déjà installé et configuré l'interface de ligne de commande Oracle Cloud Infrastructure.
- Vous voulez, en tant que développeur de fonctions, appeler une fonction qui est configurée pour votre environnement de développement.
Pour appeler une fonction déployée dans le service des fonctions pour OCI en envoyant une demande signée au point d'extrémité d'appel de la fonction à l'aide de l'interface de ligne de commande Oracle Cloud Infrastructure raw-request
:
-
Connectez-vous à votre environnement de développement en tant que développeur de fonctions.
-
Obtenez le point d'extrémité d'appel de la fonction (voir Obtention du point d'extrémité d'appel d'une fonction).
Par exemple,
"fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke"
(abrégé à des fins de lisibilité). -
Pour utiliser la commande
raw-request
de l'interface de ligne de commande Oracle Cloud Infrastructure pour appeler la fonction en envoyant une demande POST signée au point d'extrémité d'appel de la fonction, entrez :oci raw-request --http-method POST --target-uri <invoke-endpoint> --request-body "<request-parameters>"
où :
<invoke-endpoint>
est le point d'extrémité que vous avez obtenu à l'étape précédente.<request-parameters>
sont des arguments et des valeurs facultatifs à transmettre à la fonction. Si la fonction attend des arguments et des valeurs dans le format JSON, utilisez un format JSON valide. Notez que vous devez inclure--request-body ""
dans la demande, même s'il n'y a aucun paramètre de demande à transmettre.
Par exemple :
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 ""
Sortie :
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"}'
Sortie :
Hello John !
- Si une phrase secrète a été fournie pour chiffrer la clé de signature d'API, entrez la phrase secrète à l'invite.