

# ルーティングルールの使用方法
<a name="apigateway-routing-rules-use"></a>

ルーティングルールは、AWS マネジメントコンソール、AWS CLI、または任意の AWS SDK を使用して作成できます。ルールを作成した後で、その優先度を変更できます。

## ルーティングルールを作成する
<a name="rest-api-routing-rules-create"></a>

次の手順は、ルーティングモードが `ROUTING_RULE_THEN_API_MAPPING` または `ROUTING_RULE_ONLY` に設定されているカスタムドメイン名のルーティングルールを作成する方法を示しています。

------
#### [ AWS マネジメントコンソール ]

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. メインのナビゲーションペインから [**Custom Domain Names (カスタムドメイン名)**] を選択します。

1. カスタムドメイン名を選択します。

1. **[ルーティングの詳細]** タブで、**[ルーティングルールを追加]** を選択します。

1. **[新しい条件を追加]** を選択して、新しい条件を追加します。

   ヘッダーまたはベースパス条件を追加できます。すべての受信リクエストをカスタムドメイン名に一致させるには、条件を追加しないでください。

1. **[アクション]** で、ドロップダウンを使用してターゲット API とターゲットステージを選択します。

1. [**次へ**] を選択します。

1. 優先度フィールドに、優先度の数値を入力します。

   API Gateway は、ルールを優先度順 (低い値から高い値の順) に評価します。

   条件なしでルールを作成する場合は、高い値の優先度を使用することをお勧めします。

1. **[ルーティングルールを作成]** を選択します。

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

次の [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html) コマンドは、優先度 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"
}
```

------

## ルーティングルールの優先度を変更する
<a name="rest-api-routing-rules-change-priority"></a>

ルーティングルールの優先度は変更できます。これはすぐに有効になり、API コンシューマーがカスタムドメイン名を呼び出す方法に影響を与える可能性があります。ルーティングルールの優先順位を設定するときは、ルール間に間隔を空けておくことをお勧めします。

例えば、優先度が 50 のルール `abc123` と優先度が 150 のルール `zzz000` の 2 つのルーティングルールについて考えます。API Gateway が最初にルール `zzz000` を評価するようにルールの優先度を変更するには、ルール `zzz000` の優先度を 30 に変更できます。

------
#### [ AWS マネジメントコンソール ]

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. メインのナビゲーションペインから [**Custom Domain Names (カスタムドメイン名)**] を選択します。

1. カスタムドメイン名を選択します。

1. **[ルーティングの詳細]** タブで、ルーティングルールを選択し、**[編集]** を選択します。

1. [**次へ**] を選択します。

1. 優先度に、新しい優先度を入力します。

1. **[Save changes]** (変更の保存) をクリックします。

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

次の [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html) コマンドは、ルーティングルール `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"
}
```

------