

# Cómo utilizar las reglas de enrutamiento
<a name="apigateway-routing-rules-use"></a>

Puede crear una regla de enrutamiento mediante la Consola de administración de AWS, la AWS CLI o cualquier AWS SDK. Después de crear una regla, puede cambiar la prioridad.

## Creación de una regla de enrutamiento
<a name="rest-api-routing-rules-create"></a>

El siguiente procedimiento muestra cómo crear una regla de enrutamiento para un nombre de dominio personalizado con un modo de enrutamiento establecido en `ROUTING_RULE_THEN_API_MAPPING` o `ROUTING_RULE_ONLY`.

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija **Custom domain names (Nombres de dominios personalizados)** en el panel de navegación principal. 

1. Elija un nombre de dominio personalizado.

1. En la pestaña **Detalles de enrutamiento**, elija **Agregar regla de enrutamiento**.

1. Elija **Agregar una nueva condición** para agregar una nueva condición.

   Puede agregar una condición de encabezado o de ruta base. Para hacer coincidir todas las solicitudes entrantes con el nombre de dominio personalizado, no agregue una condición. 

1. En **Acción**, utilice la lista desplegable para seleccionar la API de destino y la etapa de destino.

1. Elija **Siguiente**.

1. En el campo de prioridad, introduzca un número para la prioridad.

   API Gateway evalúa las reglas en orden de prioridad, del valor más bajo al más alto.

   Si va a crear una regla sin una condición, le recomendamos que utilice un valor de prioridad alto.

1. Elija **Crear regla de enrutamiento**.

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

El siguiente comando [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html) crea una regla de enrutamiento con una prioridad de 50. En este ejemplo, API Gateway enruta cualquier solicitud entrante que tenga los encabezados `Hello:World` y `x-version:beta` y la ruta base `PetStoreShopper` a la 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"
    }
  }
 ]'
```

El resultado será similar al siguiente.

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

------

## Cambio de la prioridad de una regla de enrutamiento
<a name="rest-api-routing-rules-change-priority"></a>

Puede cambiar la prioridad de una regla de enrutamiento. Esto tiene efecto inmediato y podría afectar el modo en que los consumidores de API invocan los nombres de dominio personalizados. Le recomendamos que, cuando establezca las prioridades de las reglas de enrutamiento, deje espacios entre las reglas.

Por ejemplo, considere dos reglas de enrutamiento, la regla `abc123` con una prioridad de 50 y la regla `zzz000` con una prioridad de 150. Para cambiar la prioridad de las reglas de modo que API Gateway evalúe primero la regla `zzz000`, puede cambiar la prioridad de la regla `zzz000` a 30.

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Elija **Custom domain names (Nombres de dominios personalizados)** en el panel de navegación principal. 

1. Elija un nombre de dominio personalizado.

1. En la pestaña **Detalles de enrutamiento**, elija la regla de enrutamiento y, a continuación, **Editar**. 

1. Elija **Siguiente**.

1. Para la prioridad, introduzca la nueva prioridad.

1. Seleccione **Save changes (Guardar cambios)**.

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

El siguiente comando [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html) cambia la prioridad de una regla de enrutamiento `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"
    }
  }
 ]'
```

El resultado será similar al siguiente:

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

------