Aws lambda 如何使用lambda代理集成形成API网关资源
我一直在尝试解决如何使用Lambda代理集成来表示(在cloudformation中)具有Lambda函数集成类型的API网关资源 这在AWS控制台中很容易做到,因为有一个复选框可供选择: 但是,AWS::ApiGateway::Method CloudFormation资源中没有相应的字段(它应该位于中)Aws lambda 如何使用lambda代理集成形成API网关资源,aws-lambda,aws-api-gateway,amazon-cloudformation,Aws Lambda,Aws Api Gateway,Amazon Cloudformation,我一直在尝试解决如何使用Lambda代理集成来表示(在cloudformation中)具有Lambda函数集成类型的API网关资源 这在AWS控制台中很容易做到,因为有一个复选框可供选择: 但是,AWS::ApiGateway::Method CloudFormation资源中没有相应的字段(它应该位于中) 如何在cloudformation中配置此功能?集成类型应设置为AWS\u PROXY。下面是一个来自工作YAML CloudFormation模板的方法示例片段 ProxyResourc
如何在cloudformation中配置此功能?集成类型应设置为
AWS\u 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,我意识到复选框可能被编码到类型中。我检验了我的假设,得出了上面的云结构
{
"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"
}
我通过简单地更改
Integration:
Type: AWS_PROXY
到
云形成文档目前很稀少,API网关云形成文档与控制台上可以看到的不匹配,这阻碍了任何试图解决问题的人
希望这有帮助 我们面临的正是这个问题。我们正在将Ansible用于我们的基础设施。可以应用于CLI或Cloudformation,甚至SDK 我们问题的解决方案是确保Lambda策略是以细粒度的方式为您尝试使用的Lambda的API网关中的端点谓词定义的
例如,我们有多条路线。每个路由(或路由集)都需要定义自己的lambda策略,以允许lambda:InvokeFunction。这在Ansible的Lambda策略模块中定义。有了这个,lambda触发器被自动启用。我们正在努力让CloudFormation更新他们的文档,但是如下所述,您将集成类型设置为AWS_PROXY,并将HttpMethod设置为Post。您可以在这里看到一个工作示例:对我来说,使用“推荐的”最佳实践云形成路线,通过控制台很容易做的事情却很难做到,这简直是疯了。我想cloudformer应该帮助填补这个空白。可惜它太过时了。
Integration:
Type: AWS