【问题标题】:Lambda and DynamoDB issuesLambda 和 DynamoDB 问题
【发布时间】:2022-09-23 05:27:14
【问题描述】:

我创建了一个 Java Lambda 函数,该函数旨在持久保存到 DynamoDB 表,并使用 AWS SAM 进行部署。我观察到持久性尝试没有错误日志,Lambda 只是超时

    public static AmazonDynamoDB getDynamoInstance() {
    if (DYNAMO_INSTANCE == null) {
        AmazonDynamoDBClientBuilder amazonDynamoDBClientBuilder = AmazonDynamoDBClientBuilder.standard()
                .withRegion(REGION);
        DYNAMO_INSTANCE = amazonDynamoDBClientBuilder.build();
    }
    return DYNAMO_INSTANCE;
  }


     public void putItemInEventHistory(String event) {
     
 
     DynamoDB dynamoDB = new DynamoDB(DynamoDBFactory.getDynamoInstance());

     Table table = dynamoDB.getTable(EVENTS_HISTORY_TABLE_NAME);

     Item item = new Item()
                .withPrimaryKey(\"Id\", 210)
                .withJSON(\"event\", event);

    PutItemOutcome outcome = table.putItem(item);
       
    
 }

有人可以指出我正确的方向来解决问题。

干杯 克里斯

  • 检查执行角色的 dynamodb 权限,以及超时已在 VPC 中部署了您的 lambda,通常是网络错误,请告诉我们您的超时时长,尝试增加超时时长
  • 你是如何调用 lambda 的?您是否在 AWS Lambda UI 监控中看到 lambda 成功/失败指标?

标签: aws-lambda amazon-dynamodb


【解决方案1】:

我测试了代码,它没有问题:

public class StackOverflow {
    static AmazonDynamoDB DYNAMO_INSTANCE;

    public static void main(String[] args) {

        DynamoDB dynamoDB = new DynamoDB(getDynamoInstance());

        Table table = dynamoDB.getTable("testing");

        Item item = new Item()
                .withPrimaryKey("Id", "210")
                .withJSON("event", "{ \"UserID1\": 0, \"UserID2\": 0, \"Message\": \"my message\", \"DateTime\": 0}");

        PutItemOutcome outcome = table.putItem(item);
    }


    public static AmazonDynamoDB getDynamoInstance() {

        if (DYNAMO_INSTANCE == null) {
            AmazonDynamoDBClientBuilder client = AmazonDynamoDBClientBuilder.standard()
                    .withRegion(Regions.EU_WEST_1);

            DYNAMO_INSTANCE = client.build();
        }
        return DYNAMO_INSTANCE;
    }

}
  • 您的 Lambda 是否记录任何内容?确保它可以访问日志?
  • 您的 Lambda 是否有权写入 DynamoDB?
  • 确保您的 Lambda 具有足够的超时值
  • 如果您可以登录并拥有权限,请尝试在代码中添加一些自定义日志,以了解每一步发生的情况。

【讨论】:

  • 我从添加的其他日志中收到以下错误......一个或多个参数值无效:项目中缺少密钥 ID(服务:AmazonDynamoDBv2;状态代码: 400;错误代码:ValidationException;请求 ID:04PD48FS38N;代理:null):com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException:一个或多个参数值无效:缺少项目中的密钥 ID(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求 ID:04PD48FS38N;代理:null)
【解决方案2】:

这是一个愚蠢的错误......使用'Id'而不是小写字母'id'。但是额外的日志确实有帮助

log4j.appender.com.amazonaws.services.dynamodbv2=DEBUG, stderr

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 2019-07-20
    • 2018-11-22
    • 1970-01-01
    • 2020-06-02
    • 2016-11-21
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多