【问题标题】:Cannot create connection to DynamoDB in Java AWS lambda function无法在 Java AWS lambda 函数中创建与 DynamoDB 的连接
【发布时间】:2018-01-03 22:23:01
【问题描述】:

我有一个 lambda 函数,我试图用它来连接我拥有的 DynamoDB 表。我正在使用此代码建立连接:

...

context.getLogger().log("Before create client..");

AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard()
    .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(
    "https://dynamodb.ap-southeast-2.amazonaws.com", "ap-southeast-2")).build();

context.getLogger().log("After create client..");

...

我从函数中得到的输出如下:

==================== FUNCTION OUTPUT ====================
{"errorMessage":"2017-07-28T01:11:34.092Z aeee6505-7331-11e7-b28b-db98038611cc Task timed out after 5.00 seconds"}
==================== FUNCTION LOG OUTPUT ====================
START RequestId: aeee6505-7331-11e7-b28b-db98038611cc Version: $LATEST
Before create client..END RequestId: aeee6505-7331-11e7-b28b-db98038611cc
REPORT RequestId: aeee6505-7331-11e7-b28b-db98038611cc  Duration: 5003.51 ms    Billed Duration: 5000 ms    Memory Size: 256 MB Max Memory Used: 62 MB  
2017-07-28T01:11:34.092Z aeee6505-7331-11e7-b28b-db98038611cc Task timed out after 5.00 seconds

如您所见,它在尝试建立连接时超时,并且从不打印第二条日志语句。是否有原因它会超时而不是抛出异常,例如如果 IAM 角色有错误或其他什么? dynamoDB 区域和 lambda 区域是相同的(Sydney - ap-southeast-2),所以我认为这会起作用。

lambda 函数使用的 IAM 角色具有以下权限:

AmazonDynamoDBReadOnlyAccess

AmazonS3ReadOnlyAccess

AWSLambdaBasicExecutionRole

【问题讨论】:

    标签: java amazon-web-services amazon-dynamodb aws-lambda


    【解决方案1】:

    修复它.. 将 lambda 函数的内存增加到 1024MB。严重不确定为什么需要使用的内存始终在 60-70MB 左右:/

    【讨论】:

    • 您确定这是内存问题吗?日志说已用内存为 62MB。我的猜测是您的 DynamoDB 查询花费了更多时间。
    • @kosa 奇怪的是没有查询..它实际上无法建立连接,直到我增加内存,然后它突然开始工作..
    • 这很奇怪,但它也解决了我的问题。在使用 DynamoDB 时,AWS 可能会强制您使用至少 1024 MB。
    【解决方案2】:

    这只是内存问题..我将 lambda 函数更改为 1024MB 它开始正常工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多