如何使用 Cloudformation 将 lambda 函数附加到现有 API 网关

问题描述

我正在尝试将 lambda 函数自动附加到已经存在的 Api 网关(未部署在堆栈中)。看起来 AWS::ApiGateway::Method 是执行此操作的最佳方法,但我似乎可以弄清楚如何获取特定的 Api Gateway RestApiId 和 ResourceId。我怎样才能“获取”这些信息?是否有 cloudformation 方式,或者我是否需要使用某种类型的 lambda 函数

感谢您帮助我解决令人沮丧的问题!

解决方法

我该如何“获取”这些信息?

CFN 中没有“获取”这样的功能。您必须手动提供所有内容作为输入参数或硬编码所需的值。或者,您必须开发一个 custom resource 来为您获取该信息。自定义资源将使用您需要自己编写的 lambda 函数

,

执行此操作的最快和最简单的方法是使用 CFN 参数。我在下面举了一个小例子来说明如何做到这一点。该示例使用 SAM 无服务器 lambda 和 HTTP API(API 网关 v2),但 REST API(API 网关 v1)的解决方案非常相似。

Parameters:
  HttpApi:
    Type: String

Resources:
  SourceFunction:
    Type: AWS::Serverless::Function
    Properties:
      [...]
      Events:
        GetEndpoint:
          Type: HttpApi
          Properties:
            Path: /endpoint
            Method: GET
            ApiId: !Ref HttpApi

有关 cloudformation 参数的更多信息,请参见 here。 有关无服务器功能的更多信息(以防您不熟悉 AWS SAM),请参见 here