servicios web de amazon - AWS Serverless - ¿Puedo configurar mi proveedor o función lambda en mi archivo serverless.yml para usa

CorePress2024-01-25  10

Estoy teniendo algunos problemas para entender esto. Quiero definir un recurso API Gateway en mi serverless.yml y luego cualquier función lamdba que cree con un evento http usará ese recurso API.

La razón por la que hago esto es que tengo varios servicios definidos por separado que quiero agrupar bajo una API, pero en mi API principal, incluyo funciones lambda que interactúan con los datos de mis aplicaciones. Si bien estos servicios se utilizarán en la aplicación, los servicios realizan varios tipos diferentes de operaciones y tiene sentido mantenerlos separados.

Mi serverless.yml es bastante sencillo, pero cada vez que lo implemento, se crean 2 API. Uno que está en blanco y es el que defino en mis recursos y el segundo es el que crea AWS bdebido a mi función lamdba.

# NOTE: update this with your service name
frameworkVersion: '^2.28.7'
service: web-api

# Create an optimized package for our functions
package:
  individually: true

plugins:
  - serverless-bundle # Package our functions with Webpack
  - serverless-offline

custom:
  stage: ${opt:stage, self:provider.stage}

provider:
  name: aws
  runtime: nodejs12.x
  stage: ${opt:stage, 'dev'}
  region: ${opt:region, 'us-east-2'}
  apiGateway:
    restApiId: xxxxxxxxxx # <--- there is where I am having trouble
    restApiRootResourceId: xxxxxxxxxx # <--- there is where I am having trouble
  environment:
    VERSION: 'v1'

functions:
  getAbout:
    handler: src/api/about/get.main
    events:
      - http:
          path: /about
          method: get
          cors: true

resources:
  Resources:
    WebApiGW:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: '${self:provider.stage}-${self:service}'

  Outputs:
    apiGatewayRestApiId:
      Value:
        Ref: WebApiGW
      Export:
        Name: WebApiGateway-restApiId

    apiGatewayRestApiRootResourceId:
      Value:
        Fn::GetAtt:
          - WebApiGW
          - RootResourceId
      Export:
        Name: WebApiGateway-rootResourceId


------------------------------------

Desde la perspectiva de Serverless Framework, no es posible hacer referencia a valores dinámicos desde la sección Recursos porque aún no se han generado. La sección del proveedor se cargará primero para definir cómo se crearán todos los demás recursos. Es por eso que solo puedes establecer valores estáticos o valores cargados desde variables de entorno en el proveedor.

De forma predeterminada, si no establece un valor para proveedor.apiGateway.restApiId, Serverless Framework generará una nueva API para usted.

Para resolver el problema que describió, primero debe generar una puerta de enlace API en un dPila diferente y use los ID generados por esta pila en su serverless.yaml.

Hay un agradable recorrido en la documentación de Serverless Framework que muestra un ejemplo de cómo dividir su API en pequeños módulos (o grupos, como usted dijo).

En GitHub:

https://github.com/serverless/serverless/blob/master/docs/providers/aws/events/apigateway.md#share-api-gateway-and-api-resources

O en el sitio web:

https://www.serverless.com/framework/docs/providers/aws/events/apigateway/#share-api-gateway-and-api-resources

Crean un serverless-base.yaml para definir una API Gateway y exportar el IDS, luego definen dos servicios, serverless-a.yaml para ServiceA y serverless-b.yaml para ServiceB, donde usarán la API Gateway generada. por serverless-base.yaml.

1

1

Hola. Esto es útil ya que confirmó mi sospecha y que no es posible de la forma que describí. Parece que tendré que crear la API en una pila separada. Esto parece engorroso, pero entiendo la razón por la que es necesario. Además, ya leí los dos enlaces, que son un buen punto de partida.

-jpizzo

29/03/2021 a las 16:17



------------------------------------

Deberías intentar agregar recursos de API y usarlos en tus funciones como se menciona a continuación.

ejemplo para vincular recursos de API

No estoy seguro de si necesitamos colocar la puerta de enlace API en recursos, ya que el evento http ya lo creará.

Compartir Seguir Respondido

28 de marzo de 2021 a las 6:29

usuario15497917

usuario15497917

1

1

1 insignia de bronce

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare