AWS API Gateway - Lambda Proxy не включается через шаблон CloudFormation - PullRequest
0 голосов
/ 28 сентября 2018

Я использую CloudFormation для создания API в API Gateway.Каждая из моих конечных точек указывает на лямбда-функцию.Мне нужно включить «Интеграцию Lambda Proxy» для каждой конечной точки.

Вот фрагмент из моего шаблона 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 голосов
/ 06 октября 2018

Я смог решить эту проблему, спасибо 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.

...