我一直试图找出如何使用Lambda代理集成来表达(在cloudformation中)具有Lambda函数集成类型的API网关资源。
然而,AWS :: ApiGateway :: Method CloudFormation资源中没有相应的字段(它应该在Integration property中)。
如何在cloudformation中配置它?
答案 0 :(得分:14)
集成类型应设置为AWS_PROXY
。下面是工作YAML CloudFormation模板中方法的示例代码段。
ProxyResourceAny:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
HttpMethod: ANY
ResourceId:
Ref: ProxyResource
RestApiId:
Ref: API
Integration:
Type: AWS_PROXY
IntegrationHttpMethod: POST
Uri: !Sub
- arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${Arn}/invocations
- Arn:
Fn::GetAtt:
- RestorerLambda
- Arn
值得一提的是我是怎么想出来的......
在我搔了一会儿之后,我检查了aws apigateway get-method
CLI命令的输出,以获得使用控制台以这种方式配置的方法。这给了我以下JSON,我意识到复选框可能被编码到类型中。我测试了我的假设并提出了上面的CloudFormation。
{
"apiKeyRequired": false,
"httpMethod": "ANY",
"methodIntegration": {
"integrationResponses": {
"200": {
"responseTemplates": {
"application/json": null
},
"statusCode": "200"
}
},
"passthroughBehavior": "WHEN_NO_MATCH",
"cacheKeyParameters": [],
"uri": "arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:XXXXXXXXX:function:Shildrew-Restorer-Play-Lambda/invocations",
"httpMethod": "POST",
"cacheNamespace": "64bl3tgw4g",
"type": "AWS_PROXY"
},
"requestParameters": {},
"authorizationType": "NONE"
}
答案 1 :(得分:1)
我通过简单的改变
解决了同样的问题Integration:
Type: AWS_PROXY
要
Integration:
Type: AWS
云形成文档目前很少,API网关云形态文档与控制台上可以看到的内容不匹配,这阻碍了任何试图解决问题的人。
希望这有帮助!
答案 2 :(得分:1)
我们遇到了这个确切的问题。我们正在将Ansible用于我们的基础架构。可能适用于CLI或Cloudformation甚至是SDK
我们的问题的解决方案是确保在Lambda的API网关中以粒度方式为端点动词定义Lambda策略。
例如,我们有多条路线。每个路由(或一组路由)都需要定义自己的lambda策略,以允许使用lambda:InvokeFunction。这在Ansible的Lambda策略模块中定义。这样,lambda触发器会自动启用。