

# Quando usar regras de roteamento
<a name="apigateway-routing-rules-use"></a>

Você pode criar uma regra de roteamento usando o Console de gerenciamento da AWS, a AWS CLI ou qualquer SDK da AWS. Depois que você criar um trabalho, não poderá mais alterar ou atualizar a respectiva prioridade.

## Criar uma regra de roteamento
<a name="rest-api-routing-rules-create"></a>

O procedimento a seguir mostra como criar uma regra de roteamento para um nome de domínio personalizado com um modo de roteamento definido como `ROUTING_RULE_THEN_API_MAPPING` ou `ROUTING_RULE_ONLY`.

------
#### [ Console de gerenciamento da AWS ]

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha **Custom Domain Names (Nomes de domínios personalizados)** no painel de navegação principal. 

1. Escolha um nome de domínio personalizado.

1. Na guia **Detalhes do roteamento**, escolha **Adicionar regra de roteamento.**

1. Escolha **Adicionar uma nova condição** para adicionar uma nova condição.

   Você pode adicionar uma condição de cabeçalho ou de caminho base. Para fazer a correspondência de todas as solicitações recebidas com seu nome de domínio personalizado, não adicione uma condição. 

1. Em **Ação**, use o menu suspenso para selecionar a API e o estágio de destino.

1. Escolha **Próximo**.

1. No campo de prioridade, insira um número para sua prioridade.

   O API Gateway avalia as regras em ordem de prioridade, do valor mais baixo para o valor mais alto.

   Se você estiver criando uma regra sem uma condição, recomendamos usar uma prioridade com um valor alto.

1. Selecione **Criar regra de roteamento**.

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

O comando [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html) indicado abaixo cria uma regra de roteamento com prioridade 50. Neste exemplo, o API Gateway roteia todas as solicitações recebidas que tenham os cabeçalhos `Hello:World` e `x-version:beta` e o caminho base `PetStoreShopper` para a API de destino `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"
    }
  }
 ]'
```

A saída será exibida da seguinte forma:

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

------

## Alterar a prioridade de uma regra de roteamento
<a name="rest-api-routing-rules-change-priority"></a>

Você pode alterar a prioridade de uma regra de roteamento. Essa alteração entra em vigor imediatamente e pode afetar a forma como os consumidores da API invocam seus nomes de domínio personalizados. Recomendamos que, ao definir a prioridade de suas regras de roteamento, você deixe intervalos entre as regras.

Por exemplo, considere duas regras de roteamento, regra `abc123` com prioridade 50 e regra `zzz000` com prioridade 150. Para alterar a prioridade das regras de modo que o API Gateway avalie a regra `zzz000` primeiro, você pode alterar a prioridade da regra `zzz000` para 30.

------
#### [ Console de gerenciamento da AWS ]

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha **Custom Domain Names (Nomes de domínios personalizados)** no painel de navegação principal. 

1. Escolha um nome de domínio personalizado.

1. Na guia **Detalhes do roteamento**, escolha sua regra de roteamento e selecione **Editar**. 

1. Escolha **Próximo**.

1. Em prioridade, insira a nova prioridade.

1. Escolha **Salvar alterações**.

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

O comando [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html) indicado abaixo altera a prioridade de uma regra de roteamento `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"
    }
  }
 ]'
```

A saída será exibida da seguinte forma:

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

------