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

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

如何使用路由規則

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

建立路由規則

下列程序說明如何針對自訂網域名稱建立路由規則,並將路由模式設定為 ROUTING_RULE_THEN_API_MAPPINGROUTING_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:Worldx-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" }