

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS::Serverless::WebSocketApi
<a name="sam-resource-websocketapi"></a>

Crea una API de Amazon WebSocket API Gateway, que le permite crear aplicaciones de comunicación interactiva bidireccional. WebSocket APIs permite que el servidor envíe mensajes a los clientes sin que el cliente tenga que solicitarlos. Para obtener más información, consulte Cómo [trabajar con WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html) en la *Guía para desarrolladores de API Gateway*.

Te recomendamos que utilices CloudFormation enlaces o políticas de IAM para comprobar que los recursos de API Gateway tienen autorizadores adjuntos para controlar el acceso a ellos.

Para obtener más información sobre el uso de CloudFormation ganchos, consulte [Registrar ganchos](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/registering-hook-python.html) en la *guía del usuario de la CloudFormation CLI* y en el [apigw-enforce-authorizer](https://github.com/aws-cloudformation/aws-cloudformation-samples/tree/main/hooks/python-hooks/apigw-enforce-authorizer/) GitHub repositorio.

Para obtener más información sobre el uso de las políticas de IAM, consulta [Exigir que las rutas de API tengan autorización](https://docs.aws.amazon.com/apigateway/latest/developerguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-require-authorization) en la *Guía para desarrolladores de API Gateway*.

**nota**  
Al realizar la implementación en AWS CloudFormation, AWS SAM transforma AWS SAM los recursos en CloudFormation recursos. Para obtener más información, consulte [CloudFormation Recursos generados para AWS SAM](sam-specification-generated-resources.md).

## Sintaxis
<a name="sam-resource-websocketapi-syntax"></a>

Para declarar esta entidad en tu plantilla AWS Serverless Application Model (AWS SAM), usa la siguiente sintaxis.

### YAML
<a name="sam-resource-websocketapi-syntax.yaml"></a>

```
Type: AWS::Serverless::WebSocketApi
Properties:
  [ApiKeySelectionExpression](#sam-websocketapi-apikeyselectionexpression): {{String}}
  [AccessLogSettings](#sam-websocketapi-accesslogsettings): {{[AccessLogSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesslogsettings)}}
  [Auth](#sam-websocketapi-auth): {{WebSocketApiAuth}}
  [DefaultRouteSettings](#sam-websocketapi-defaultroutesettings): {{[RouteSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-routesettings)}}
  [Description](#sam-websocketapi-description): {{String}}
  [DisableExecuteApiEndpoint](#sam-websocketapi-disableexecuteapiendpoint): {{Boolean}}
  [DisableSchemaValidation](#sam-websocketapi-disableschemavalidation): {{Boolean}}
  [Domain](#sam-websocketapi-domain): {{WebSocketApiDomainConfiguration}}
  [IpAddressType](#sam-websocketapi-ipaddresstype): {{String}}
  [Name](#sam-websocketapi-name): {{String}}
  [PropagateTags](#sam-websocketapi-propagatetags): {{Boolean}}
  [Routes](#sam-websocketapi-routes): {{RouteConfiguration}}
  [RouteSelectionExpression](#sam-websocketapi-routeselectionexpression): {{String}}
  [RouteSettings](#sam-websocketapi-routesettings): {{[RouteSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-routesettings)}}
  [StageName](#sam-websocketapi-stagename): {{String}}
  [StageVariables](#sam-websocketapi-stagevariables): {{[Json](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-stagevariables)}}
  [Tags](#sam-websocketapi-tags): {{Map}}
```

## Propiedades
<a name="sam-resource-websocketapi-properties"></a>

 `ApiKeySelectionExpression`   <a name="sam-websocketapi-apikeyselectionexpression"></a>
Es una expresión de selección de clave de API. Para obtener más información, consulte [Expresiones de selección de claves de API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions) en la *Guía para desarrolladores de API Gateway*.  
*Tipo:* cadena  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se transfiere directamente a la `[ApiKeySelectionExpression](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-apikeyselectionexpression)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `AccessLogSettings`   <a name="sam-websocketapi-accesslogsettings"></a>
Configuración del registro de acceso en una etapa.  
*Tipo:* [AccessLogSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesslogsettings)  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[AccessLogSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesslogsettings)` propiedad de un `AWS::ApiGatewayV2::Stage` recurso.

 `Auth`   <a name="sam-websocketapi-auth"></a>
Configura la autorización para controlar el acceso a tu WebSocket API. La autorización se aplica a la `$connect` ruta.  
Para obtener más información, consulte [Controlar el acceso a WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-control-access.html) en la *Guía para desarrolladores de API Gateway*.  
*Tipo:* [WebSocketApiAuth](sam-property-websocketapi-websocketapiauth.md)  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad es exclusiva de AWS SAM y no tiene un CloudFormation equivalente.

 `DefaultRouteSettings`   <a name="sam-websocketapi-defaultroutesettings"></a>
La configuración de ruta predeterminada para esta WebSocket API. Esta configuración se aplica a todas las rutas, a menos que la propiedad `RouteSettings` la anula para determinadas rutas.  
*Tipo:* [RouteSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-routesettings)  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[DefaultRouteSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-defaultroutesettings)` propiedad de un `AWS::ApiGatewayV2::Stage` recurso.

 `Description`   <a name="sam-websocketapi-description"></a>
Una descripción de la WebSocket API.  
*Tipo:* cadena  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[Description](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-description)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `DisableExecuteApiEndpoint`   <a name="sam-websocketapi-disableexecuteapiendpoint"></a>
Especifica si los clientes pueden invocar la API mediante el punto de conexión `execute-api` predeterminado. Para exigir que los clientes utilicen un nombre de dominio personalizado para invocar la API, desactive el punto de enlace predeterminado.  
*Tipo*: Booleano  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[DisableExecuteApiEndpoint](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-disableexecuteapiendpoint)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `DisableSchemaValidation`   <a name="sam-websocketapi-disableschemavalidation"></a>
Evite validar modelos al crear una implementación.  
*Tipo*: Booleano  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[DisableSchemaValidation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-disableschemavalidation)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `Domain`   <a name="sam-websocketapi-domain"></a>
Configura un dominio personalizado para esta WebSocket API.  
WebSocket APIs no admiten la autenticación TLS mutua (MTLS). Si especifica `MutualTlsAuthentication` o`OwnershipVerificationCertificateArn`, AWS SAM devolverá un error.
*Tipo:* [WebSocketApiDomainConfiguration](sam-property-websocketapi-websocketapidomainconfiguration.md)  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad es exclusiva de AWS SAM y no tiene un CloudFormation equivalente.

 `IpAddressType`   <a name="sam-websocketapi-ipaddresstype"></a>
El tipo de dirección IP de la API. Los valores válidos son IPv4 solo `ipv4` para IPv4 y `dualstack` para IPv6.  
*Tipo:* cadena  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[IpAddressType](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-ipaddresstype)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `Name`   <a name="sam-websocketapi-name"></a>
Un nombre para la WebSocket API. Si no especificas un nombre, AWS SAM generará uno para ti.  
*Tipo:* cadena  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[Name](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-name)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `PropagateTags`   <a name="sam-websocketapi-propagatetags"></a>
Si`true`, AWS SAM agrega la `Tags` propiedad a los `AWS::ApiGatewayV2::DomainName` recursos `AWS::ApiGatewayV2::Stage` y que AWS SAM genera.  
*Tipo*: Booleano  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad es exclusiva AWS SAM y no tiene un CloudFormation equivalente.

 `Routes`   <a name="sam-websocketapi-routes"></a>
Las configuraciones de ruta para esta WebSocket API. Las rutas definen cómo se enrutan los mensajes a las funciones Lambda. Cada ruta consta de una clave de ruta y un ARN de función Lambda.  
WebSocket APIs admiten tres rutas predefinidas: `$connect``$disconnect`, y. `$default` También puede definir rutas personalizadas.  
*Tipo:* [RouteConfiguration](sam-property-websocketapi-routeconfiguration.md)  
*Obligatorio*: sí  
*CloudFormation compatibilidad*: esta propiedad es exclusiva de AWS SAM y no tiene un CloudFormation equivalente.

 `RouteSelectionExpression`   <a name="sam-websocketapi-routeselectionexpression"></a>
La expresión de selección de rutas de la WebSocket API. Para obtener más información, consulte [Expresiones de selección de rutas](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-route-selection-expressions) en la *Guía para desarrolladores de API Gateway*.  
Un valor común es `$request.body.action` que enruta los mensajes en función de un `action` campo del cuerpo del mensaje.  
*Tipo:* cadena  
*Obligatorio*: sí  
*CloudFormation compatibilidad*: esta propiedad se transfiere directamente a la `[RouteSelectionExpression](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html#cfn-apigatewayv2-api-routeselectionexpression)` propiedad de un `AWS::ApiGatewayV2::Api` recurso.

 `RouteSettings`   <a name="sam-websocketapi-routesettings"></a>
La configuración de ruta de esta WebSocket API. Esta configuración anula la `DefaultRouteSettings` de rutas específicas.  
*Tipo:* [RouteSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-routesettings)  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[RouteSettings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-routesettings)` propiedad de un `AWS::ApiGatewayV2::Stage` recurso.

 `StageName`   <a name="sam-websocketapi-stagename"></a>
Es el nombre de la fase de la API. Si no especificas un nombre, se AWS SAM usa `default` como nombre artístico.  
*Tipo:* cadena  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se pasa directamente a la `[StageName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-stagename)` propiedad de un `AWS::ApiGatewayV2::Stage` recurso.

 `StageVariables`   <a name="sam-websocketapi-stagevariables"></a>
Una asignación que define las variables de la fase. Los nombres de las variables pueden tener caracteres alfanuméricos y de subrayado, y los valores deben coincidir. `[A-Za-z0-9-._~:/?#&=,]+`  
*Type*: [Json](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-stagevariables)  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad se transfiere directamente a la `[StageVariables](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-stagevariables)` propiedad de un `AWS::ApiGatewayV2::Stage` recurso.

 `Tags`   <a name="sam-websocketapi-tags"></a>
Un mapa (cadena a cadena) que especifica las etiquetas que se van a añadir a esta WebSocket API. Para obtener más información sobre las claves y los valores válidos de las etiquetas, consulta la [etiqueta de recursos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) en la *Guía del usuario de CloudFormation *.  
*Tipo*: mapa  
*Obligatorio*: no  
*CloudFormation compatibilidad*: esta propiedad es exclusiva de AWS SAM y no tiene un CloudFormation equivalente.

## Ejemplos
<a name="sam-resource-websocketapi-examples"></a>

### WebSocket API simple
<a name="sam-resource-websocketapi-examples-simple"></a>

En el siguiente ejemplo, se crea una WebSocket API con tres rutas.

```
Resources:
  MyWebSocketApi:
    Type: AWS::Serverless::WebSocketApi
    Properties:
      RouteSelectionExpression: $request.body.action
      Routes:
        $connect:
          FunctionArn: !GetAtt ConnectFunction.Arn
        $disconnect:
          FunctionArn: !GetAtt DisconnectFunction.Arn
        sendMessage:
          FunctionArn: !GetAtt SendMessageFunction.Arn

  ConnectFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.connect
      Runtime: nodejs20.x
      CodeUri: ./src

  DisconnectFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.disconnect
      Runtime: nodejs20.x
      CodeUri: ./src

  SendMessageFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.sendMessage
      Runtime: nodejs20.x
      CodeUri: ./src
```

### WebSocket API con Lambda Authorizer
<a name="sam-resource-websocketapi-examples-auth"></a>

En el siguiente ejemplo, se crea una WebSocket API con un autorizador Lambda.

```
Resources:
  MyWebSocketApi:
    Type: AWS::Serverless::WebSocketApi
    Properties:
      RouteSelectionExpression: $request.body.action
      Auth:
        AuthType: CUSTOM
        AuthArn: !GetAtt AuthorizerFunction.Arn
        IdentitySource:
          - route.request.header.Authorization
      Routes:
        $connect:
          FunctionArn: !GetAtt ConnectFunction.Arn
        sendMessage:
          FunctionArn: !GetAtt SendMessageFunction.Arn

  AuthorizerFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.authorize
      Runtime: nodejs20.x
      CodeUri: ./src

  ConnectFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.connect
      Runtime: nodejs20.x
      CodeUri: ./src

  SendMessageFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.sendMessage
      Runtime: nodejs20.x
      CodeUri: ./src
```