Déboguer une extension

Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.
info

Vous pouvez déboguer une extension à l'aide des messages visibles à deux endroits : l'outil Trace et les journaux d'extension. Lorsqu'une extension ne fonctionne pas, l'identification du problème peut parfois nécessiter des informations provenant des deux emplacements.

  • L'outil Trace d'Apigee Edge vous permet de tester et de modifier de manière itérative le code du proxy d'API au fur et à mesure de son développement. Les messages de trace incluent les erreurs provenant du code de votre proxy d'API, y compris la configuration du proxy d'API et de la stratégie.

    Les erreurs liées aux extensions qui apparaissent dans l'outil Trace ne contiennent généralement pas beaucoup de détails, sauf pour indiquer quel appel d'extension a échoué, ainsi qu'un code d'erreur HTTP. Si vous ne voyez rien d'utile ici, le meilleur endroit où chercher est le journal de l'extension que vous utilisez.

  • Les extensions génèrent des entrées de journal au moment de l'exécution. (Les journaux d'extension ne sont disponibles que pour les administrateurs d'organisation.)

    Ces journaux incluent les entrées renvoyées par la ressource externe avec laquelle l'extension est configurée pour interagir. Par exemple, si les identifiants de ressource externe sont mal configurés dans l'extension, l'erreur est susceptible d'apparaître ici.

    Les journaux incluent également des entrées provenant du code d'extension interne. Lorsque vous parcourez les journaux, gardez à l'esprit que certaines entrées ne sont pas pertinentes pour l'erreur que vous corrigez. Les entrées de journal liées aux extensions commencent généralement par le mot details, comme dans l'entrée de journal suivante de l'extension Cloud Pub/Sub :

    details: 'Invalid resource name given (name=projects/example-test-123456/topic/extension-example). Refer to https://cloud.google.com/pubsub/docs/admin#resource_names for more information.'
    

Types d'erreurs et causes

Le traitement des requêtes d'extension passe d'une règle ExtensionCallout dans un proxy d'API, via l'extension, à la ressource externe, puis revient. Une erreur peut donc se produire à n'importe lequel de ces emplacements.

Les erreurs que vous voyez peuvent appartenir aux catégories suivantes.

Erreurs dans la configuration de l'extension

Il s'agit de la configuration effectuée par un administrateur d'organisation lors de l'ajout d'une extension à un environnement.

Par exemple, si vous configurez l'extension Cloud Logging avec un ID de projet Google Cloud incorrect, Google Cloud Logging renverra une erreur à l'extension. Les détails de ces erreurs se trouvent généralement dans le journal de l'extension.

Preuve dans l'outil Trace

Dans l'éditeur de proxy, ces erreurs s'affichent généralement comme une erreur de niveau 4xx ou 5xx. Toutefois, l'éditeur de proxy n'affiche aucun détail sur la cause de l'erreur, sauf pour indiquer que l'extension a renvoyé une erreur.

{
  "fault": {
    "faultstring":"Execution of ConnectorCallout Logging-Extension failed. Reason: Connector returned error statuscode=500",
    "detail": {
      "errorcode":"steps.connectorcallout.ExecutionFailed"
    }
  }
}

Preuve dans les journaux d'extension

Si des détails sont disponibles sur ce type d'erreur, ils s'affichent dans les entrées de journal de l'extension. Le message d'erreur suivant, renvoyé par le service Cloud Pub/Sub, résulte d'un ID de projet mal formé.

details: 'Project does not exist: example-test-12345'

Erreurs dans la configuration de la règle ExtensionCallout

Ces erreurs se produisent lorsque la règle ExtensionCallout est mal configurée, soit en raison d'une erreur de syntaxe de configuration de la règle, soit en raison de clés ou de valeurs de configuration incorrectes. Ces erreurs se présentent sous deux formes, selon la configuration de la règle :

  • Valeurs incorrectes évaluées par la ressource externe

    Cela peut se produire lorsque l'erreur de configuration semblait valide pour l'extension, mais qu'elle ne l'était pas pour la ressource externe. Par exemple, si l'extension transmet un ID de la base de données incorrect à Cloud Spanner, Cloud Spanner renverra une erreur qui sera consignée dans le journal de l'extension :

    details: 'Database not found: projects/example-test-123456/instances/spanner-extension-example-db/databases/my-business-d'
    

    Cela peut également se produire en cas de configuration JSON incorrecte dans l'élément <Input> de la règle. Pour certaines extensions, une partie du JSON est traitée par l'extension et une partie est transmise à la ressource. Par exemple, la configuration JSON de l'extension Cloud Logging inclut un objet metadata dont le contenu est transmis à Cloud Logging. Des noms de clés incorrects (par exemple, typ au lieu de type) peuvent renvoyer des erreurs de la ressource externe qui apparaissent sous forme d'entrées dans le journal de l'extension :

    details: 'Resource type cannot be empty'
    
  • Valeurs incorrectes évaluées par l'extension

    Ces erreurs incluent les erreurs de syntaxe dans les parties évaluées par la règle de l'élément <Input>, les fautes d'orthographe dans le nom de l'action dans l'élément <Action>, etc. Ces erreurs apparaissent généralement dans l'outil Trace, mais pas dans les journaux d'extension.

Preuve dans l'outil Trace

Dans l'éditeur de proxy, ces erreurs s'affichent généralement comme une erreur de niveau 4xx ou 5xx. Toutefois, l'éditeur de proxy n'affiche aucun détail sur la cause de l'erreur, sauf pour indiquer que l'extension a renvoyé une erreur. L' erreur suivante s'affiche dans l'outil Trace lorsque le nom de l'action est mal orthographié dans l' extension Cloud Firestore.

{
  "fault":{
    "faultstring":"Execution of ConnectorCallout Add-User-Data failed. Reason: Connector returned error statuscode=404","detail":
    {
      "errorcode":"steps.connectorcallout.ExecutionFailed"
    }
  }
}

Preuve dans les journaux d'extension

Lorsque la configuration de la règle entraîne une erreur de traitement dans la ressource externe, l'erreur apparaît généralement dans le journal.

Il s'agit d'une erreur dans laquelle la requête adressée à la ressource externe n'a pas abouti pour des raisons qui ne sont pas liées à l'extension.

Par exemple, imaginez que vous utilisez l'extension Cloud Spanner pour ajouter une ligne à la base de données, mais que la valeur de la clé primaire de la ligne est déjà utilisée dans une ligne existante. Cloud Spanner renverra une erreur à l'extension, qui l'ajoutera au journal de l'extension.

Preuve dans l'outil Trace

Dans l'éditeur de proxy, ces erreurs s'affichent généralement comme une erreur de niveau 4xx- ou 5xx. Toutefois, l'éditeur de proxy n'affiche aucun détail sur la cause de l'erreur, sauf pour indiquer que l'extension a renvoyé une erreur.

{
  "fault":{
    "faultstring":"Execution of ConnectorCallout Add-User-Data failed. Reason: Connector returned error statuscode=404",
    "detail":{
      "errorcode":"steps.connectorcallout.ExecutionFailed"
    }
  }
}

Preuve dans les journaux d'extension

Le journal comporte généralement des entrées avec des messages provenant de la ressource externe elle-même. Le message de journal suivant de Cloud Spanner décrit l'erreur de valeur de clé primaire existante.

details: 'Row [jonesy42] in table user already exists'