Aws lambda 如何使用lambda代理集成形成API网关资源

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

我一直在尝试解决如何使用Lambda代理集成来表示(在cloudformation中)具有Lambda函数集成类型的API网关资源

这在AWS控制台中很容易做到,因为有一个复选框可供选择:

但是,AWS::ApiGateway::Method CloudFormation资源中没有相应的字段(它应该位于中)


如何在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