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 -
.
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.