AWS API Gateway-Lambda代理无法通过CloudFormation模板开启

时间:2018-09-28 15:45:37

标签: amazon-web-services aws-lambda amazon-cloudformation aws-api-gateway

我正在使用CloudFormation在API Gateway中创建API。我的每个端点都指向一个Lambda函数。我需要为每个端点打开“ Lambda代理集成”。

这是我的CloudFormation模板中的摘录:

method1:
    Type: "AWS::ApiGateway::Method"
    Properties: 
        ApiKeyRequired: true
        AuthorizationType: None 
        HttpMethod: POST
        Integration:
            Type: AWS_PROXY
            IntegrationHttpMethod: POST
            IntegrationResponses:
                - ResponseTemplates:
                    application/json: Empty
                StatusCode: 200
            Uri: 
                Fn::ImportValue: !Sub '${ProjectName}-${Environment}-method1'
        MethodResponses:
            - ResponseModels:
                application/json: Empty
            StatusCode: 200
        RequestValidatorId: !Ref validateBodyValidator
        ResourceId: !Ref method1Resource
        RestApiId: !Ref RestApi

我将集成类型设置为AWS_PROXY。当我运行此模板时,一切看起来都像。我得到以下结果:

enter image description here enter image description here

如您所见,Use Lambda Proxy integration选项显示为选中状态。 但是,当我进行API调用时,出现以下错误。

[
    "Internal Server Error"
]

经过一天的努力寻找问题,这就是我所发现的:

如果我取消选中Use Lambda Proxy integration选项,请重新检查并部署-它开始工作。

几乎就像-它看起来已选中,但未选中。我必须手动取消选中并重新检查每种方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

感谢congbaoguier在上面的评论,我能够解决这个问题。

我在以下模板中添加了Method1Permission部分,用于创建Lambda函数:

Method1:
    Type: AWS::Lambda::Function
    DependsOn:
        - Method1Role
        - Method1Policy
    Properties:
        Role: !GetAtt Method1Role.Arn 
        Code:
            S3Bucket: !ImportValue sharedinf-cp-lambdabucketname
            S3Key: Method1.jar
        Handler: com.companyname.projectname.methodname::handleRequest
        Runtime: "java8"
        Timeout: "15"
        MemorySize: "512"
    Method1Permission:
        Type: AWS::Lambda::Permission
        Properties:
        FunctionName: !GetAtt 
            - Method1
            - Arn
        Action: 'lambda:InvokeFunction'
        Principal: apigateway.amazonaws.com

这允许API网关访问我的Lambda函数。