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

Posted

技术标签:

【中文标题】如何使用 Cloudformation 将 lambda 函数附加到现有 API 网关【英文标题】:How to use Cloudformation to attach lambda function to existing API gateway 【发布时间】:2021-10-02 19:07:14 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

执行此操作的最快和最简单的方法是使用 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。

【讨论】:

谢谢!我最终使用参数部分来帮助减少对值的硬编码【参考方案2】:

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

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

【讨论】:

感谢您帮助我摆脱了我陷入的心理循环。我意识到我试图变得过于狡猾

以上是关于如何使用 Cloudformation 将 lambda 函数附加到现有 API 网关的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例

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

如何使用 cloudformation 或 yaml 将保留天数设置为日志流

如何使用cloudformation模板将两个EC2实例(安装AMI创建的Elasticsearch)作为多节点?

使用 AWS CLI 将现有资源导入 CloudFormation

如何使用 CloudFormation 模板更新现有 AWS API Gateway