当前位置: 首页 > 知识库问答 >
问题:

使用AWS API网关调用AWS Lambda

叶声
2023-03-14

我的(非常简单的)代码看起来是这样的:

class HelloService {
  def hello(name: String) = {
    "hello there, " + name
  }
}

我将构建好的jar上传到Lambda,并通过创建一个测试事件在AWS控制台中进行测试。它返回正确的响应,正如预期的那样。

但是,我希望API网关调用这个Lambda。我既使用了Lambda代理集成,也定义了自己的主体映射模板。我似乎无法使它工作,我一直得到:

{
  "message": "Internal server error"
}

我确定这是一件很简单的事情,我只是错过了一些东西...

共有1个答案

党俊健
2023-03-14

发送回服务器的响应取决于您是否使用Lambda代理集成。使用代理集成更容易在API网关端进行设置,但是Lambda需要做更多的工作,因为网关将向您发送一堆内容,并要求在响应中使用特定的格式。对于代理集成,响应格式需要如下所示:

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

这里有更多内容:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource

如果不使用代理集成,则需要在API网关集成中为有关HTTP谓词的参数设置主体映射,以便将API参数与lambda参数匹配。这里的公认答案中有一个很好的解释:如何从Amazon API网关向AWS Lambda传递querystring或route参数

 类似资料:
  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • 我的问题是无法从位于test.mydomain.com的客户机向该API发送请求,即使在我成功地在Cognito上进行了身份验证(从而在请求头中发送了所需的令牌)之后也是如此。 我在web客户端上用于向API网关endpoint发送请求的代码: 我通过AWS控制台在API方法上启用了CORS,也在我的浏览器上启用了CORS,以便进行测试,因此应该允许跨域请求。

  • 我一直使用SI出站网关调用使用NTLM(Microsoft Dynamics backend)保护的RESTendpoint。它非常简单,只需配置HttpComponentsMessageSender凭据以使用Apache HttpClient的NTCredentials,并且它可以透明地工作。

  • 我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得 即使我使用头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorize

  • 我在PHP Rest客户端的API调用中面临“endpoint请求超时”问题。将Lamdba超时增加到4分钟,内存也增加到200 MB。 所以在做了一些研究之后,我发现AWS API网关有一个30秒的超时。因此,为了解决这个问题,我尝试使用AWS SDK调用Lambda POST函数。 到目前为止,我对setup和installing一头雾水,找不到任何直接调用Lambda以调用相应的Expres