View a markdown version of this page

如何使用路由規則 - Amazon API Gateway

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

如何使用路由規則

您可以使用 AWS 管理主控台 AWS CLI或任何 AWS SDK 建立路由規則。建立規則之後,您可以變更其優先順序。

建立路由規則

下列程序說明如何針對自訂網域名稱建立路由規則,並將路由模式設定為 ROUTING_RULE_THEN_API_MAPPING 或 ROUTING_RULE_ONLY。

AWS 管理主控台
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway。

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

  3. 選擇自訂網域名稱。

  4. 在路由詳細資訊索引標籤上,選擇新增路由規則。

  5. 選擇新增條件以新增條件。

    您可以新增標頭或基本路徑條件。若要將所有傳入請求與您的自訂網域名稱進行比對,請勿新增條件。

  6. 針對動作,使用下拉式清單選取您的目標 API 和目標階段。

  7. 選擇下一步。

  8. 在優先順序欄位中,輸入優先順序的數字。

    API Gateway 會依優先順序評估規則,從最低值到最高值。

    如果您要建立規則但不設任何條件,建議您使用高優先順序值。

  9. 選擇建立路由規則。

AWS CLI

以下 create-routing-rule 命令會建立優先順序為 50 的路由規則。在此範例中,API Gateway 會將任何具有標頭 Hello:World 和 x-version:beta 以及基本路徑 PetStoreShopper 的傳入請求,路由傳送至目標 API a1b2c3。

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" } } ]'

輸出將如下所示:

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

變更路由規則的優先順序

您可以變更路由規則的優先順序。此變更會立即生效,且可能影響 API 取用者調用您的自訂網域名稱的方式。我們建議您在設定路由規則的優先順序時,在規則之間保留間隙。

例如,假設有兩項路由規則,規則 abc123 的優先順序為 50,規則 zzz000 的優先順序為 150。若要變更規則的優先順序,以便讓 API Gateway 先評估規則 zzz000,那麼您可以將規則 zzz000 的優先順序變更為 30。

AWS 管理主控台
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway。

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

  3. 選擇自訂網域名稱。

  4. 在路由詳細資訊索引標籤上,選擇您的路由規則,然後選擇編輯。

  5. 選擇下一步。

  6. 針對優先順序,輸入新的優先順序。

  7. 選擇儲存變更。

AWS CLI

以下 put-routing-rule 命令會變更路由規則 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" } } ]'

輸出將如下所示:

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