我正在使用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
。当我运行此模板时,一切看起来都像。我得到以下结果:
如您所见,Use Lambda Proxy integration
选项显示为选中状态。
但是,当我进行API调用时,出现以下错误。
[
"Internal Server Error"
]
经过一天的努力寻找问题,这就是我所发现的:
如果我取消选中Use Lambda Proxy integration
选项,请重新检查并部署-它开始工作。
几乎就像-它看起来已选中,但未选中。我必须手动取消选中并重新检查每种方法。
有什么想法吗?
答案 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函数。