问题描述
我正在尝试将 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。