如何使用 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)作为多节点?