Fehlerbehebung bei Problemen mit Routing-Regeln - Amazon API Gateway

Fehlerbehebung bei Problemen mit Routing-Regeln

Die folgende Anleitung zur Fehlerbehebung kann helfen, Probleme mit Ihren Routing-Regeln zu beheben.

Ich kann nicht sagen, wie API Gateway Datenverkehr an meine APIs sendet

Sie können Zugriffsprotokolle für die Stufe Ihrer REST-API verwenden, um Ihre Routing-Regeln zu protokollieren und Fehler zu beheben. Mithilfe der Variablen $context.customDomain.routingRuleIdMatched können Sie die Routing-Regel-ID anzeigen, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden. Um die API-Zuweisung anzuzeigen, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden, verwenden Sie die Variable $context.customDomain.basePathMatched.

Um Ihre Routing-Regeln zu protokollieren, müssen Sie einen geeigneten CloudWatch Logs-Rollen-ARN für Ihr Konto konfigurieren und eine Protokollgruppe erstellen.

Die folgende Beispielprotokollgruppe für Zugriffsprotokolle kann die relevanten Informationen zum Beheben von Problemen mit Routing-Regeln und API-Zuweisungen abrufen. API Gateway füllt die Kontextvariable nur für den Routing-Mechanismus aus, den es tatsächlich verwendet hat. Andernfalls ist die Kontextvariable -.

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

Wir empfehlen außerdem, den Routing-Modus für Ihren benutzerdefinierten Domainnamen zu bestätigen. Weitere Informationen finden Sie unter Festlegen des Routing-Modus für Ihren benutzerdefinierten Domainnamen.

Ich kann keine Routing-Regeln für meinen benutzerdefinierten Domainnamen aktivieren

Möglicherweise erhalten Sie den folgenden Fehler von 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.

Diesen Fehler erhalten Sie, wenn Sie eine IAM-Richtlinie haben oder hatten, die den Zugriff auf BasePathMapping oder ApiMapping verweigert. Wenn Sie Routing-Regeln für einen benutzerdefinierten Domainnamen aktivieren, wird der Zugriff auf BasePathMapping oder ApiMapping durch Ihre Richtlinie weiterhin verweigert. Dieselbe Richtlinie kann jedoch verwendet werden, um auf RoutingRule zuzugreifen. Dadurch könnte ein Benutzer das Routing-Verhalten Ihres benutzerdefinierten Domainnamens ändern.

Wenn Sie beispielsweise eine Richtlinie wie die folgende hatten:

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

Wenn Sie Routing-Regeln für example.com aktivieren, wird durch diese Richtlinie weiterhin der Zugriff auf das Erstellen einer ApiMapping verweigert, aber der Zugriff auf das Erstellen einer RoutingRule wird nicht verweigert.

Wir empfehlen, die IAM-Richtlinien in Ihrem Konto zu überprüfen. Die folgende Beispielrichtlinie verweigert den Zugriff auf das Erstellen von ApiMapping, BasePathMapping undRoutingRule:

{ "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/*" ] }

Nachdem Sie bestätigt haben, dass alle Ihre Richtlinien aktualisiert wurden, können Sie die kontoweiten Einstellungen Ihrer API aktualisieren, um Routing-Regeln für eine Region zu aktivieren.

Verwenden Sie dazu den folgenden update-account-Befehl, um die Einstellungen für die kontoweiten API-Einstellungen für eine Region zu aktualisieren:

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

Nachdem Sie die kontoweiten Einstellungen Ihrer API aktualisiert haben, können Sie den Routing-Modus Ihres benutzerdefinierten Domainnamens ändern. Sie können außerdem weiterhin IAM-Richtlinien verwenden, um den Zugriff auf RoutingRules, ApiMapping oder BasePathMapping zu verweigern.