Résolution des problèmes liés aux règles de routage - Amazon API Gateway

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Résolution des problèmes liés aux règles de routage

Les conseils de dépannage suivants peuvent vous aider à résoudre les problèmes liés à vos règles de routage.

Je ne peux pas dire comment API Gateway a envoyé du trafic à mon APIs

Vous pouvez utiliser les journaux d'accès pour votre stage d'API REST afin de consigner et de résoudre les problèmes liés à vos règles de routage. Vous pouvez consulter l'ID de règle de routage utilisé par API Gateway pour envoyer du trafic vers votre API à l'aide de la $context.customDomain.routingRuleIdMatched variable. Pour afficher le mappage d'API utilisé par API Gateway pour envoyer du trafic vers votre API, utilisez la $context.customDomain.basePathMatched variable.

Pour enregistrer vos règles de routage, vous devez configurer un ARN de rôle CloudWatch Logs approprié pour votre compte et créer un groupe de journaux.

L'exemple de groupe de journaux d'accès suivant peut récupérer les informations pertinentes pour résoudre les problèmes liés aux règles de routage et aux mappages d'API. API Gateway renseigne uniquement la variable de contexte correspondant au mécanisme de routage utilisé, sinon c'est la variable de contexte qui l'est-.

CLF
$context.path $context.customDomain.routingRuleIdMatched $context.customDomain.basePathMatched $context.requestId $context.extendedRequestId
JSON
{"requestPath": "$context.path", "routingRuleId" : "$context.customDomain.routingRuleIdMatched", "API mapping" : "$context.customDomain.basePathMatched", "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId"}
XML
<request id="$context.requestId"> <requestPath>$context.path</requestPath> <ruleId>$context.customDomain.routingRuleIdMatched</ruleId> <ApiMapping>$context.customDomain.basePathMatched</ApiMapping> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
CSV
$context.path,$context.customDomain.routingRuleIdMatched,$context.customDomain.basePathMatched,$context.requestId,$context.extendedRequestId

Nous vous recommandons également de confirmer le mode de routage de votre nom de domaine personnalisé. Pour de plus amples informations, veuillez consulter Définissez le mode de routage pour votre nom de domaine personnalisé.

Je ne parviens pas à activer les règles de routage sur mon nom de domaine personnalisé

L'erreur suivante peut s'afficher de la part d'API Gateway :

Your account doesn’t have permission to use RoutingRules. This might be caused by an IAM policy in your account with a deny statement on BasePathMapping or ApiMapping. To grant permission for this account to use RoutingRules, use the UpdateAccount API. This will impact any existing IAM policies that deny access to BasePathMapping or ApiMapping. See API Gateway documentation for further details.

Vous recevrez cette erreur si vous avez ou avez eu une politique IAM qui refuse l'accès à BasePathMappingou ApiMapping. Lorsque vous activez les règles de routage pour un nom de domaine personnalisé, bien que votre politique continue de refuser l'accès BasePathMapping ou ApiMapping que la même politique puisse être utilisée pour y accéderRoutingRule. Cela peut permettre à un utilisateur de modifier le comportement de routage de votre nom de domaine personnalisé.

Par exemple, si vous aviez une politique comme celle-ci :

{ "Sid": "DenyCreatingApiMappings", "Effect": "Deny", "Action": "apigateway:POST", "Resource": [ "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings" ] }

Lorsque vous activez les règles de routage pourexample.com, cette politique continue de refuser l'accès à la création d'un ApiMapping mais ne refuse pas l'accès à la création d'unRoutingRule.

Nous vous recommandons d'auditer les politiques IAM de votre compte. L'exemple de politique suivant refusera l'accès à la création de ApiMappingBasePathMapping, et RoutingRule :

{ "Sid": "DenyCreatingBasePathMappingsApiMappings", "Effect": "Deny", "Action": "apigateway:POST", "Resource": [ "arn:aws:apigateway:us-west-2::/domainnames/example.com/basepathmappings", "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings" ] }, { "Sid": "DenyCreatingRoutingRules", "Effect": "Deny", "Action": "apigateway:CreateRoutingRule", "Resource": [ "arn:aws:apigateway:us-west-2:111122223333:/domainnames/example.com/routingrules/*" ] }

Après avoir confirmé que toutes vos politiques ont été mises à jour, vous pouvez mettre à jour les paramètres au niveau du compte de votre API afin d'activer les règles de routage pour une région.

Utilisez la commande update-account suivante pour mettre à jour les paramètres au niveau du compte de votre API :

aws update-account --patch-operations 'op=remove,path=/features,value=BlockedForRoutingRules'

Après avoir mis à jour les paramètres au niveau du compte de votre API, vous pouvez modifier le mode de routage de votre nom de domaine personnalisé. Vous pouvez également continuer à utiliser les politiques IAM pour refuser l'accès àRoutingRules, ApiMapping ouBasePathMapping.