

# Publicación de las API de WebSocket para que los clientes las invoquen
<a name="websocket-api-publish"></a>

El hecho de crear y desarrollar simplemente una API de API Gateway no hace que automáticamente los usuarios puedan invocarla. Para que sea invocable, debe implementar su API en una etapa. Además, es posible que desee personalizar la URL que utilizarán los usuarios para acceder a su API. Puedes darle un dominio que sea coherente con su marca o que sea más memorable que la URL predeterminada de su API.

En esta sección, puede aprender a implementar su API y personalizar la URL que proporciona a los usuarios para acceder a ella. 

**nota**  
Para aumentar la seguridad de las API de API Gateway, el dominio `execute-api.{region}.amazonaws.com` se registra en la [lista de sufijos públicos (PSL)](https://publicsuffix.org/). Para mayor seguridad, recomendamos que utilice cookies con un prefijo `__Host-` en caso de que necesite configurar cookies confidenciales en el nombre de dominio predeterminado de las API de API Gateway. Esta práctica le ayudará a proteger su dominio de los intentos de falsificación de solicitudes entre sitios (CSRF). Para obtener más información, consulte la página de [configuración de cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) en la red de desarrolladores de Mozilla.

**Topics**
+ [Creación de etapas para las API de WebSocket en API Gateway](websocket-api-stages.md)
+ [Implementación de las API de WebSocket en API Gateway](apigateway-set-up-websocket-deployment.md)
+ [Política de seguridad de las API de WebSocket en API Gateway](websocket-api-ciphers.md)
+ [Nombres de dominio personalizados para las API de WebSocket en API Gateway](websocket-api-custom-domain-names.md)

# Creación de etapas para las API de WebSocket en API Gateway
<a name="websocket-api-stages"></a>

Una referencia lógica a un estado del ciclo de vida de la API (por ejemplo, `dev`, `prod`, `beta` o `v2`). Las etapas de API se identifican por su ID de API y su nombre de etapa, y se incluyen en la URL que utiliza para invocar la API. Cada etapa es una referencia con nombre a una implementación de la API y está disponible para que las aplicaciones cliente la invoquen.

Una implementación es una instantánea de la configuración de la API. Después de implementar una API en una etapa, esta está disponible para que los clientes la invoquen. Debe implementar una API para que los cambios surtan efecto.

## Variables de etapa
<a name="websocket-api-stages.stage-variables"></a>

Las variables de etapa son pares clave-valor que se pueden definir para una etapa de una API WebSocket. Actúan como variables de entorno y se pueden usar en la configuración de la API.

Por ejemplo, puede definir una variable de etapa y, a continuación, establecer su valor como extremo HTTP para una integración de proxy HTTP. Posteriormente, puede hacer referencia al punto de conexión mediante el nombre de variable de etapa asociada. Al hacer esto, puede usar la misma configuración de API con un punto de conexión diferente en cada etapa. Del mismo modo, puede utilizar variables de etapa para especificar una integración de funciones de AWS Lambda diferente para cada etapa de su API.

**nota**  
Las variables de etapa no están pensadas a fin de ser utilizadas para datos confidenciales, como credenciales. Para transferir información confidencial a las integraciones, utilice un autorizador de AWS Lambda. Puede pasar datos confidenciales a integraciones en la salida del autorizador de Lambda. Para obtener más información, consulte [Formato de respuesta del autorizador de Lambda](http-api-lambda-authorizer.md#http-api-lambda-authorizer.payload-format-response).

### Ejemplos
<a name="websocket-api-stages.stage-variables-examples"></a>

Para utilizar una variable de etapa para personalizar el punto de conexión de integración HTTP, primero debe establecer el nombre y el valor de la variable de etapa (por ejemplo, `url`) con un valor de `example.com`. A continuación, configure una integración de proxy HTTP. En lugar de escribir la URL del punto de conexión, puede indicar a API Gateway que use el valor de la variable de etapa, **http://\$1\$1stageVariables.url\$1**. Este valor indica a API Gateway que sustituya la variable de etapa `${}` en el tiempo de ejecución en función de la etapa de la API. 

Puede hacer referencia a variables de etapa de una manera similar para especificar el nombre de una función de Lambda o el ARN de un rol de AWS.

Cuando especifica el nombre de una función de Lambda como un valor de variable de etapa, debe configurar manualmente los permisos en la función de Lambda. El siguiente comando [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) permite agregar los permisos necesarios:

```
aws lambda add-permission --function-name arn:aws:lambda:XXXXXX:your-lambda-function-name --source-arn arn:aws:execute-api:us-east-1:YOUR_ACCOUNT_ID:api_id/*/HTTP_METHOD/resource --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction
```

## Referencia de variables de etapa de API Gateway
<a name="websocket-api-stages.stage-variables-reference"></a>

### URI de integración HTTP
<a name="websocket-api-stages.stage-variables-in-integration-HTTP-uris"></a>

Puede utilizar una variable de etapa como parte de una URI de integración HTTP, tal y como se muestra en los siguientes ejemplos.
+ Una URI completa sin protocol – `http://${stageVariables.<variable_name>}`
+ Un dominio complet – `http://${stageVariables.<variable_name>}/resource/operation`
+ Un subdomini – `http://${stageVariables.<variable_name>}.example.com/resource/operation`
+ Una rut – `http://example.com/${stageVariables.<variable_name>}/bar`
+ Una cadena de consult – `http://example.com/foo?q=${stageVariables.<variable_name>}` 

### Funciones de Lambda
<a name="websocket-api-stages.stage-variables-in-integration-lambda-functions"></a>

 Puede utilizar una variable de etapa en lugar de un nombre de función de Lambda o alias, como se muestra en los ejemplos siguientes. 
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:${stageVariables.<function_variable_name>}/invocations`
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:<function_name>:${stageVariables.<version_variable_name>}/invocations`

**nota**  
Para utilizar una variable de etapa para una función de Lambda, la función debe estar en la misma cuenta que la API. Las variables de etapa no admiten funciones de Lambda entre cuentas.

### AWSCredenciales de integración de
<a name="websocket-api-stages.stage-variables-in-integration-aws-credentials"></a>

 Puede utilizar una variable de etapa como parte de un ARN de credenciales de usuario o rol de AWS, como se muestra en el siguiente ejemplo. 
+  `arn:aws:iam::<account_id>:${stageVariables.<variable_name>}` 

# Implementación de las API de WebSocket en API Gateway
<a name="apigateway-set-up-websocket-deployment"></a>

 Después de crear la API de WebSocket, debe implementarla para que los usuarios puedan invocarla. 

Para implementar una API, debe crear una [implementación de API](api-gateway-basic-concept.md#apigateway-definition-api-deployment) y asociarla con una [etapa](api-gateway-basic-concept.md#apigateway-definition-api-stage). Cada etapa es una instantánea de la API que está disponible para que las aplicaciones cliente la invoquen. 

**importante**  
Cada vez que actualice una API, debe volver a implementarla. Los cambios que no sean en la configuración del escenario requieren una nueva implementación, incluidas las modificaciones en los siguientes recursos:  
Rutas
Integraciones
Autorizadores
De forma predeterminada, se puede incluir un máximo de 10 etapas por cada API. Se recomienda reutilizar las etapas para las implementaciones. 

Para llamar a una API de WebSocket implementada, el cliente envía un mensaje a la URL de la API. La URL está determinada por el nombre de host y el nombre de etapa de la API.

**nota**  
API Gateway admitirá cargas de hasta 128 KB con un tamaño máximo de trama de 32 KB. Si un mensaje supera los 32 KB, se debe dividir en varias tramas, cada una con un tamaño máximo de 32 KB.

Por ejemplo, si se utiliza el nombre de dominio predeterminado de la API, la URL de una API de WebSocket en una determinada etapa (`{stageName}`) tendrá el siguiente formato:

```
wss://{api-id}.execute-api.{region}.amazonaws.com/{stageName}
```

Para simplificar la URL de la API de WebSocket, puede crear un nombre de dominio personalizado (por ejemplo, `api.example.com`) para sustituir el nombre de host predeterminado de la API. El proceso de configuración es el mismo que para las API de REST. Para obtener más información, consulte [Nombre de dominio personalizado para las API de REST públicas en API Gateway](how-to-custom-domains.md).

Las etapas permiten realizar un exhaustivo control de versiones de la API. Por ejemplo, puede implementar una API en una etapa `test` y una etapa `prod`, y utilizar la etapa `test` como compilación de pruebas y la etapa `prod` como compilación estable. Una vez que las actualizaciones superan la prueba, puede promover la etapa `test` como etapa `prod`. La promoción puede hacerse implementando de nuevo la API en la etapa `prod`. Para obtener más información sobre las etapas, consulte [Configuración de una etapa para una API de REST en API Gateway](set-up-stages.md).

**Topics**
+ [Creación de una implementación de la API de WebSocket mediante la AWS CLI](#apigateway-create-websocket-deployment-using-awscli)
+ [Creación de una implementación de la API de WebSocket mediante la consola de API Gateway](#apigateway-create-websocket-deployment-using-console)

## Creación de una implementación de la API de WebSocket mediante la AWS CLI
<a name="apigateway-create-websocket-deployment-using-awscli"></a>

El siguiente comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-deployment.html) permite crear una implementación:

```
aws apigatewayv2 --region us-east-1 create-deployment --api-id aabbccddee
```

El resultado será similar al siguiente:

```
{
    "DeploymentId": "fedcba",
    "DeploymentStatus": "DEPLOYED",
    "CreatedDate": "2018-11-15T06:49:09Z"
}
```

La API implementada no se puede invocar hasta que la implementación se asocia a una etapa. Puede crear una etapa nueva o reutilizar una creada previamente.

El siguiente comando [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-stage.html) permite crear una nueva etapa y asociarla a la implementación:

```
aws apigatewayv2 --region us-east-1 create-stage --api-id aabbccddee --deployment-id fedcba --stage-name test
```

El resultado es similar al siguiente:

```
{
    "StageName": "test",
    "CreatedDate": "2018-11-15T06:50:28Z",
    "DeploymentId": "fedcba",
    "DefaultRouteSettings": {
        "MetricsEnabled": false,
        "ThrottlingBurstLimit": 5000,
        "DataTraceEnabled": false,
        "ThrottlingRateLimit": 10000.0
    },
    "LastUpdatedDate": "2018-11-15T06:50:28Z",
    "StageVariables": {},
    "RouteSettings": {}
}
```

También puede reutilizar una etapa ya existente actualizando la propiedad `deploymentId` de la etapa con el ID de la implementación que acaba de crear (*deployment-id*). El siguiente comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) permite actualizar el ID de implementación de la etapa:

```
aws apigatewayv2 update-stage --region region \
    --api-id api-id \ 
    --stage-name stage-name \ 
    --deployment-id deployment-id
```

## Creación de una implementación de la API de WebSocket mediante la consola de API Gateway
<a name="apigateway-create-websocket-deployment-using-console"></a>

Para utilizar la consola de API Gateway para crear una implementación de una API de WebSocket:

1. Inicie sesión en la consola de API Gateway y elija la API.

1. Elija **Implementar API**.

1. Elija la etapa que desee en el menú desplegable o escriba el nombre de una etapa nueva.

# Política de seguridad de las API de WebSocket en API Gateway
<a name="websocket-api-ciphers"></a>

API Gateway aplica una política de seguridad de `TLS_1_2` para todos los puntos de conexión de la API de WebSocket.

Una *política de seguridad* es una combinación predefinida de versión mínima de TLS y conjuntos de cifrado que ofrece Amazon API Gateway. El protocolo TLS soluciona los problemas de seguridad de red como, por ejemplo, la manipulación y el acceso no autorizado entre un cliente y el servidor. Cuando sus clientes establecen un protocolo de conexión a TLS con la API a través del dominio personalizado, la política de seguridad aplica la versión de TLS y opciones del conjunto de cifrado que sus clientes pueden elegir utilizar. Esta política de seguridad acepta el tráfico de TLS 1.2 y TLS 1.3 y rechaza el tráfico de TLS 1.0.

## Protocolos y cifrados TLS compatibles para las API de WebSocket
<a name="websocket-api-custom-domain-ciphers-list"></a>

En la siguiente tabla se describen los protocolos TLS compatibles con las API de WebSocket.


| **Protocolos TLS** | **Política de seguridad de TLS\$11\$12** | 
| --- | --- | 
| TLSv1.3 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| TLSv1.2 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 

En la siguiente tabla se describen los cifrados de TLS que están disponibles para la política de seguridad de TLS 1\$12 para las API de WebSocket.


| **Cifrados TLS** | **Política de seguridad de TLS\$11\$12** | 
| --- | --- | 
| TLS\$1AES\$1128\$1GCM\$1SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| TLS\$1AES\$1256\$1GCM\$1SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| TLS\$1CHACHA20\$1POLY1305\$1SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-ECDSA-AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-RSA-AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-ECDSA-AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-RSA-AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-ECDSA-AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-RSA-AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-ECDSA-AES256-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| ECDHE-RSA-AES256-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| AES128-GCM-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| AES128-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| AES256-GCM-SHA384 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 
| AES256-SHA256 | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/success_icon.svg) Sí | 

## Nombre del cifrado OpenSSL y RFC
<a name="apigateway-secure-connections-openssl-rfc-cipher-names-websocket"></a>

OpenSSL e IETF RFC 5246 utilizan nombres distintos para los mismos cifrados. Para obtener una lista de los nombres de los cifrados, consulte [Nombre del cifrado OpenSSL y RFC](apigateway-security-policies-list.md#apigateway-secure-connections-openssl-rfc-cipher-names).

## Información acerca de las API de REST y las API HTTP
<a name="apigateway-websocket-additional-apis"></a>

Para obtener más información sobre las API de REST y las API HTTP, consulte [Elección de una política de seguridad para el dominio personalizado en API Gateway](apigateway-custom-domain-tls-version.md) y [Política de seguridad de las API de HTTP en API Gateway](http-api-ciphers.md).

# Nombres de dominio personalizados para las API de WebSocket en API Gateway
<a name="websocket-api-custom-domain-names"></a>

Los*nombres de dominio personalizados* son direcciones URL más sencillas e intuitivas que puede proporcionar a los usuarios de la API.

Después de implementar la API, usted (y sus clientes) puede invocar la API utilizando la URL base predeterminada con el siguiente formato: 

```
https://api-id.execute-api.region.amazonaws.com/stage
```

donde *api-id* lo genera API Gateway, *region* es la región de AWS y *stage* lo especifica usted al implementar la API.

La parte del nombre de host de la URL, `api-id.execute-api.region.amazonaws.com`, hace referencia a un punto de conexión de la API. El punto de conexión de la API predeterminado se genera aleatoriamente y no es muy descriptivo.

Con los nombres de dominio personalizados, puede configurar el nombre de host de la API y elegir una ruta base (por ejemplo, `myservice`) para asignarle una URL alternativa. Por ejemplo, una URL base de la API más simple puede ser:

```
https://api.example.com/myservice
```

## Consideraciones
<a name="websocket-api-custom-domain-names-considerations"></a>

Las siguientes consideraciones pueden afectar el uso de un nombre de dominio personalizado.
+ Si asigna un nombre de dominio personalizado a una API de WebSocket, no puede asignarlo a una API de REST o HTTP.
+ Solo se admiten nombres de dominio personalizados regionales.
+ Para la versión de TLS mínima, solo se admite TLS 1.2.
+ Debe crear o actualizar el registro de recursos del proveedor de DNS para asignarlo al punto de conexión de la API. Si no se realiza este mapeo, las solicitudes de API vinculadas al nombre de dominio personalizado no pueden llegar a API Gateway.
+ Puede admitir un número casi infinito de nombres de dominio sin exceder el límite predeterminado mediante el uso de un certificado comodín. Para obtener más información, consulte [Nombres de dominio personalizados comodín](http-api-custom-domain-names.md#http-wildcard-custom-domain-names).

## Requisitos previos
<a name="websocket-api-custom-domain-names-prerequisites"></a>

Los siguientes son requisitos previos para un nombre de dominio personalizado.

### Registrar un nombre de dominio
<a name="websocket-api-custom-domain-names-register"></a>

Debe disponer de un nombre de dominio de Internet registrado para poder crear nombres de dominio personalizados para sus API. Puede registrar su nombre de dominio de Internet con [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/) o un registrador de dominios de terceros de su elección. Su nombre de dominio personalizado puede ser el nombre de un subdominio o el dominio raíz (lo que recibe el nombre de “vértice de zona”) de un dominio de Internet registrado.

El nombre de dominio debe seguir la especificación [RFC 1035](https://tools.ietf.org/html/rfc1035#section-2.3.4) y puede tener un máximo de 63 octetos por etiqueta y 255 octetos en total.

### Certificados para nombres de dominio personalizados
<a name="websocket-api-custom-domain-names-certificates"></a>

Antes de configurar un nombre de dominio personalizado para una API, debe disponer de un certificado SSL/TLS listo en ACM. Si ACM no está disponible en la región de AWS donde va a crear su nombre de dominio personalizado, debe importar un certificado en API Gateway en esa región.

Para importar un certificado SSL/TLS, debe proporcionar el cuerpo del certificado SSL/TLS con formato PEM, su clave privada y la cadena de certificados para el nombre de dominio personalizado.

Los certificados almacenados en ACM se identifican mediante su ARN. Con los certificados emitidos por ACM no tiene que preocuparse de si se exponen datos del certificado confidenciales, como la clave privada. Para utilizar un certificado administrado por AWS para un nombre de dominio, solo tiene que hacer referencia a su ARN. 

Si la aplicación utiliza asignación de certificados, también conocido como asignación SSL, para asignar un certificado de ACM, es posible que la aplicación no se pueda conectar al dominio una vez que AWS renueva el certificado. Para obtener más información, consulte [Problemas de asignación de certificados](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html) en la *Guía del usuario de AWS Certificate Manager*.

## Nombres de dominio personalizados comodín
<a name="websocket-api-wildcard-custom-domain-names"></a>

Con los nombres de dominio personalizados comodín, puede admitir un número casi infinito de nombres de dominio sin exceder el [límite predeterminado](limits.md). Por ejemplo, puede dar a cada uno de los clientes su propio nombre de dominio, `customername.api.example.com`.

Para crear un nombre de dominio personalizado comodín, especifique un comodín (`*`) como primer subdominio de un dominio personalizado que represente todos los subdominios posibles de un dominio raíz.

Por ejemplo, el nombre de dominio personalizado comodín `*.example.com` produce subdominios como `a.example.com`, `b.example.com` y `c.example.com`, que enrutan al mismo dominio.

Los nombres de dominio personalizados comodín admiten configuraciones distintas de los nombres de dominio personalizados estándar de API Gateway. Por ejemplo, en una sola cuenta de AWS, puede configurar `*.example.com` y `a.example.com` para que se comporten de manera diferente.

Puede utilizar las variables de contexto `$context.domainName` y `$context.domainPrefix` para determinar el nombre de dominio que un cliente utilizó para llamar a la API. Para obtener más información acerca de las variables de contexto, consulte [Variables para transformaciones de datos para API Gateway](api-gateway-mapping-template-reference.md).

Para crear un nombre de dominio personalizado comodín, debe proporcionar un certificado emitido por ACM que se haya validado utilizando el método DNS o de validación de correo electrónico.

**nota**  
No se puede crear un nombre de dominio personalizado comodín si una cuenta de AWS diferente ha creado un nombre de dominio personalizado que entra en conflicto con el nombre de dominio personalizado comodín. Por ejemplo, si la cuenta A ha creado `a.example.com`, la cuenta B no puede crear el nombre de dominio personalizado comodín `*.example.com`.  
Si la cuenta A y la cuenta B comparten un propietario, puede contactar con el [Centro de soporte de AWS](https://console.aws.amazon.com/support/home#/) para solicitar una excepción.

## Siguientes pasos para nombres de dominio personalizados
<a name="websocket-api-custom-domain-names-next-steps"></a>

Para configurar un nombre de dominio personalizado para una API de HTTP, utilice la sección API de REST de la Guía para desarrolladores de API Gateway. 

En primer lugar, especifique el certificado para el nombre de dominio personalizado. Para obtener más información, consulte [Preparación de certificados en AWS Certificate Manager](how-to-specify-certificate-for-custom-domain-name.md). A continuación, cree un nombre de dominio personalizado regional. Para obtener más información, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

# Asignación de etapas de API a un nombre de dominio personalizado para las API de WebSocket
<a name="websocket-api-mappings"></a>

Los mapeos de la API se utilizan para conectar etapas de la API a un nombre de dominio personalizado. Después de crear un nombre de dominio y configurar registros DNS, se utilizan mapeos de la API para enviar tráfico a las API a través del nombre de dominio personalizado.

Un mapeo de la API especifica una API, una etapa y, de forma opcional, una ruta que se utilizará para el mapeo. Por ejemplo, puede mapear la etapa de `production` de una API a `wss://api.example.com/orders`.

Antes de crear un mapeo de la API, debe tener una API, una etapa y un nombre de dominio personalizado. Para obtener más información sobre cómo crear un nombre de dominio personalizado, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

## Restricciones
<a name="websocket-api-mappings-restrictions"></a>
+ En un mapeo de la API, el nombre de dominio personalizado y las API mapeadas deben estar en la misma cuenta de AWS.
+ Los mapeos de la API deben contener solo letras, números y los siguientes caracteres: `$-_.+!*'()`.
+ La longitud máxima de la ruta en un mapeo de la API es de 300 caracteres.
+ No puede mapear las API de WebSocket al mismo nombre de dominio personalizado que una API HTTP o API REST.
+ Si crea una asignación de API con varios niveles, API Gateway convierte todos los nombres de encabezado a minúsculas.

## Creación de un mapeo de la API
<a name="websocket-api-mappings-examples"></a>

Para crear un mapeo de la API, primero debe crear un nombre de dominio personalizado, una API y una etapa. Para obtener información sobre cómo crear un nombre de dominio personalizado, consulte [Configuración de un nombre de dominio personalizado regional en API Gateway](apigateway-regional-api-custom-domain-create.md).

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

**Para crear un mapeo de la API**

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 dominio personalizados).

1. Seleccione un nombre de dominio personalizado que ya haya creado.

1. Elija **API mappings** (Mapeos de la API).

1. Elija **Configure API mappings (Configurar asignaciones de API)**.

1. Seleccione **Add new mapping (Agregar nueva asignación)**.

1. Introduzca una **API**, una **Stage** (Etapa) y, de forma opcional, una **Path** (Ruta).

1. Seleccione **Guardar**.

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

El siguiente comando [create-api-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api-mapping.html) permite crear una asignación de API. En este ejemplo, API Gateway envía solicitudes a `api.example.com/v1` a la API y a la etapa especificada.

```
aws apigatewayv2 create-api-mapping \
    --domain-name api.example.com \
    --api-mapping-key v1 \
    --api-id a1b2c3d4 \
    --stage test
```

------
#### [ CloudFormation ]

El siguiente ejemplo de CloudFormation crea un mapeo de la API.

```
MyApiMapping:
  Type: 'AWS::ApiGatewayV2::ApiMapping'
  Properties:
    DomainName: api.example.com
    ApiMappingKey: 'v1'
    ApiId: !Ref MyApi
    Stage: !Ref MyStage
```

------

# Tipos de direcciones IP para nombres de dominio personalizados para API de WebSocket
<a name="websocket-api-custom-domain-names-ip-address-type"></a>

Al crear un nombre de dominio personalizado, se especifica el tipo de direcciones IP que puede invocar el dominio. Puede elegir IPv4 para resolver las direcciones IPv4 para invocar el dominio o puede elegir pila doble para permitir que las direcciones IPv4 e IPv6 invoquen el dominio. Le recomendamos que establezca el tipo de dirección IP en pila doble para mitigar el agotamiento del espacio IP o para mejorar la postura de seguridad. Para obtener más información sobre los beneficios de un tipo de dirección IP de pila doble, consulte [IPv6 en AWS](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/internet-protocol-version-6.html).

## Consideraciones para los tipos de direcciones IP
<a name="websocket-api-custom-domain-names-ip-address-type-considerations"></a>

Es posible que las siguientes consideraciones afecten al uso de los tipos de direcciones IP.
+ El tipo de dirección IP predeterminado para los nombres de dominio personalizados de API Gateway es IPv4.
+ El nombre de dominio personalizado no necesita tener el mismo tipo de dirección IP para todas las API asignadas a él. Si desactiva el punto de conexión de la API predeterminado, esto podría afectar a la forma en que los intermediarios pueden invocar a la API.

## Cambio del tipo de dirección IP del nombre de dominio personalizado
<a name="websocket-api-custom-domain-names-ip-address-type-change"></a>

Puede cambiar el tipo de dirección IP actualizando la configuración de punto de conexión del nombre de dominio. Puede actualizar la configuración de punto de conexión mediante el uso de la Consola de administración de AWS, la AWS CLI, CloudFormation, o un AWS SDK.

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

**Cambio del tipo de dirección IP de un nombre de dominio personalizado**

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 un nombre de dominio personalizado público.

1. Elija la **Configuración de punto de conexión**.

1. Para tipo de dirección IP, seleccione **IPv4** o **Pila doble**.

1. Seleccione **Save**.

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

El siguiente comando [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html) actualiza una API para que tenga un tipo de dirección IP de pila doble:

```
aws apigatewayv2 update-domain-name \
   --domain-name dualstack.example.com \
   --domain-name-configurations CertificateArn=arn:aws:acm:us-east-1:111122223333:certificate/abcd1234-5678-abc,IpAddressType=dualstack
```

El resultado será similar al siguiente:

```
{
    "ApiMappingSelectionExpression": "$request.basepath",
    "DomainName": "dualstack.example.com",
    "DomainNameConfigurations": [
        {
            "ApiGatewayDomainName": "d-abcd1234.execute-api.us-east-1.amazonaws.com",
            "CertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/abcd1234-5678-abc",
            "DomainNameStatus": "AVAILABLE",
            "EndpointType": "REGIONAL",
            "HostedZoneId": "Z3LQWSYCGH4ADY",
            "SecurityPolicy": "TLS_1_2",
            "IpAddressType": "dualstack"
        }
    ],
    "Tags": {}
}
```

------

# Deshabilitación del punto de conexión predeterminado para las API de WebSocket
<a name="websocket-api-disable-default-endpoint"></a>

De forma predeterminada, los clientes pueden invocar su API mediante el punto de conexión `execute-api` que API Gateway genera para ella. Para asegurarse de que los clientes solo puedan acceder a su API mediante un nombre de dominio personalizado, deshabilite el punto de conexión predeterminado `execute-api`. Cuando deshabilita el punto de conexión predeterminado, esto afecta a todas las etapas de una API.

El siguiente procedimiento muestra cómo deshabilitar el punto de conexión predeterminado para una API de WebSocket.

------
#### [ 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 una API de WebSocket.

1. Elija **Configuración de la API**.

1. En **Detalles de API**, elija **Editar**.

1. En **Punto de conexión predeterminado**, elija **Inactivo**.

1. Elija **Guardar cambios**.

1. En el panel de navegación principal, elija **Rutas**.

1. Elija **Implementar** y, a continuación, vuelva a implementar la API o cree una nueva etapa para que el cambio surta efecto.

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

El siguiente comando [update-api](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-api.html) desactiva el punto de conexión predeterminado de una API de WebSocket.

```
aws apigatewayv2 update-api \
    --api-id abcdef123 \
    --disable-execute-api-endpoint
```

Después de desactivar el punto de conexión predeterminado, debe implementar la API para que el cambio surta efecto.

El siguiente comando de la AWS CLI crea una implementación.

```
aws apigatewayv2 create-deployment \
    --api-id abcdef123 \
    --stage-name dev
```

------