Dépannage des fonctions externes pour AWS

Cette rubrique fournit des informations sur le dépannage des fonctions externes pour AWS.

Dans ce chapitre :

Problèmes relatifs à l’exécution indépendamment de la plate-forme

Les valeurs de retour du type de données ne correspondent pas aux valeurs de retour attendues

Lorsque vous transmettez des arguments vers ou depuis une fonction externe, assurez-vous que les types de données sont appropriés. Si la valeur envoyée ne peut pas correspondre au type de données reçues, la valeur peut être tronquée ou corrompue d’une autre manière.

Pour plus de détails, voir Assurez-vous que les arguments de la fonction externe correspondent aux arguments analysés par le service distant.

Erreur : les numéros de ligne ne sont pas dans l’ordre

Causes possibles

Les numéros de ligne que vous renvoyez dans chaque lot doivent être des entiers ascendants monotones à partir de 0. Les numéros des lignes d’entrée doivent également suivre cette règle, et chaque ligne de sortie doit correspondre à la ligne d’entrée correspondante. Par exemple, la sortie de la ligne de sortie 0 doit correspondre à l’entrée de la ligne d’entrée 0.

Solutions possibles

Assurez-vous que les numéros de ligne que vous renvoyez sont identiques à ceux que vous avez reçus et que chaque valeur de sortie utilise le numéro de ligne de l’entrée correspondante. Si cela ne fonctionne pas, il se peut que les numéros des lignes saisies ne soient pas corrects ou que vous n’ayez pas renvoyé les lignes dans le bon ordre.

Assurez-vous ensuite que les numéros de ligne de sortie commencent par 0, augmentent de 1 et sont en ordre.

Pour plus d’informations sur les formats d’entrée et de sortie des données, voir Formats des données d’entrée et de sortie des services à distance.

Erreur : « Error parsing JSON: Invalid response »

Causes possibles

La cause la plus probable est que le JSON renvoyé par le service distant (par exemple fonction AWS Lambda) n’est pas construit correctement.

Solutions possibles

Assurez-vous que la fonction externe renvoie un tableau de tableaux, avec un tableau interne renvoyé pour chaque ligne d’entrée reçue. Consultez la description du format de sortie sur Format de données reçu par Snowflake.

Erreur : Le format de la valeur retournée n’est pas JSON

Causes possibles

Votre valeur de retour inclut des guillemets doubles à l’intérieur de la valeur.

Solutions possibles

Bien que les chaînes JSON soient délimitées par des guillemets doubles, la chaîne elle-même ne doit pas commencer et se terminer par un guillemet dans la plupart des cas. Si les guillemets doubles intégrés sont incorrects, supprimez-les.

Erreur : la fonction a reçu le mauvais nombre de lignes

Causes possibles

Le service distant a tenté de renvoyer plus ou moins de lignes qu’il en a reçues. Même si la fonction est nominalement scalaire, elle peut recevoir plusieurs lignes dans le champ body du paramètre event et doit renvoyer exactement autant de lignes qu’elle a reçues.

Solution(s) possible(s)

Assurez-vous que le service distant renvoie une ligne pour chaque ligne qu’il reçoit.

Problèmes spécifiques à AWS

Une API Gateway renvoie une erreur 502 lorsque le point de terminaison utilise l’intégration du proxy Lambda

Cause possible

La fonction Lambda peut avoir :

  • Expiré.

  • Renvoyé une exception.

  • Echoué d’une autre manière.

Solution possible

Si les journaux Lambda ou API Gateway sont à votre disposition, examinez-les.

Si le code source de la fonction Lambda est à votre disposition, analysez et déboguez le code dans la fonction Lambda. Dans certains cas, vous pourrez peut-être exécuter une copie de ce code dans un contexte plus simple (en dehors de AWS) pour faciliter le débogage.

Vérifiez que les données envoyées à la fonction Lambda sont au format attendu par la fonction Lambda. Vous voudrez peut-être essayer d’envoyer un ensemble de données plus petit et plus simple pour voir si cela réussit.

Vérifiez que vous n’envoyez pas trop de données à la fois.

Dans certains cas, l’augmentation du délai d’attente peut résoudre le problème, en particulier si la fonction Lambda nécessite beaucoup de ressources CPU, ou si la fonction Lambda elle-même appelle d’autres services distants et nécessite donc plus de temps.

Impossible de lire le corps des requêtes au sein de la méthode HTTP POST dans la fonction Amazon AWS Lambda

Cause possible

Vous n’avez peut-être pas activé l’intégration du proxy Lambda.

Solution possible

Activation de l’intégration des proxy Lambda.

Pour plus de détails, voir les étapes correspondantes dans Créer le point de terminaison API Gateway.

Erreur en supposant AWS_ROLE

Le texte intégral du message est le suivant :

SQL execution error: Error assuming AWS_ROLE. Please verify the role and externalId are
configured correctly in your AWS policy.
Copy
Cause possible
  • Dans la stratégie de relation de confiance AWS pour votre rôle, l’ARN AWS est incorrect. Les causes possibles de cela comprennent :

    • Vous ne l’avez pas défini.

    • Vous l’avez défini, mais vous avez utilisé l’ARN du rôle AWS (incorrect) au lieu de l’ARN utilisateur, que vous pouvez voir à partir de la commande DESCRIBE INTEGRATION dans Snowflake. Veillez à utiliser la valeur du champ API_AWS_IAM_USER_ARN de la feuille de calcul plutôt que la valeur du champ « API_AWS_ROLE_ARN ».

  • Dans votre stratégie de relation de confiance AWS, le std:ExternalId est incorrect. Les causes possibles de cela comprennent :

    • Vous ne l’avez pas défini.

    • Vous avez recréé l’objet d’intégration API. La recréation de l’objet API modifie son ID externe.

Erreur : 403 “{« Message »: »User: <ARN> is not authorized to perform: execute-api:Invoke »}”

Le texte intégral du message est le suivant :

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: <ARN> is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
Copy
Cause possible
  • La politique des ressources API Gateway a :

    • Le mauvais ARN de rôle IAM.

    • Le mauvais rôle assumé.

    • Le mauvais ARN de requête de méthode.

  • Le rôle IAM n’est pas assorti de la bonne politique.

Solution possible
  • Assurez-vous que vous avez bien suivi le modèle de politique des ressources figurant dans Protégez votre point de terminaison Amazon API Gateway. Plus précisément, vérifiez que votre politique en matière de ressources :

    • A remplacé <12-digit number> par la valeur du champ de la feuille de calcul intitulé Your AWS account ID.

    • A remplacé <external_function_role> par valeur du champ New IAM Role Name de la feuille de calcul.

    • A remplacé method_request_ARN dans le champ Resource avec la valeur dans le champ Method Request ARN de la feuille de calcul. Assurez-vous qu’il n’y a pas de barre oblique à la fin.

  • Si vous devez vous assurer que le rôle IAM est associé à la bonne politique d’autorisations, vous pouvez trouver la liste de la politique d’autorisations du rôle en suivant les étapes ci-dessous :

    1. Dans AWS, allez dans Gestion des identités et des accès (IAM) et sélectionnez le rôle.

    2. Affichez le Summary pour le rôle.

    3. Cliquez sur l’onglet Permissions .

    4. Vérifiez que la politique requise figure dans la liste Permissions policies.

  • Assurez-vous que le point de terminaison appelé est la ressource et non la zone de préparation, qui est configurée sur passerelle API Gateway.

Erreur : 403 “{« Message »: »User: anonymous is not authorized to perform: execute-api:Invoke »}”

Le texte intégral du message est le suivant :

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
Copy
Cause possible

Une cause possible est que lorsque vous configuriez l’autorisation pour l’API Gateway, vous n’avez peut-être pas précisé que Method Request nécessite l’autorisation AWS_IAM pour la ressource.

Solution possible

Si vous n’avez pas suivi les instructions de sécurité Amazon API Gateway, alors veuillez les suivre dès à présent pour spécifier l’autorisation AWS_IAM.

Error parsing JSON response … Error: top-level JSON object must contain « data » JSON array element

Le texte intégral du message est le suivant :

Error parsing JSON response for external function ... Error: top-level JSON object must contain "data" JSON array element
Copy
Cause possible
  • Vous n’avez peut-être pas spécifié l’intégration par proxy Lambda pour la commande API dans votre ressource POST Gateway.

Solution possible

La demande a échoué pour la fonction externe EXT_FUNC avec une erreur de service à distance : 403 “{« message »: »Forbidden »}”;

Cause possible

Le service proxy a besoin d’une clé API, généralement pour l’authentification ou la facturation. La clé API est manquante ou incorrecte.

Solution possible

Utilisez la commande ALTER API INTEGRATION pour spécifier la bonne clé API.

La création de la pile CloudFormation a échoué

Cette erreur peut se produire si vous utilisez un modèle AWS CloudFormation pour créer une fonction externe.

Cause possible

Vous n’avez pas les autorisations requises pour créer les ressources spécifiées dans le modèle CloudFormation .

Solution possible

Vérifiez l’onglet Events de la pile pour voir les détails de l’erreur.

Consultez également la page AWS de dépannage des fonctions externes pour des conseils supplémentaires de dépannage.