services example create aws amazon-web-services aws-lambda aws-api-gateway serverless-framework

amazon-web-services - example - rest api lambda aws



¿Cómo agregar un dominio personalizado para una API implementada/implementada en un framework sin servidor 1.0.0? (1)

Serverless-1.0.0-rc.1 permite implementar una API para que sea accesible a través de una puerta de enlace de la API de AWS.

La pregunta: ¿Necesito que la API desplegada esté expuesta a través de un dominio personalizado con certificado SSL en lugar de uno asignado aleatoriamente (URL https://qwertylgbtqert.execute-api.... )?

¿Se puede hacer eso desde serverless.yml o framework sin servidor?

Aquí está mi simple servicio serverless.yml definición:

service: my-service provider: name: aws runtime: nodejs4.3 functions: generate: handler: handler.generate events: - http: method: get path: url cors: true

Hay una pregunta que se relaciona con esto: la respuesta aquí , pero no proporciona respuestas aplicables. Especialmente cómo asignar el dominio personalizado desde el propio serverless.yml .

Pensó que si es posible crear un recurso de AWS :: Route53 y aprovechar eso, sin embargo, no sé cómo hacerlo en serverless.


Primero debe crear el dominio personalizado y cargar los certificados. Esto no debe formar parte de este código ni de la implementación de este software.

Después de tener un dominio personalizado, debe pensar en términos de CloudFormation.

Como con todo lo demás en Serverless Framework; puede aprovechar las plantillas de CloudFormation para administrar recursos en AWS.

Entonces, su pregunta es: ¿cómo puede agregar su puerta de enlace API a su dominio personalizado en CloudFormation (sugerencia: hay mucha más ayuda en Google si busca CloudFormation en lugar de Serverless Framework)? Al crear un AWS::ApiGateway::BasePathMapping en CloudFormation es la respuesta.

Esto se hace en los Recursos en su archivo serverless.yml . Como este por ejemplo:

resources: Resources: pathmapping: Type: AWS::ApiGateway::BasePathMapping Properties: BasePath: oauth2 DomainName: ${self:vars.domainName} RestApiId: Ref: ApiGatewayRestApi Stage: ${self:vars.stage}

Esto requiere que tenga variables para el domainName y stageName en el archivo stageName para las etapas que usa.

Edición: para las versiones de Serverless Framework 1 antes de rc1, debe agregar DependsOn: IamPolicyLambda al recurso de mapeo de ruta. Esto se solucionó en: https://github.com/serverless/serverless/pull/1783

Antes de rc1 debes usar RestApiApigEvent lugar de ApiGatewayRestApi