

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Senden Sie Traffic APIs über Ihren benutzerdefinierten Domainnamen in API Gateway an Sie
<a name="rest-api-routing-mode"></a>

Wenn Sie den Routing-Modus für Ihren benutzerdefinierten Domainnamen konfigurieren, legen Sie fest, wie eingehender Datenverkehr an Ihren weitergeleitet wird APIs. Sie senden Traffic APIs mithilfe von Routing-Regeln, API-Zuordnungen oder Routing-Regeln und API-Zuordnungen an Sie. Im folgenden Abschnitt wird erläutert, wann Sie Routing-Regeln verwenden sollten, wann API-Zuweisungen sinnvoll sind und wie Sie den Routing-Modus für Ihren benutzerdefinierten Domainnamen festlegen.

## Wann ist die Verwendung von Routing-Regeln sinnvoll?
<a name="when-to-use-routing-rules"></a>

Wenn Sie Routing-Regeln verwenden, leiten Sie eingehende Anfragen, die bestimmte Bedingungen erfüllen, an bestimmte REST-Phasen weiter. APIs Beispielsweise kann eine Regel eine Anfrage an die `production`-Stufe Ihrer `users` REST-API weiterleiten, wenn sie den Header `version:v1` und den Basispfad `/users` enthält. Verwenden Sie Routing-Regeln, um erweiterte dynamische Routing-Topologien zu erstellen, die Anwendungsfälle wie das A/B Testen oder die zunehmende Nutzung neuer Versionen von Ihrem APIs unterstützen.

Wir empfehlen, beim Weiterleiten von Datenverkehr zu einer REST-API Routing-Regeln für den benutzerdefinierten Domainnamen zu verwenden. Sie können API-Zuweisungen mithilfe von Routing-Regeln neu erstellen. Weitere Informationen finden Sie unter [API-Zuweisung mithilfe von Routing-Regeln neu erstellen](rest-api-routing-rules-recreate-api-mapping.md).

Für REST APIs können Sie Routing-Regeln und API-Zuordnungen auch zusammen verwenden. Wenn Sie Routing-Regeln und API-Zuweisungen gemeinsam einsetzen, wertet API Gateway immer zuerst die Routing-Regeln aus, bevor es die API-Zuweisungen berücksichtigt. Verwenden Sie Routing-Regeln und API-Zuweisungen zusammen, um aktuelle benutzerdefinierte Domainnamen zu migrieren oder um Routing-Regeln auszuprobieren.

### Überlegungen zu Routing-Regeln
<a name="considerations-for-private-preview"></a>

Die folgenden Überlegungen können sich auf die Verwendung von Routing-Regeln auswirken:
+ WebSocket oder HTTP APIs werden nicht als Ziel APIs für Routing-Regeln unterstützt.
+ Wenn Ihr benutzerdefinierter Domainname API-Zuordnungen sowohl zu REST als auch zu HTTP enthält APIs, werden Routing-Regeln nicht unterstützt.
+ Sie können eine Routing-Regel für eine private benutzerdefinierte Domain zu einer privaten REST-API erstellen. Ebenso können Sie eine Routing-Regel für eine öffentliche benutzerdefinierte Domain zu einer regionalen oder Edge-optimierten API erstellen. 
+ Sie können keine Routing-Regel für eine öffentliche benutzerdefinierte Domain zu einer privaten API erstellen. Ebenso können Sie keine Routing-Regel für eine private benutzerdefinierte Domain zu einer öffentlichen API erstellen.

## Auswahl zwischen Routing-Regeln und API-Zuweisungen
<a name="choose-between-routing-rules-and-api-mappings"></a>

Wir empfehlen, nach Möglichkeit Routing-Regeln zu verwenden. Verwenden Sie API-Zuordnungen nur, um Traffic an ein HTTP oder eine API zu senden. WebSocket 

# Festlegen des Routing-Modus für Ihren benutzerdefinierten Domainnamen
<a name="set-routing-mode"></a>

Sie können wählen, welchen Routing-Modus API Gateway verwendet, um den Datenverkehr an Ihren weiterzuleiten APIs. Weitere Informationen finden Sie unter [Senden Sie Traffic APIs über Ihren benutzerdefinierten Domainnamen in API Gateway an Sie](rest-api-routing-mode.md). In diesem Abschnitt werden Routing-Modi für benutzerdefinierte Domainnamen beschrieben. Sie müssen einen Routing-Modus für Ihren benutzerdefinierten Domainnamen festlegen, um den Datenverkehr an Ihren weiterzuleiten APIs. Folgende Routing-Modi werden unterstützt:
+ **ROUTING\$1RULE\$1THEN\$1 API\$1MAPPING** — Verwenden Sie diesen Modus, um Traffic APIs mit Routing-Regeln und API-Zuordnungen an Ihren zu senden. In diesem Modus haben alle Routing-Regeln Vorrang vor API-Zuweisungen. Ein Beispiel für diesen Modus finden Sie unter [Beispiel 2: Routing-Regeln und API-Zuweisungen](rest-api-routing-rules-examples.md#rest-api-routing-rules-examples-rule-and-mappings). 
+ **ROUTING\$1RULE\$1ONLY — Verwenden Sie diesen Modus, um nur** zu erlauben, dass Routing-Regeln Traffic an Ihren senden. APIs Wenn Ihr benutzerdefinierter Domainname diesen Modus verwendet, können Sie keine API-Zuordnung erstellen, aber Sie können den Befehl verwenden, um sie anzuzeigen. [get-api-mappings](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/get-api-mappings.html) API-Aufrufer können mit diesem Domainnamen keine API-Zuweisungen verwenden.
+ **API\$1MAPPING\$1ONLY** — Verwenden Sie diesen Modus, um nur API-Zuordnungen zuzulassen, um Traffic an Ihren zu senden. APIs Wenn Ihr benutzerdefinierter Domainname diesen Modus verwendet, können Sie keine Routing-Regel erstellen, aber Sie können den Befehl `list-routing-rules` nutzen, um sie anzuzeigen. API-Aufrufer können mit diesem Domainnamen keine Routing-Regeln verwenden.

  Dies ist der Standard-Routing-Modus für all vorhandenen Domainnamen und alle neuen Domainnamen, die Sie erstellen.

Wenn Sie einen benutzerdefinierten Domainnamen mit `apigateway` erstellen, wird `API_MAPPING_ONLY` als `BASE_PATH_MAPPING_ONLY` und `ROUTING_RULE_THEN_API_MAPPING` als `ROUTING_RULE_THEN_BASE_PATH_MAPPING` bezeichnet. Dieses Verhalten ist nur für, oder für alle vorhanden AWS CLI CloudFormation SDKs, nicht für. AWS-Managementkonsole

Das folgende Verfahren zeigt, wie Sie den Routing-Modus für einen vorhandenen benutzerdefinierten Domainnamen ändern. Wenn Sie den Routing-Modus ändern, können API-Aufrufer nicht über nicht unterstützte Routing-Modi auf Ihren Domainnamen zugreifen.

------
#### [ AWS-Managementkonsole ]

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus.

1. Wählen Sie einen benutzerdefinierten Domainnamen aus.

1. Wählen Sie unter **Domänendetails** die Option **Bearbeiten** aus.

1. **Wählen Sie für den **Routing-Modus ROUTING\$1RULE\$1THEN\$1**. API\$1MAPPING**

1. Wählen Sie **Speichern**.

Wenn Sie den Routing-Modus in `ROUTING_RULE_ONLY` oder `API_MAPPING_ONLY` ändern, werden alle erstellten API-Zuweisungen oder Routing-Regeln von der Detailseite des Domainnamens in der Konsole entfernt. Wenn Sie den Routing-Modus so ändern, dass er entweder Routing-Regeln oder API-Zuweisungen unterstützt, werden diese Ressourcen wieder angezeigt.

------
#### [ AWS CLI - apigatewayv2 ]

Mit dem folgenden [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html)Befehl wird ein Domainname aktualisiert, sodass er den Routing-Modus verwendet: `ROUTING_RULE_THEN_API_MAPPING`

```
aws apigatewayv2 update-domain-name \
  --domain-name 'api.example.com' \
  --routing-mode "ROUTING_RULE_THEN_API_MAPPING"
```

Die Ausgabe sieht wie folgt aus:

```
{
"ApiMappingSelectionExpression": "$request.basepath",
"DomainName": "api.example.com",
"DomainNameArn": "arn:aws:apigateway:us-west-2::/domainnames/api.example.com",
"DomainNameConfigurations": [
  {
      "ApiGatewayDomainName": "d-abcdefg.execute-api.us-west-2.amazonaws.com",
      "CertificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/abcdefg-123456-abcdefg",
      "DomainNameStatus": "AVAILABLE",
      "EndpointType": "REGIONAL",
      "HostedZoneId": "Z2OJLYMUO9EFXC",
      "SecurityPolicy": "TLS_1_2"
   }
 ],
"RoutingMode": "ROUTING_RULE_THEN_API_MAPPING",
"Tags": {}
}
```

------
#### [ AWS CLI - apigateway ]

Mit dem folgenden [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)Befehl wird ein privater benutzerdefinierter Domainname aktualisiert, sodass er den Routing-Modus verwendet`ROUTING_RULE_THEN_BASE_PATH_MAPPING`:

```
aws apigateway update-domain-name \
  --domain-name 'private.example.com' \
  --patch-operations "op='replace',path='/routingMode',value='ROUTING_RULE_THEN_BASE_PATH_MAPPING'"
```

Die Ausgabe sieht wie folgt aus:

```
{
"domainName": "private.example.com",
"domainNameId": "abcd1234",
"domainNameArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
"certificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef",
"certificateUploadDate": "2024-09-10T10:31:20-07:00",
"endpointConfiguration": {
  "types": [
    "PRIVATE"
   ],
  "ipAddressType": "dualstack"
  },
"domainNameStatus": "AVAILABLE",
"securityPolicy": "TLS_1_2",
"policy": "...",
"routingMode" : "ROUTING_RULE_THEN_BASE_PATH_MAPPING"
}
```

------

# Routing-Regeln zum Verbinden von API-Stufen mit einem benutzerdefinierten Domainnamen für REST APIs
<a name="rest-api-routing-rules"></a>

Eine Routing-Regel besteht aus einer Reihe von Bedingungen, bei deren Erfüllung eine Aktion ausgelöst wird. Eine Regel kann beispielsweise jede eingehende Anfrage, die an einen benutzerdefinierten Domainnamen gerichtet ist und den Header `Hello:World` sowie den Basispfad `users` enthält, an die `production`-Stufe einer REST-API weiterleiten.

Regeln werden in der Reihenfolge ihrer Priorität ausgewertet. Wenn Sie den Routing-Modus `ROUTING_RULE_THEN_API_MAPPING` verwenden, wertet API Gateway stets zuerst alle Routing-Regeln aus, bevor API-Zuweisungen geprüft werden. Die folgende Liste beschreibt, wie eine Routing-Regel Bedingungen, Aktionen und Prioritäten verwendet. 

**Bedingungen**  
Wenn die Bedingungen für eine Regel erfüllt sind, wird die dazugehörige Aktion durchgeführt. API Gateway unterstützt bis zu zwei Header-Bedingungen und eine Pfadbedingung. API Gateway wertet Header-Bedingungen und Basispfadbedingungen zusammen aus.  
Sie können eine Regel auch ohne Bedingungen erstellen. Wenn API Gateway diese Regel auswertet, wird die Aktion immer ausgeführt. Eine Regel ohne Bedingungen kann als Catch-all-Regel verwendet werden.  
Weitere Informationen über Header-Bedingungen finden Sie unter [Abgleichen der Header-Bedingungen](#rest-api-routing-rules-condition-headers). Weitere Informationen über Pfadbedingungen finden Sie unter [Basispfadbedingungen anpassen](#rest-api-routing-rules-condition-path). 

**Aktionen**  
Aktionen sind das Ergebnis der Übereinstimmung von Bedingungen mit einer Routing-Regel. Derzeit wird nur das Aufrufen einer Stufe einer REST-API unterstützt.  
Jede Regel kann eine Aktion haben.

**Priorität**  
Die Priorität bestimmt die Reihenfolge, in der Regeln ausgewertet werden, ausgehend vom niedrigsten Wert hin zum höchsten Wert. Zwei Regeln können nicht dieselbe Priorität haben.  
Sie können die Priorität im Bereich 1–1.000.000 festlegen. Eine Regel mit der Priorität 1 wird von API Gateway zuerst ausgewertet. Wir empfehlen, beim Erstellen einer Regel Lücken zwischen den Prioritäten zu lassen. So können Sie die Reihenfolge später leichter ändern oder neue Regeln hinzufügen. Weitere Informationen finden Sie unter [Ändern der Priorität einer Routing-Regel](apigateway-routing-rules-use.md#rest-api-routing-rules-change-priority).

Beispiele dafür, wie API Gateway Routing-Regeln auswertet, finden Sie unter [Beispiele dafür, wie API Gateway Routing-Regeln auswertet](rest-api-routing-rules-examples.md).

## Bedingungstypen für Routing-Regeln in API Gateway
<a name="rest-api-routing-rules-condition-types"></a>

Im Folgenden werden die Bedingungstypen für Routing-Regeln beschrieben. API Gateway wendet eine Regel nur dann an, wenn alle Bedingungen erfüllt sind.

### Abgleichen der Header-Bedingungen
<a name="rest-api-routing-rules-condition-headers"></a>

Wenn Sie eine Header-Bedingung erstellen, können Sie den Header-Namen und den Header-Glob-Wert abgleichen, z. B. `Hello:World`. API Gateway verwendet für den Abgleich von Header-Bedingungen eine exakte Übereinstimmung. Ihre Bedingung kann bis zu zwei Header mit `AND` zwischen ihnen verwenden. Eine Bedingung kann also z. B. dann übereinstimmen, wenn eine eingehende Anfrage sowohl `Hello:World` als auch `x-version:beta` enthält.

Bei der Übereinstimmung des Header-Namens wird die Groß-/Kleinschreibung nicht berücksichtigt, beim Header-Glob-Wert hingegen schon. `Hello:World` stimmt mit `hello:World` überein, jedoch nicht mit `Hello:world`.

Eine Liste der eingeschränkten Header-Werte finden Sie unter [Einschränkungen](#rest-api-routing-rules-restrictions).

#### Verwenden von Platzhaltern mit Header-Bedingungen
<a name="rest-api-routing-rules-condition-headers-wildcards"></a>

Platzhalter dürfen nur im Header-Glob-Wert verwendet werden. Zulässig sind dabei: `*prefix-match`, `suffix-match*` oder `*contains*`. Die folgende Tabelle zeigt Beispiele, wie Platzhalter für die Übereinstimmung mit Header-Bedingungen verwendet werden können. 


|  Header-Bedingungen  |  Anfragen, die der Routing-Regel entsprechen  |  Anfragen, die nicht der Routing-Regel entsprechen  | 
| --- | --- | --- | 
|  `x-version: a*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a*` und `x-version: *b*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: b*` und `x-version: *a`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  Keine  | 

Wenn Sie Bedingungen für mehrere Header-Werte erstellen, wie z. B. `Accept:application/json,text/xml`, empfehlen wir, `*contains*` für Ihre Header-Bedingungen zu verwenden und keine Bedingungen mit dem Kommazeichen (`,`) zu erstellen.

Da API Gateway Header-Bedingungen wörtlich prüft, können semantisch gleiche Anfragen unterschiedlich weitergeleitet werden. Die folgende Tabelle zeigt die unterschiedlichen Ergebnisse der Routing-Regeln.


|  Header-Bedingungen  |  Anfragen, die der Routing-Regel entsprechen  |  Anfragen, die nicht der Routing-Regel entsprechen  | 
| --- | --- | --- | 
|  `Accept: *json`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `Accept: *json*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  Keine  | 

### Basispfadbedingungen anpassen
<a name="rest-api-routing-rules-condition-path"></a>

Wenn Sie eine Basispfadbedingung erstellen und die eingehende Anfrage den von Ihnen angegebenen Pfad enthält, wird die Regel angewendet. Bei der Übereinstimmung wird die Groß- und Kleinschreibung berücksichtigt, daher stimmt der Pfad `New/Users` nicht mit `new/users` überein.

Sie können eine Basispfadbedingung nur für einen Basispfad erstellen.

Eine Liste der eingeschränkten Basispfadbedingungen finden Sie unter [Einschränkungen](#rest-api-routing-rules-restrictions).

#### Entfernen des Basispfads mit Basispfadbedingungen
<a name="rest-api-routing-rules-condition-path-split"></a>

Wenn Sie eine Basispfadbedingung erstellen, können Sie wählen, ob der Basispfad entfernt werden soll. Wenn Sie den Basispfad entfernen, löscht API Gateway den eingehenden übereinstimmenden Basispfad, wenn es die Ziel-API aufruft. Dieses Verhalten entspricht dem einer API-Zuweisung. Wenn Sie den Basispfad nicht entfernen, leitet API Gateway den gesamten Basispfad an die Ziel-API weiter. Wir empfehlen, den Basispfad nur dann zu entfernen, wenn Sie eine API-Zuweisung neu erstellen.

Die folgende Tabelle zeigt Beispiele dafür, wie API Gateway die Bedingung zum Entfernen des Basispfads auswertet.


|  Bedingung  | Leerzeichen des Basispfads entfernen |  Eingehende Anfragen  |  Ergebnis  | 
| --- | --- | --- | --- | 
|  Wenn der Basispfad `PetStoreShopper/dogs` enthält  |  Wahr  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `/`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper/dogs` enthält  |  Falsch  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `PetStoreShopper/dogs`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Wahr  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `dogs`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Falsch  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `PetStoreShopper/dogs`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Wahr  |  `GET https://example.com/PetStoreShopper?birds=available`  |  API Gateway ruft die `GET`-Methode der `/`-Ressource mit dem Abfragezeichenfolgenparameter `birds=available` auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Falsch  |  `GET https://example.com/PetStoreShopper?birds=available`  |  API Gateway ruft die `GET`-Methode der `/PetStoreShopper`-Ressource mit dem Abfragezeichenfolgenparameter `birds=available` auf.  | 

## Einschränkungen
<a name="rest-api-routing-rules-restrictions"></a>
+ Die Ziel-API und der benutzerdefinierte Domainname müssen sich im selben AWS Konto befinden.
+ Jede Regel kann eine Ziel-API haben. 
+ Sie können eine Routing-Regel nur für einen privaten benutzerdefinierten Domainnamen an eine private API und für einen öffentlichen benutzerdefinierten Domainnamen an eine öffentliche API erstellen. Sie können öffentliche und private Ressourcen nicht mischen.
+ Wenn Ihr benutzerdefinierter Domainname API-Zuordnungen sowohl zu REST als auch zu HTTP enthält APIs, werden Routing-Regeln nicht unterstützt.
+ Die maximal zulässige Priorität beträgt 1 000 000.
+ Header-Einschränkungen:
  + Jede `anyOf` Bedingung darf nur einen Header-Wert enthalten.
  + Die einzigen zulässigen Zeichen für Header-Namen und Header-Glob-Werte sind in [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230) festgelegt. Dabei handelt es sich um `a-z`, `A-Z`, `0-9` und die folgenden Sonderzeichen: `*?-!#$%&'.^_`|~`.
  + Sie können einen Platzhalter im Header-Glob-Wert verwenden, jedoch muss der Platzhalter `*prefix-match`, `suffix-match*` oder `*contains*` sein. Sie können `*` nicht in der Mitte eines Header-Glob-Werts verwenden.
  + Platzhalter-Header-Namen werden nicht unterstützt.
  + Der Header-Name darf maximal 40 Zeichen lang sein.
  + Der Header-Glob-Wert darf maximal 128 Zeichen lang sein.
  + Der Header-Glob-Wert für eine Infix-Übereinstimmung darf maximal 40 Zeichen lang sein.
  + Die folgenden Header werden nicht als Bedingungen unterstützt:
    + `access-control-*`
    + `apigw-*`
    + `Authorization`
    + `Connection`
    + `Content-Encoding`
    + `Content-Length`
    + `Content-Location`
    + `Forwarded`
    + `Keep-Alive`
    + `Origin`
    + `Proxy-Authenticate`
    + `Proxy-Authorization`
    + `TE`
    + `Trailers`
    + `Transfer-Encoding`
    + `Upgrade`
    + `x-amz-*`
    + `x-amzn-*`
    + `x-apigw-api-id`
    + `X-Forwarded-For`
    + `X-Forwarded-Host`
    + `X-Forwarded-Proto`
    + `x-restAPI`
    + `Via`
+ Basispfadeinschränkungen:
  + Die Länge des Basispfads darf maximal 128 Zeichen betragen.
  + Der Basispfad darf nur Buchstaben, Zahlen und die folgenden Zeichen enthalten: `$-_.+!*'()/`.

    Diese Zeichen werden für reguläre Ausdrücke (Regex) nicht unterstützt. 
  + Der Basispfad darf nicht mit einem umgekehrten Schrägstrich (`\`) beginnen oder enden.

# Beispiele dafür, wie API Gateway Routing-Regeln auswertet
<a name="rest-api-routing-rules-examples"></a>

Der folgende Abschnitt zeigt 4 Beispiele dafür, wie API Gateway Routing-Regeln und API-Zuweisungen auswertet.

## Beispiel 1: Nur Routing-Regeln
<a name="rest-api-routing-rules-examples-rule-only"></a>

In diesem Beispiel ist für den benutzerdefinierten Domainnamen `https://petstore.example.com` der Routing-Modus auf `ROUTING_RULE_ONLY` eingestellt und es gelten die folgenden Routing-Regeln und Prioritäten.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Wenn die Anfrage einen Header enthält: `Hello:World`   |   Ziel-API 1   | 
|  `zzz000`  |   50   |   Wenn die Anfrage die folgenden Header enthält: `Accept:image/webp` und `Pet:Dog-*` und wenn der Basispfad `PetStoreShopper` enthält  |   Ziel-API 2   | 
|  `efg456`  |   100   |  Keine  |   Ziel-API 3   | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://petstore.example.com -h "Hello:World"`  |  Ziel-API 1  |  Die Anfrage entspricht der Routing-Regel `abc123`.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"`  |  Ziel-API 1  |  API Gateway wertet alle Routing-Regeln in der Reihenfolge ihrer Priorität aus. Die Routing-Regel `abc123` hat die höchste Priorität und die Bedingungen stimmen überein, daher ruft API Gateway die Ziel-API 1 auf. Obwohl die Bedingungen der Anfrage auch der Routing-Regel `zzz000` übereinstimmen, wertet API Gateway nach einer Übereinstimmung keine weiteren Routing-Regeln aus.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"`  |  Ziel-API 2  |  Die Anfrage entspricht der Routing-Regel `zzz000`. Dies war eine Übereinstimmung, da `Pet:Dog-Bella` eine Zeichenfolgenübereinstimmung mit `Pet:Dog-*` war.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"`  |  Ziel-API 3  |  Die Anfrage entspricht nicht der Routing-Regel `abc123`. Die Anfrage entspricht nicht der Routing-Regel `zzz000`, da nicht alle erforderlichen Header vorhanden sind. Die nächste Prioritätsregel entspricht allen eingehenden Anfragen, daher ruft API Gateway die Ziel-API 3 auf.  | 

## Beispiel 2: Routing-Regeln und API-Zuweisungen
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

In diesem Beispiel ist für den benutzerdefinierten Domainnamen `https://petstore.diagram.example.com` der Routing-Modus auf `ROUTING_RULE_THEN_API_MAPPING` festgelegt und es gelten die folgenden Routing-Regeln und API-Zuweisungen.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   1   |   Falls die Anfrage `pets` beinhaltet   |   Rufen Sie die `Prod`-Stufe der `PetStore`-API auf.   | 
|  `000zzz`  |   5   |   Wenn die Anfrage die folgenden Header enthält: `Cookie`:`*ux=beta*` und wenn der Basispfad `/refunds` enthält  |   Rufen Sie die `Beta`-Stufe der `Refunds`-API auf.   | 

Die folgende Tabelle zeigt die API-Zuweisungen für `https://petstore.backup.example.com`.


|  API-Zuweisungen  |  Ausgewählte API  | 
| --- | --- | 
|   `/refunds`   |   Rufen Sie die `Prod`-Stufe der `Refunds`-API auf.   | 
|   `(none)`   |   Rufen Sie die `Prod`-Stufe der `Search`-API auf.   | 

Das folgende Diagramm veranschaulicht, wie API Gateway die zuvor genannten Routing-Regeln und API-Zuweisungen auf Beispielanfragen anwendet. Die Beispielanfragen sind in der Tabelle nach diesem Diagramm zusammengefasst.

![\[Diagramm, wie API Gateway die vorherigen Routing-Regeln und API-Zuweisungen anwendet.\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/rr-diagram.png)


Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln und API-Zuweisungen auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://petstore.diagram.com/pets`  |  Die `Prod`-Stufe der `PetStore`-API.  |  Die Anfrage entspricht der Routing-Regel `abc123`.  | 
|  `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"`  |  Die `Beta`-Stufe der `Refunds`-API.  |  Die Anfrage entspricht der Routing-Regel `000zzz`. Der `Cookie`-Header enthält die korrekte `*contains*`-Übereinstimmung und die Basispfadübereinstimmung für diese Bedingung.   | 
|  `https://petstore.diagram.example.com/refunds`  |  Die `Prod`-Stufe der `Refunds`-API.   |  Die Anfrage verfügt nicht über die erforderlichen Header, um mit der Routing-Regel `zzz000` übereinzustimmen. Wenn API Gateway eine Routing-Regel nicht erfolgreich abgleichen kann, greift es auf API-Zuweisungen zurück. API Gateway kann den Basispfad der `Prod`-Stufe der `Refunds`-API zuweisen.   | 
|  `https://petstore.diagram.example.com/`  |  Die `Prod`-Stufe der `Search`-API.   |  Die Anfrage stimmt mit der API-Zuweisung zum leeren Pfad `(none)` überein.  | 

## Beispiel 3: Routing-Regeln und API-Zuweisungen mit mehreren Ebenen
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

In diesem Beispiel ist für den benutzerdefinierten Domainnamen `https://petstore.backup.example.com` der Routing-Modus `ROUTING_RULE_THEN_API_MAPPING` festgelegt und es gelten die folgenden Routing-Regeln und API-Zuweisungen.

Die folgende Tabelle zeigt die Routing-Regeln für `https://petstore.backup.example.com`.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Wenn die Anfrage einen Header enthält: `Hello:World`   |   Ziel-API 1   | 
|  `000zzz`  |   50   |   Wenn die Anfrage die folgenden Header enthält: `Accept`:`image/webp` und `Pet:Dog-*` und wenn der Basispfad `PetStoreShopper` enthält  |  Ziel-API 2  | 

Die folgende Tabelle zeigt die API-Zuweisungen für `https://petstore.backup.example.com`.


|  API-Zuweisungen  |  Ausgewählte API  | 
| --- | --- | 
|   `PetStoreShopper`   |   Ziel-API 3   | 
|   `PetStoreShopper/cats`   |   Ziel-API 4   | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln und API-Zuweisungen auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" `  |  Ziel-API 3  |  Die Anfrage verfügt nicht über die erforderlichen Header, um mit der Routing-Regel `zzz000` übereinzustimmen. Wenn API Gateway eine Routing-Regel nicht erfolgreich abgleichen kann, greift es auf API-Zuweisungen zurück. API Gateway kann den Basispfad der Ziel-API 3 zuweisen.  | 
|  `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"`  |  Ziel-API 1  |  Die Anfrage entspricht der Routing-Regel `abc123`. Wenn der Routing-Modus auf `ROUTING_RULE_THEN_API_MAPPING` festgelegt ist, haben Routing-Regeln immer Vorrang vor API-Zuweisungen.  | 
|  `https://petstore.example.com/Admin -h "Pet:Dog-Bella"`  |  Keine  |  Die Anfrage entspricht keiner Routing-Regel und keinen API-Zuweisungen. Da keine Standard-Routing-Regel vorliegt, lehnt API Gateway den Aufruf ab und sendet dem Aufrufer den Statuscode `403 Forbidden`.  | 

## Beispiel 4: Routing-Regeln für Platzhalter-Domainnamen
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

In diesem Beispiel ist der benutzerdefinierte Domainname `https://*.example.com` ein Platzhalter-Domainname. Der Platzhalter unterstützt alle Subdomains, die auf dieselbe Domain zurückgeleitet werden. Die folgenden Beispiel-Routing-Regeln ändern dieses Verhalten, sodass Subdomains mithilfe des Headers an ein anderes Ziel APIs weiterleiten können. `Host`

Die folgende Tabelle zeigt die Routing-Regeln für `https://*.example.com`.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Wenn die Anfrage einen Header enthält: `Host:a.example.com`   |   Ziel-API 1   | 
|  `000zzz`  |   50   |   Wenn die Anfrage Header enthält: `Host:b.example.com`  |  Ziel-API 2  | 
|  `efg456`  |   500   |  Keine  |  Ziel-API 3  | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://a.example.com`  |  Ziel-API 1  |  Der `Host`-Header ist `a.example.com`. Diese Anfrage entspricht der Routing-Regel `abc123`.  | 
|  `https://b.example.com`  |  Ziel-API 2  |  Der `Host`-Header ist `b.example.com`. Diese Anfrage entspricht der Routing-Regel `000zzz`.  | 
|  `https://testing.example.com`  |  Ziel-API 3  |  Dies entspricht der Auffang-Routing-Regel `efg456`.  | 

# Verwendung von Routing-Regeln
<a name="apigateway-routing-rules-use"></a>

Sie können eine Routingregel mit dem AWS-Managementkonsole AWS CLI, oder einem beliebigen AWS SDK erstellen. Nachdem Sie eine Regel erstellt haben, können Sie deren Priorität ändern.

## Erstellen einer Routing-Regel
<a name="rest-api-routing-rules-create"></a>

Das folgende Verfahren zeigt, wie Sie eine Routing-Regel für einen benutzerdefinierten Domainnamen erstellen, dessen Routing-Modus entweder auf `ROUTING_RULE_THEN_API_MAPPING` oder `ROUTING_RULE_ONLY` festgelegt ist.

------
#### [ AWS-Managementkonsole ]

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie einen benutzerdefinierten Domainnamen aus.

1. Wählen Sie auf der Registerkarte **Routing-Details** die Option **Routing-Regel hinzufügen** aus.

1. Wählen Sie **Neue Bedingung hinzufügen** aus, um eine neue Bedingung hinzuzufügen.

   Sie können eine Header- oder Basispfadbedingung hinzufügen. Um alle eingehenden Anfragen Ihrem benutzerdefinierten Domainnamen zuzuweisen, fügen Sie keine Bedingung hinzu. 

1. Verwenden Sie für **Aktion** das Dropdown-Menü, um Ihre Ziel-API und Ihre Zielstufe auszuwählen.

1. Wählen Sie **Weiter** aus.

1. Geben Sie im Prioritätsfeld eine Zahl für Ihre Priorität ein.

   API Gateway wertet Regeln in der Reihenfolge der Priorität aus, ausgehend vom niedrigsten Wert bis hin zum höchsten Wert.

   Wenn Sie eine Regel ohne Bedingung erstellen, empfehlen wir, eine Priorität mit hohem Wert zu verwenden.

1. Wählen Sie **Routing-Regel erstellen** aus.

------
#### [ AWS CLI ]

Mit dem folgenden [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html)Befehl wird eine Routingregel mit der Priorität 50 erstellt. In diesem Beispiel leitet API Gateway alle eingehenden Anfragen, die die Header `Hello:World`, `x-version:beta` sowie den Basispfad `PetStoreShopper` enthalten, an die Ziel-API `a1b2c3` weiter.

```
 aws apigatewayv2 create-routing-rule \
  --domain-name 'api.example.com' \
  --priority 50 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

Die Ausgabe sieht wie folgt aus.

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 50,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

## Ändern der Priorität einer Routing-Regel
<a name="rest-api-routing-rules-change-priority"></a>

Sie können die Priorität einer Routing-Regel ändern. Dies tritt sofort in Kraft und kann beeinflussen, wie API-Benutzer Ihre benutzerdefinierten Domainnamen aufrufen. Wir empfehlen, beim Festlegen der Prioritäten Ihrer Routing-Regeln Lücken zwischen den Regeln zu lassen.

Stellen Sie sich beispielsweise zwei Routing-Regeln vor: Regel `abc123` mit einer Priorität von 50 und Regel `zzz000` mit einer Priorität von 150. Um die Priorität so zu ändern, dass API Gateway Regel `zzz000` zuerst auswertet, können Sie die Priorität von Regel `zzz000` auf 30 setzen.

------
#### [ AWS-Managementkonsole ]

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie einen benutzerdefinierten Domainnamen aus.

1. Wählen Sie auf der Registerkarte **Routing-Details** zunächst Ihre Routing-Regel und anschließend **Bearbeiten** aus. 

1. Wählen Sie **Weiter** aus.

1. Geben Sie unter „Priorität“ die neue Priorität ein.

1. Wählen Sie **Änderungen speichern ** aus.

------
#### [ AWS CLI ]

Der folgende [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html)Befehl ändert die Priorität einer Routing-Regel. `abc123`

```
 aws apigatewayv2 put-routing-rule \
  --domain-name 'api.example.com' \
  --priority 30 \
  --routing-rule-id abc123 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

Die Ausgabe sieht wie folgt aus:

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 38,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

# API-Zuweisung mithilfe von Routing-Regeln neu erstellen
<a name="rest-api-routing-rules-recreate-api-mapping"></a>

Sie können eine API-Zuweisung mithilfe von Routing-Regeln neu erstellen. Um eine API-Zuweisung neu zu erstellen, stellen Sie sicher, dass das Entfernen des Basispfads aktiviert ist. Dadurch bleibt das Verhalten der API-Zuweisungen erhalten. Weitere Informationen finden Sie unter [Entfernen des Basispfads mit Basispfadbedingungen](rest-api-routing-rules.md#rest-api-routing-rules-condition-path-split).

Das folgende Tutorial zeigt, wie Sie die API-Zuweisung `https:// api.example.com/orders/v2/items/categories/5` als Routing-Regel neu erstellen. Außerdem erfahren Sie, wie Sie Ihre Zugriffsprotokolle aktualisieren, um die Routing-Regel-ID zu protokollieren, die API Gateway verwendet, um Datenverkehr an Ihre API zu senden.

------
#### [ AWS-Managementkonsole ]

**Um den Routingmodus auf ROUTING\$1RULE\$1THEN\$1 einzustellen API\$1MAPPING**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie Ihren benutzerdefinierten Domainnamen aus.

1. Wählen Sie unter **Domänendetails** die Option **Bearbeiten** aus.

1. **Wählen Sie für den **Routing-Modus ROUTING\$1RULE\$1THEN\$1**. API\$1MAPPING**

1. Wählen Sie **Speichern** aus. 

Nachdem Sie den Routing-Modus festgelegt haben, erstellen Sie die Routing-Regel.

**So erstellen Sie die Routing-Regel**

1. Wählen Sie auf der Registerkarte **Routing-Details** die Option **Routing-Regel hinzufügen** aus.

1. Wählen Sie **Neue Bedingung hinzufügen** und dann **Pfad** aus.

1. Geben Sie unter **Pfad** den Wert **orders/v2/items/categories/5** ein.

1. Wählen Sie für **Leerzeichen des Basispfads entfernen** die Option **Aktiv** aus.

1. Wählen Sie für **Ziel-API** Ihre Ziel-API aus.

1. Wählen Sie für **Zielstufe** Ihre Zielstufe aus.

1. Wählen Sie **Weiter** aus.

1. Geben Sie unter „Priorität“ eine Priorität ein.

   Auch wenn Sie Ihre bestehende API-Zuweisung beibehalten, verwendet API Gateway immer die neue Routing-Regel, da Routing-Regeln stets Vorrang vor API-Zuweisungen haben.

1. Wählen Sie **Änderungen speichern ** aus.

Nachdem Sie die Routing-Regel erstellt haben, aktualisieren Sie das Zugriffsprotokollformat für Ihre Stufe oder erstellen Sie ein neues Protokoll, um sicherzustellen, dass API Gateway Ihre Routing-Regel verwendet, um den Datenverkehr an Ihre API weiterzuleiten.

**So aktualisieren Sie Ihre Zugriffsprotokolle**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie Ihre API aus.

1. Klicken Sie im Hauptnavigationsbereich auf **Stufen**.

1. Wählen Sie unter **Protokolle und Ablaufverfolgung** die Option **Bearbeiten** aus.

   Wenn Sie keine Protokollgruppe haben, siehe [Richten Sie die CloudWatch Protokollierung für REST APIs in API Gateway ein](set-up-logging.md).

1. Fügen Sie **\$1context.customDomain.routingRuleIdMatched** Ihrem Protokollformat hinzu.

   Diese Protokollgruppe zeichnet die Routing-Regel-ID auf, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden. Weitere Informationen finden Sie unter [Ich kann nicht sagen, wie API Gateway Traffic an meinen gesendet hat APIs](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging).

1. Wählen Sie **Speichern** aus.

Nachdem Sie Ihre Zugriffsprotokolle aktualisiert haben, rufen Sie Ihren benutzerdefinierten Domainnamen auf. Das folgende Beispiel zeigt einen curl-Befehl zum Aufrufen des benutzerdefinierten Domainnamens `https://api.example.com` mit dem Basispfad `orders/v2/items/categories/5`.

```
curl "https://api.example.com/orders/v2/items/categories/5"
```

Nachdem Sie Ihren benutzerdefinierten Domainnamen erfolgreich aufgerufen haben, vergewissern Sie sich, dass CloudWatch Logs das anzeigt. `routingRuleIdMatched` Informationen zur Verwendung der CloudWatch Logs-Konsole zum Anzeigen einer Protokollgruppe finden Sie unter[API Gateway Gateway-Protokollereignisse in der CloudWatch Konsole anzeigen](view-cloudwatch-log-events-in-cloudwatch-console.md).

------
#### [ AWS CLI ]

1. Verwenden Sie den folgenden [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html)Befehl, um den Domainnamen `api.example.com` zu aktualisieren, um den Routing-Modus zu verwenden`ROUTING_RULE_THEN_API_MAPPING`.

   ```
   aws apigatewayv2 update-domain-name \
     --domain-name 'api.example.com' \
     --routing-mode ROUTING_RULE_THEN_API_MAPPING
   ```

1. Verwenden Sie den folgenden [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html)Befehl, um eine neue Routing-Regel zu erstellen, um die API-Zuordnung `https://api.example.com/orders/v2/items/categories/5` neu zu erstellen.

   ```
   aws apigatewayv2 create-routing-rule \
     --domain-name 'api.example.com' \
     --priority 50 \
     --conditions '[
     {
       "MatchBasePaths": {
         "AnyOf": [
           "orders/v2/items/categories/5"
         ]
       }
     }
   ]' \
     --actions '[
     {
       "InvokeApi": {
         "ApiId": "a1b2c3",
         "Stage": "prod",
         "StripBasePath": true
       }
     }
   ]'
   ```

1. Verwenden Sie den folgenden Befehl [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html), um das Format der Zugriffsprotokolle so zu aktualisieren, dass die Variable `$context.customDomain.routingRuleIdMatched` enthalten ist. Diese Variable zeichnet die Routing-Regel-ID auf, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden. Sie verwenden dieses Protokoll als Bestätigung, dass API Gateway Ihre Routing-Regel verwendet, um Datenverkehr an Ihre API zu senden. Weitere Informationen finden Sie unter [Ich kann nicht sagen, wie API Gateway Traffic an meinen gesendet hat APIs](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging).

   ```
   aws apigateway update-stage \
     --rest-api-id a1bc2c3 \
     --stage-name prod \
     --patch-operations "op=replace,path=/accessLogSettings/format,value='\$context.path \$context.customDomain.routingRuleIdMatched \$context.requestId \$context.extendedRequestId'"
   ```

   Wenn Sie keine Protokollgruppe haben, siehe [Richten Sie die CloudWatch Protokollierung für REST APIs in API Gateway ein](set-up-logging.md).

1. Verwenden Sie den folgenden curl-Befehl, um Ihren benutzerdefinierten Domainnamen mit dem Basispfad `orders/v2/items/categories/5` aufzurufen.

   ```
   curl "https://api.example.com/orders/v2/items/categories/5
   ```

1. Verwenden Sie den folgenden [filter-log-events](https://docs.aws.amazon.com/cli/latest/reference/logs/filter-log-events.html)Befehl, um die Protokollereignisse aus der Protokollgruppe abzurufen`access-log-group-orders`, die die Routingregel-ID `abc123` enthalten.

   ```
   aws logs filter-log-events --log-group-name access-log-group-orders --filter-pattern abc123
   ```

    Damit wird bestätigt, dass API Gateway die Routing-Regel verwendet hat, um den Datenverkehr an Ihre API zu senden.

------

# Fehlerbehebung bei Problemen mit Routing-Regeln
<a name="rest-api-routing-rules-troubleshoot"></a>

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

## Ich kann nicht sagen, wie API Gateway Traffic an meinen gesendet hat APIs
<a name="rest-api-routing-rules-logging"></a>

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 entsprechenden CloudWatch Logs-Rollen-ARN](set-up-logging.md#set-up-access-logging-permissions) 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](set-routing-mode.md).

## Ich kann keine Routing-Regeln für meinen benutzerdefinierten Domainnamen aktivieren
<a name="rest-routing-rules-access-denied"></a>

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

Sie erhalten diesen Fehler, wenn Sie eine IAM-Richtlinie haben oder hatten, die den Zugriff [BasePathMapping](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html#amazonapigatewaymanagement-resources-for-iam-policies)auf oder verweigert. [ApiMapping](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html#amazonapigatewaymanagementv2-resources-for-iam-policies) 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` und`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/*"
    ]
}
```

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](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html)-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.

# Verwenden Sie API-Zuordnungen, um API-Stufen mit einem benutzerdefinierten Domainnamen für REST zu verbinden APIs
<a name="rest-api-mappings"></a>

Sie verwenden API-Mappings, um API-Stufen mit einem benutzerdefinierten Domain-Namen zu verbinden. Dadurch wird Traffic APIs über Ihren benutzerdefinierten Domainnamen an Sie gesendet.

Ein API-Mapping gibt eine API, eine Phase und optional einen Pfad an, die für das Mapping verwendet werden sollen. Sie können beispielsweise `https://api.example.com/orders` die `production` Stufe einer API zuordnen.

Sie können HTTP-API- und REST-API--Stufen demselben benutzerdefinierten Domain-Namen zuweisen.

Bevor Sie ein API-Mapping erstellen, benötigen Sie eine API, eine Phase und einen benutzerdefinierten Domain-Namen. Weitere Informationen zum Erstellen eines benutzerdefinierten Domain-Namens finden Sie unter [Einrichten eines regionalen benutzerdefinierten Domainnamens in API Gateway](apigateway-regional-api-custom-domain-create.md).

## Eingehende Anfragen an Ihren benutzerdefinierten Domainnamen
<a name="rest-api-mappings-incoming-requests"></a>

Wenn Sie einer Phase Ihrer API einen benutzerdefinierten Domainnamen zuordnen, entfernt API Gateway den eingehenden Basispfad. Dadurch wird der zugeordnete Basispfad aus dem API-Aufruf entfernt. Wenn Ihre Basispfad-Zuordnung beispielsweise der `test` Phase entspricht und Sie die folgende Anfrage verwenden`https://api.example.com/orders/shop/5/hats`, würde API Gateway die `/hats` Ressource der `test` Stufe Ihrer API aufrufen, nicht die `orders/shop/5/hats` Ressource. `https://api.example.com/orders/shop/5`

## API-Anfragen zuordnen
<a name="rest-api-mappings-evalutation"></a>

Im Folgenden wird erklärt, wie API Gateway API-Zuordnungen auswertet.

Sie können eine API-Zuordnung mithilfe einstufiger Zuordnungen erstellen, z. B. einer API-Zuordnung von `orders` der `beta` Stufe einer API und einer API-Zuordnung von `shipping` der Stufe einer API. `alpha` Für regionale benutzerdefinierte Domainnamen mit der Sicherheitsrichtlinie TLS 1.2 unterstützt API Gateway mehrstufige API-Zuordnungen. Sie können eine API-Zuordnung zwischen `orders/v1/items` der `alpha` Stufe einer API und `orders/v2/items` der `beta` Phase einer API erstellen. Wenn Sie ein Mapping mit mehreren Ebenen erstellen, sendet API Gateway Anfragen an das API-Mapping, das den längsten passenden Pfad hat.

Sie können eine API-Zuordnung zu dem leeren Pfad erstellen`(none)`. Wenn kein Pfad mit der Anfrage übereinstimmt, sendet API Gateway die Anfrage an den leeren Pfad`(none)`.

In diesem Beispiel `https://api.example.com` hat der benutzerdefinierte Domainname die folgenden API-Zuordnungen.


|  API-Zuordnung  |  Ausgewählte API  | 
| --- | --- | 
|  `(none)`  |   API 1   | 
|   `orders`   |   API 2   | 
|  `orders/v1/items`  |   API 3   | 
|  `orders/v2/items`  |   API 4   | 
|  `orders/v1/items/categories`  |   API 5   | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen API-Zuordnungen auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://api.example.com/orders`  |  API 2  |  Die Anforderung stimmt genau mit diesem API-Mapping überein.  | 
|  `https://api.example.com/orders/v1/items`  |  API 3  |  Die Anforderung stimmt genau mit diesem API-Mapping überein.  | 
|  `https://api.example.com/orders/v2/items`  |  API 4  |  Die Anforderung stimmt genau mit diesem API-Mapping überein.  | 
|  `https://api.example.com/orders/v1/items/123`  |  API 3  |  API Gateway wählt das Mapping aus, das den längsten Übereinstimmungspfad hat. Das `123` am Ende der Anforderung hat keinen Einfluss auf die Auswahl. Siehe [Eingehende Anfragen an Ihren benutzerdefinierten Domainnamen](#rest-api-mappings-incoming-requests).  | 
|  `https://api.example.com/orders/v2/items/categories/5`  |  API 5  |  API Gateway wählt das Mapping aus, das den längsten Übereinstimmungspfad hat.  | 
|  `https://api.example.com/customers`  |  API 1  |  API Gateway verwendet das leere Mapping als Catch-All.  | 
|  `https://api.example.com/ordersandmore`  |  API 2  |  API Gateway wählt das Mapping aus, das den längsten Übereinstimmungspräfix hat. Bei einem benutzerdefinierten Domain-Namen, der mit einstufigen Mappings konfiguriert ist, z. B. nur `https://api.example.com/orders` und `https://api.example.com/`, würde API Gateway `API 1` auswählen, da es keinen passenden Pfad mit `ordersandmore` gibt.  | 

## Einschränkungen
<a name="rest-api-mappings-restrictions"></a>
+ Bei einer API-Zuordnung APIs müssen sich der benutzerdefinierte Domainname und der zugeordnete Domainname im selben AWS Konto befinden.
+ API-Mappings dürfen nur Buchstaben, Zahlen und die folgenden Zeichen enthalten: `$-_.+!*'()/`.
+ Die maximale Länge für den Pfad in eines API-Mappings beträgt 300 Zeichen.
+ Es können 200 API-Zuweisungen mit mehreren Ebenen für jeden Domainnamen vorhanden sein. Dieses Limit beinhaltet keine API-Zuordnung mit einzelnen Ebenen, wie `/prod` z.
+ Mit der Sicherheitsrichtlinie TLS 1.2 können Sie HTTP APIs nur einem regionalen benutzerdefinierten Domainnamen zuordnen.
+ Sie können nicht demselben benutzerdefinierten Domainnamen wie eine HTTP-API oder REST-API zuordnen. WebSocket APIs 
+ Sie müssen den Ressourceneintrag Ihres DNS-Anbieters erstellen oder aktualisieren, um ihn dem API-Endpunkt zuzuordnen, nachdem Sie Ihre API-Zuweisungen erstellt haben.
+ Wenn Sie mehrstufige API-Zuweisungen erstellen, konvertiert API Gateway alle Header-Namen in Kleinbuchstaben.

## Ein API-Mapping erstellen
<a name="rest-api-mappings-examples"></a>

Um ein API-Mapping zu erstellen, müssen Sie zuerst einen benutzerdefinierten Domain-Namen, eine API und eine Phase erstellen. Für Ihren benutzerdefinierten Domainnamen muss der Routing-Modus entweder auf `ROUTING_RULE_THEN_API_MAPPING` oder eingestellt sein`API_MAPPING_ONLY`. Informationen zum Einstellen des Routingmodus finden Sie unter[Festlegen des Routing-Modus für Ihren benutzerdefinierten Domainnamen](set-routing-mode.md).

 AWS Serverless Application Model Vorlagen, mit denen alle Ressourcen erstellt werden, finden Sie beispielsweise unter [Sitzungen mit aktiviertem SAM](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/custom-domains) GitHub.

------
#### [ AWS-Managementkonsole ]

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierten Domänennamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie einen benutzerdefinierten Domänennamen aus.

1. Wählen Sie auf der Registerkarte **Routing-Details** die Option API-Zuordnungen **konfigurieren** aus.

1. Geben Sie die **API**, die **Stufe** und den **Pfad** für die Zuweisung an.

1. Wählen Sie **Speichern**.

------
#### [ AWS CLI ]

Mit dem folgenden [create-api-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api-mapping.html)-Befehl wird ein API-Mapping erstellt. In diesem Beispiel sendet API Gateway Anforderungen an `api.example.com/v1/orders` an die angegebene API und Phase.

**Anmerkung**  
Um API-Mappings mit mehreren Ebenen zu erstellen, müssen Sie `apigatewayv2` verwenden.

```
aws apigatewayv2 create-api-mapping \
    --domain-name api.example.com \
    --api-mapping-key v1/orders \
    --api-id a1b2c3d4 \
    --stage test
```

------
#### [ CloudFormation ]

Im folgenden CloudFormation Beispiel wird eine API-Zuordnung erstellt.

**Anmerkung**  
Um API-Mappings mit mehreren Ebenen zu erstellen, müssen Sie `AWS::ApiGatewayV2` verwenden.

```
MyApiMapping:
  Type: 'AWS::ApiGatewayV2::ApiMapping'
  Properties:
    DomainName: api.example.com
    ApiMappingKey: 'orders/v2/items'
    ApiId: !Ref MyApi
    Stage: !Ref MyStage
```

------