Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

374
Vistas
Nombre de dominio personalizado para la API de WebSockets con Serverless

Administro una API de REST para una aplicación sin servidor y quiero ampliar esta configuración con una API de WebSockets en la misma región. Todo debe manejarse con el mismo certificado, pero diferentes subdominios.

Al principio creé un nuevo dominio personalizado con sls create_domain --stage=... . Luego traté de agregarlo a la nueva pila de WebSockets, pero terminé con este error:

Error: no se pudieron encontrar los recursos de CloudFormation para...

Encontré en Github que esto parece no ser compatible con CloudFormation en este momento, por lo que Serverless no lo admite.

Así que traté de adjuntar mi escenario al nombre de dominio personalizado manualmente en la interfaz de usuario:

La combinación de API REST y API HTTP en el mismo nombre de dominio solo se puede lograr a través de la interfaz DomainName V2 de API Gateway. Actualmente, las API de WebSocket solo se pueden adjuntar a un nombre de dominio con otras API de WebSocket. Esto también debe ocurrir a través de la interfaz DomainName V2 de API Gateway.

Surge más confusión, ya que ni siquiera es el mismo nombre de dominio en este caso. El nuevo nombre de dominio era sockets.<DOMAIN>.com y el existente era api.<DOMAIN>.com . ¿O subdominios diferentes están cayendo en 'mismo nombre de dominio'?

Sin embargo, traté de crear el dominio personalizado nuevamente a través de la CLI apigatewayv2:

 aws apigatewayv2 create-domain-name --domain-name <DOMAIN> --domain-name-configurations file://domain-configuration.json --region eu-west-1

configuración-dominio.json:

 [ { "ApiGatewayDomainName": "<DOMAIN>", "CertificateArn": "arn:aws:acm:us-east-1:<ACCOUNT_ID>:certificate/<CERT_ID>", "CertificateName": "<DOMAIN>", "DomainNameStatus": "AVAILABLE", "EndpointType": "EDGE", "SecurityPolicy": "TLS_1_2" }

]

Pero esto da como resultado el siguiente error:

Se produjo un error (BadRequestException) al llamar a la operación CreateDomainName: ARN de certificado no válido: arn:aws:acm:us-east-1:924441585974:certificate/b88f0a3f-1393-4a16-a876-9830852b5207. El certificado debe estar en 'eu-west-1'.

Mi estado actual era que API Gateway solo permite que los certificados personalizados se ubiquen en us-east-1, por lo que este error me confunde aún más.

Resumen : estoy completamente atascado en cómo obtener un nombre de dominio personalizado adjunto a mi etapa API de WebSocket. ¡Estoy feliz por cada pista en la dirección correcta!

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Encontré una solución con una plantilla de recursos de CloudFormation personalizada:

 resources: Resources: WebSocketDomainName: Type: AWS::ApiGatewayV2::DomainName Properties: DomainName: <domain-name> DomainNameConfigurations: - EndpointType: 'REGIONAL' CertificateArn: <cert-arn> WebSocketMapping: Type: AWS::ApiGatewayV2::ApiMapping Properties: ApiId: <api-id> DomainName: !Ref WebSocketDomainName Stage: <stage-name> DNSRecord: Type: AWS::Route53::RecordSet Properties: HostedZoneName: <hosted-zone-name>. TTL: '900' ResourceRecords: - !GetAtt [ WebSocketDomainName, RegionalDomainName ] Name: <domain-name> Type: CNAME

Editar : ¡Ahora trabajando conserverless-domain-manager ! 🎉

 custom: customDomain: rest: domainName: rest.serverless.foo.com stage: ci basePath: api certificateName: '*.foo.com' createRoute53Record: true endpointType: 'regional' securityPolicy: tls_1_2 http: domainName: http.serverless.foo.com stage: ci basePath: api certificateName: '*.foo.com' createRoute53Record: true endpointType: 'regional' securityPolicy: tls_1_2 websocket: domainName: ws.serverless.foo.com stage: ci basePath: api certificateName: '*.foo.com' createRoute53Record: true endpointType: 'regional' securityPolicy: tls_1_2
over 4 years ago · Santiago Trujillo Denunciar

0

¡Gracias @tpschmidt por la útil respuesta! Solo para agregar, en caso de que desee un BasePathMapping para su dominio websocket, agregue ApiMappingKey a la formación en la nube proporcionada anteriormente. P.ej:

 WebSocketMapping: Type: AWS::ApiGatewayV2::ApiMapping Properties: ApiId: <api-id> DomainName: !Ref WebSocketDomainName Stage: <stage-name> ApiMappingKey: <stage-name> #(eg prod)
over 4 years ago · Santiago Trujillo Denunciar

0

Tuve que hacer un par de ajustes menores para tener un Lambda en una VPC privada con soporte para WebSockets y un dominio personalizado.

  1. El CertificateArn debe ser de ACM y no puede ser un certificado cargado en IAM.
  2. Usé un registro A en lugar de un CNAME
 WebSocketDomainName: Type: AWS::ApiGatewayV2::DomainName Properties: DomainName: !Ref DomainName DomainNameConfigurations: - EndpointType: REGIONAL CertificateArn: <your-certificate-arn> # This maps /staging or /prod to just the domain name WebSocketMapping: Type: AWS::ApiGatewayV2::ApiMapping Properties: ApiId: <your-api-id> DomainName: !Ref WebSocketDomainName Stage: <your-stage> Route53DNS: Type: AWS::Route53::RecordSetGroup Properties: HostedZoneName: !Ref Route53HostedZone RecordSets: - Name: !Ref DomainName Type: A AliasTarget: HostedZoneId: ZLY8HYME6SFDD # This means eu-west-1 ApiGateWay DNSName: !GetAtt [WebSocketDomainName, RegionalDomainName]

Para su comprobación HostedZoneId : https://docs.aws.amazon.com/general/latest/gr/apigateway.html

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda