首页 > 解决方案 > 使用无服务器向同一个网关 API 添加新的 lambda 函数?

问题描述

我正在开发多个功能,我们将使用这些功能来管理 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

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

标签: amazon-web-servicesamazon-s3aws-serverlessamazon-gateway

解决方案


我认为无服务器框架默认在同一个 API 网关下创建所有功能。

例如以下应该工作:

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}

推荐阅读