Solucionar problemas em regras de roteamento - Amazon API Gateway

Solucionar problemas em regras de roteamento

As diretrizes de solução de problemas a seguir podem ajudar a resolver problemas em suas regras de roteamento.

Não sei como o API Gateway enviou tráfego às minhas APIs

Você pode usar logs de acesso para o estágio da API REST a fim de registrar em log e solucionar problemas em suas regras de roteamento. Você pode visualizar o ID da regra de roteamento que o API Gateway usou para enviar tráfego à sua API usando a variável $context.customDomain.routingRuleIdMatched. Para visualizar o mapeamento de API que o API Gateway usou para enviar tráfego à sua API, use a variável $context.customDomain.basePathMatched.

Para registrar suas regras de roteamento em log, você precisa configurar um ARN de função do CloudWatch Logs apropriado para sua conta e criar um grupo de logs.

O exemplo de grupo de logs de acesso a seguir pode recuperar as informações relevantes para solucionar problemas em regras de roteamento e mapeamentos de API. O API Gateway preenche somente a variável de contexto do mecanismo de roteamento que ele usa; do contrário, a variável de contexto é -.

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

Também recomendamos que você confirme o modo de roteamento do nome de domínio personalizado. Para obter mais informações, consulte Definir o modo de roteamento para o nome de domínio personalizado.

Não consigo habilitar as regras de roteamento no meu nome de domínio personalizado

Você pode receber o seguinte erro do 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.

Você receberá esse erro se tiver ou tenha tido uma política do IAM que nega acesso ao BasePathMapping ou ao ApiMapping. Ao habilitar as regras de roteamento para um nome de domínio personalizado, embora sua política continue negando acesso a BasePathMapping ou a ApiMapping, a mesma política pode ser usada para acessar a RoutingRule. Isso pode permitir que um usuário altere o comportamento de roteamento do seu nome de domínio personalizado.

Por exemplo, se você teve uma política como a seguinte:

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

Ao habilitar as regras de roteamento para example.com, essa política continuará negando o acesso à criação de um ApiMapping, mas não negará o acesso à criação de uma RoutingRule.

Recomendamos que você audite as políticas do IAM em sua conta. O seguinte exemplo de política negará acesso à criação de ApiMapping, BasePathMappinge 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/*" ] }

Depois de confirmar que todas as políticas foram atualizadas, você pode atualizar as configurações da API no nível da conta para habilitar as regras de roteamento para uma região.

Use o comando update-account indicado abaixo para atualizar as configurações em nível de conta da API para uma região:

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

Depois de atualizar as configurações em nível de conta da API, você pode alterar o modo de roteamento do nome de domínio personalizado. Você também pode continuar usando as políticas do IAM para negar acesso a RoutingRules, ApiMapping ou BasePathMapping.