Solución de problemas con las reglas de enrutamiento - Amazon API Gateway

Solución de problemas con las reglas de enrutamiento

La siguiente guía para la solución de problemas puede ayudarlo a resolver problemas con las reglas de enrutamiento.

No puedo saber cómo API Gateway ha enviado tráfico a mis API

Puede utilizar los registros de acceso de la etapa de API de REST para registrar y solucionar problemas de las reglas de enrutamiento. Puede ver el ID de la regla de enrutamiento que API Gateway utilizó para enviar tráfico a la API mediante la variable $context.customDomain.routingRuleIdMatched. Para ver la asignación de API que API Gateway utilizó para enviar tráfico a la API, utilice la variable $context.customDomain.basePathMatched.

Para registrar las reglas de enrutamiento, debe configurar un ARN de rol de CloudWatch Logs apropiado para la cuenta y crear un grupo de registro.

El siguiente ejemplo de grupo de registro de acceso puede recuperar la información pertinente para la solución de problemas de reglas de enrutamiento y asignaciones de API. API Gateway solo rellena la variable de contexto para el mecanismo de enrutamiento que utilizó; de lo contrario, la variable de contexto es -.

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

También le recomendamos que confirme el modo de enrutamiento para el nombre de dominio personalizado. Para obtener más información, consulte Establecimiento del modo de enrutamiento para el nombre de dominio personalizado.

No puedo habilitar las reglas de enrutamiento en mi nombre de dominio personalizado

Es posible que reciba el siguiente error de 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.

Recibirá este error si tiene o tenía una política de IAM que deniega el acceso a BasePathMapping o ApiMapping. Cuando habilite reglas de enrutamiento para un nombre de dominio personalizado, aunque la política seguirá denegando el acceso a BasePathMapping o ApiMapping, la misma política puede utilizarse para acceder a RoutingRule. Esto podría permitir a un usuario cambiar el comportamiento de enrutamiento del nombre de dominio personalizado.

Por ejemplo, si tuviera una política como la siguiente:

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

Cuando habilite las reglas de enrutamiento para example.com, esta política seguirá denegando el acceso a la creación de ApiMapping pero no denegará el acceso a la creación de RoutingRule.

Le recomendamos que audite las políticas de IAM de la cuenta. La siguiente política de ejemplo denegará el acceso a la creación de ApiMapping, BasePathMapping y 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/*" ] }

Una vez que haya confirmado que todas las políticas se han actualizado, puede actualizar la configuración de cuenta de la API para habilitar las reglas de enrutamiento para una región.

Utilice el siguiente comando update-account para actualizar la configuración de cuenta de la API para una región:

aws apigateway update-account --patch-operations 'op=remove,path=/features,value=BlockedForRoutingRules' --region us-west-2

Después de actualizar la configuración de cuenta de la API, puede cambiar el modo de enrutamiento del nombre de dominio personalizado. También puede seguir utilizando las políticas de IAM para denegar el acceso a RoutingRules, ApiMapping o BasePathMapping.