【问题标题】:Using serverless to add new lambda functions to same Gateway API?使用无服务器向同一个网关 API 添加新的 lambda 函数?
【发布时间】:2019-09-18 23:33:08
【问题描述】:

我正在开发多个功能,我们将使用这些功能来管理 S3 存储桶中的图像。我试图弄清楚如何使用无服务器用户将各种 node.js 脚本部署到 lambda 并且到目前为止已经弄清楚了那部分。但我想将它们全部部署为同一网关 API 下的不同路径。我尝试在提供程序部分下添加“apiName”,但它只是创建了一个与第一个名称相同的新 GatewayAPI。

serverless.yml 示例:

service: GetObjectInfo

frameworkVersion: ">=1.1.0"

custom:
  region: us-east-2

provider:
  name: aws
  runtime: nodejs8.10
  region: ${self:custom.region}
  stage: ${opt:stage, 'dev'}
  apiName: myGatewayAPI
  memorySize: 256
  timeout: 2
  role: arn:aws:iam::118934906513:role/lambda-s3-role

functions:
  GetObjectInfo:
    name: GetObjectInfo
    handler: index.handler
    events:
      - http:
          path: /GetObjectInfo
          method: POST
          cors: true
    environment:
      REGION: ${self:custom.region}

package:
  exclude:
    - package-lock.json
    - test/**
    - .idea/**
    - .git/**
    - node_modules

在第二个/第三个/第 n 个中,我该怎么做才能让他们将网关部分部署到同一个网关接口中?出于维护目的,我更喜欢将 lambda 代码保存在单独的项目/git 文件夹中。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-serverless amazon-gateway


    【解决方案1】:

    我认为 serverless 框架默认在同一个 API Gateway 下创建所有功能。

    例如以下应该有效:

    custom:
      region: us-east-2
    
    provider:
      name: aws
      runtime: nodejs8.10
      region: ${self:custom.region}
      stage: ${opt:stage, 'dev'}
      memorySize: 256
      timeout: 2
      role: arn:aws:iam::118934906513:role/lambda-s3-role
    
    functions:
      GetObjectInfo:
        name: GetObjectInfo
        handler: index.handler
        events:
          - http:
              path: /GetObjectInfo
              method: POST
              cors: true
        environment:
          REGION: ${self:custom.region}
    
      PutObjectInfo:
        name: PutObjectInfo
        handler: index.handlerPut
        events:
          - http:
              path: /PutObjectInfo
              method: PUT
              cors: true
        environment:
          REGION: ${self:custom.region}
    

    【讨论】:

    • 所以他们必须在同一个项目/存储库中?我希望将不同工具的 [代码] 分开,因为每个工具都在做不同的事情。
    • 例如我有一个可以调整大小和图像并返回调整后文件的 url。我有一个将在图像上运行二进制文件以获取图像蒙版的属性。我有一个只检索对象头,这样我就可以检查字节、mtime 和元数据。它们在完全不同的地方用于完全不同的事情。在同一个 api 中很好,但每个的代码是不同的。
    • this 是您要找的吗?它将创建多个 API 网关,但您可以使用单个域来调用它们
    • 另一个问题 - 如果我将它们组合在一起,并非所有文件都需要所有文件。我可以按功能放置不同的包含/排除块吗?
    • 单独打包节点函数你应该使用github.com/serverless-heaven/serverless-webpack
    猜你喜欢
    • 2021-04-25
    • 2021-07-13
    • 1970-01-01
    • 2017-06-17
    • 2018-08-27
    • 2018-07-24
    • 2021-01-29
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多