

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為您的自訂網域名稱設定路由模式
<a name="set-routing-mode"></a>

您可以選擇 API Gateway 使用何種路由模式來將流量路由傳送至您的 API。如需詳細資訊，請參閱[在 API Gateway 中透過您的自訂網域名稱將流量傳送至 API](rest-api-routing-mode.md)。本節討論自訂網域名稱的路由模式。您必須為自訂網域名稱設定路由模式，才能將流量路由傳送至您的 API。以下是支援的路由模式：
+ **ROUTING\$1RULE\$1THEN\$1API\$1MAPPING** – 使用此模式時，可同時透過路由規則和 API 映射將流量傳送至 API。在此模式中，所有路由規則的優先順序都會高於任何 API 映射。如需此模式的範例，請參閱 [範例 2：路由規則和 API 映射](rest-api-routing-rules-examples.md#rest-api-routing-rules-examples-rule-and-mappings)。
+ **ROUTING\$1RULE\$1ONLY** – 使用此模式時，只允許路由規則將流量傳送至您的 API。當您的自訂網域名稱使用此模式時，您無法建立 API 映射，但您可以使用 [get-api-mappings](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/get-api-mappings.html) 命令來檢視這些映射。API 發起人無法使用 API 映射來存取此網域名稱。
+ **API\$1MAPPING\$1ONLY** – 使用此模式時，只允許 API 映射將流量傳送至您的 API。當您的自訂網域名稱使用此模式時，您無法建立路由規則，但您可以使用 `list-routing-rules` 命令來檢視這些規則。API 發起人無法使用路由規則來存取此網域名稱。

  這是您所有現有網域名稱以及您建立的任何新網域名稱的預設路由模式。

當您使用 `apigateway` 建立自訂網域名稱時，`API_MAPPING_ONLY` 稱為 `BASE_PATH_MAPPING_ONLY`，而 `ROUTING_RULE_THEN_API_MAPPING` 稱為 `ROUTING_RULE_THEN_BASE_PATH_MAPPING`。此行為僅適用於 AWS CLI CloudFormation或任何 SDKs，而不是在 中 AWS 管理主控台。

下列程序說明如何變更現有自訂網域名稱的路由模式。當您變更自訂網域名稱的路由模式時，API 發起人無法使用任何不支援的路由模式來存取您的網域名稱。

------
#### [ AWS 管理主控台 ]

1. 在以下網址登入 API Gateway 主控台：[https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)。

1. 從主要導覽窗格中，選擇 **Custom Domain Names (自訂網域名稱)**。

1. 選擇自訂網域名稱。

1. 針對**網域詳細資訊**，選擇**編輯**。

1. 針對**路由模式**，選擇 **ROUTING\$1RULE\$1THEN\$1API\$1MAPPING**。

1. 選擇**儲存**。

如果您將路由模式變更為 `ROUTING_RULE_ONLY` 或 `API_MAPPING_ONLY`，則您已建立的任何 API 映射或路由規則都會從主控台的網域名稱詳細資訊頁面中移除。如果您變更路由模式以支援路由規則或 API 映射，則會傳回這些資源。

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

以下 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) 命令會更新網域名稱，以使用路由模式 `ROUTING_RULE_THEN_API_MAPPING`：

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

輸出將如下所示：

```
{
"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 ]

以下 [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html) 命令會更新私有自訂網域名稱，以使用路由模式 `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'"
```

輸出將如下所示：

```
{
"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"
}
```

------