【问题标题】:How to apply Serverless to an existing API gateway如何将无服务器应用到现有 API 网关
【发布时间】:2019-10-28 16:02:34
【问题描述】:

最近我使用无服务器框架创建/部署 AWS lambda 函数/API 网关。这是部署 Lambda/API 的一种非常酷的方式,但我不知道如何将其应用于现有的 AWS lambdas/API。

有没有什么方法可以在不删除现有的情况下使用无服务器重新创建,因为我有几十个现有的 lambda 函数和 api。

【问题讨论】:

  • 也许这会有所帮助? confluence.atlassian.com/bitbucket/…
  • 谢谢@mph85,但这不是我正在寻找的解决方案
  • np np,那我误会了,什么会阻止您将现有的 Lambda 函数插入AWS Lambda 并让服务负责编译它以及所有这些?

标签: aws-lambda aws-api-gateway serverless


【解决方案1】:

没有。您可以通过在 Serverless.yml 中指向这些函数的特定 ARN 来重用 lambda 函数,但目前没有办法在没有手动干预和使用 Serverless 重新创建的情况下“替换”API Gateway 组件。

好处是,除非您使用无服务器框架目前不支持的 AWS API Gateway 中的功能,否则它应该相对简单易行。

【讨论】:

  • 但是如果我有一个复杂的 apigateway 设置呢?如何获取该 api 的 serverless.template EVents 部分?
  • @RoyiNamir 您应该检查 Cloudformation 模板语法。 Serverless 基本上是尽可能地复制这些选项。
【解决方案2】:

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

随着应用程序的增长,您可能需要将其分解为多个较小的服务。默认情况下,每个无服务器项目都会生成一个新的 API 网关。但是,您可以通过在serverless.yml 中引用其 REST API ID 和 Root Resource ID 在多个项目之间共享同一个 API Gateway,如下所示:

service: service-name
provider:
  name: aws
  apiGateway:
    restApiId: xxxxxxxxxx # REST API resource ID. Default is generated by the framework
    restApiRootResourceId: xxxxxxxxxx # Root resource, represent as / path
    websocketApiId: xxxxxxxxxx # Websocket API resource ID. Default is generated by the framework
    description: Some Description # optional - description of deployment history

functions: ...

【讨论】:

  • 但是您必须使用一个无服务器服务创建 api 网关,然后一旦创建,返回并更新您的无服务器文件以插入该 ID。我知道这是可能的,但它有点笨拙,对吧?应该有其他方法,或者我认为最好的方法是在无服务器之外创建 apigateway。
猜你喜欢
  • 2020-10-07
  • 2017-11-13
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2021-01-03
相关资源
最近更新 更多