Risoluzione dei problemi relativi alle regole di routing - Amazon API Gateway

Risoluzione dei problemi relativi alle regole di routing

La seguente guida può aiutare a risolvere i problemi relativi alle regole di routing.

Impossibile determinare in che modo Gateway API invia il traffico alle API

È possibile utilizzare i log di accesso per la fase della REST API per registrare e risolvere i problemi delle regole di routing. È possibile visualizzare l’ID della regola di routing utilizzato da Gateway API per inviare il traffico all’API usando la variabile $context.customDomain.routingRuleIdMatched. Per visualizzare la mappatura API utilizzata da Gateway API per inviare il traffico all’API, si usa la variabile $context.customDomain.basePathMatched.

Per registrare nei log le regole di routing, è necessario configurare un ARN del ruolo CloudWatch Logs appropriato per l’account e creare un gruppo di log.

Il gruppo di log di accesso di esempio seguente può recuperare le informazioni pertinenti per la risoluzione dei problemi relativi alle regole di routing e alle mappature API. Gateway API popola solo la variabile di contesto per il meccanismo di routing utilizzato, in caso contrario la variabile di contesto è -.

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

È consigliabile inoltre verificare la modalità di routing per il nome di dominio personalizzato. Per ulteriori informazioni, consulta Impostazione della modalità di routing per il nome di dominio personalizzato.

Impossibile abilitare le regole di routing sul nome di dominio personalizzato

È possibile ricevere da Gateway API il seguente errore:

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.

Si riceve questo errore se una policy IAM nega l’accesso a BasePathMapping o ApiMapping. Quando si abilitano le regole di routing per un nome di dominio personalizzato, anche se la policy continua a negare l’accesso a BasePathMapping o ApiMapping, è possibile utilizzare la stessa policy per accedere a RoutingRule. Ciò consente a un utente di modificare il comportamento di routing del nome di dominio personalizzato.

Ad esempio, se si dispone di una policy simile alla seguente:

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

Quando si abilitano le regole di routing per example.com, questa policy continua a negare l’accesso alla creazione di ApiMapping ma non nega l’accesso alla creazione di RoutingRule.

È consigliabile controllare le policy IAM dell’account. La policy di esempio seguente nega l’accesso alla creazione di ApiMapping, BasePathMapping e 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/*" ] }

Dopo aver verificato che tutte le policy sono state aggiornate, è possibile aggiornare le impostazioni dell’API a livello di account per abilitare le regole di routing per una Regione.

Utilizza il seguente comando update-account per aggiornare le impostazioni dell’API a livello di account per una Regione:

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

Dopo aver aggiornato le impostazioni dell’API a livello di account, è possibile modificare la modalità di routing del nome di dominio personalizzato. È anche possibile continuare a utilizzare le policy IAM per negare l’accesso a RoutingRules, ApiMapping o BasePathMapping.