首页 > 解决方案 > 如何定义现有的 API 网关项目以用于 serverless.yml 中的部署?

问题描述

我正在使用serverless框架来部署角度通用应用程序(aws lambda + API 网关)。每次我从不同的 PC 运行部署或只是定义一个新阶段时,无服务器会自动在 aws 中创建一个新的 API 网关项目。

# serverless.yml

# generated by @ng-toolkit/serverless
service: web-app

plugins:
  - serverless-apigw-binary

provider:
  name: aws
  runtime: nodejs8.10
  memorySize: 512
  timeout: 20
  apiName: ssr-web-app

package:
  exclude:
   - src/**
   - node_modules/**
   - firebug-lite/**
   - e2e/**
   - coverage/**
   - '!node_modules/aws-serverless-express/**'
   - '!node_modules/binary-case/**'
   - '!node_modules/type-is/**'
   - '!node_modules/media-typer/**'
   - '!node_modules/mime-types/**'
   - '!node_modules/mime-db/**'

custom:
  apigwBinary:
    types:
      - '*/*'

functions:
  api:
    handler: lambda.universal
    events:
      - http: ANY {proxy+}
      - http: ANY /

我希望每次运行部署时serverless总是使用同一个特定gateway API项目,在同一个定义的项目下创建新阶段。如何gateway API在我的 ? 中定义对现有项目(id?)的引用serverless.yml

---- 编辑 ---- 我试图添加到provider以下部分:

apiGateway: 
   restApiId: xxxxxxxxxx 
   restApiRootResourceId: yyyyyyyyyy 

并收到错误“发生错误:ApiGatewayResourceProxyVar - 具有相同父级的另一个资源已经具有此名称:{proxy+}”

标签: serverless-frameworkangular-universalaws-serverless

解决方案


好问题!

为了共享现有的 API 网关,您需要restApiIdserverless.yml文件中声明关联的,以及restApiRootResourceId.

您可以在此处的文档中阅读更多内容。你也可以关注这篇优秀的博文


推荐阅读