Cập nhật bảng DynamoDB bằng Lambda

Oct 09 2020

Tôi đang cố gắng triển khai một hàm Lambda dựa trên làm trình kích hoạt cho một MODIFYsự kiện trên bảng DynamoDB. Trình kích hoạt này đã được sử dụng để sửa đổi thêm bảng dựa trên các tính toán được thực hiện trên các mục nhập mới. Nhưng vì đây cũng sẽ là sự kiện 'SỬA ĐỔI' nên nó sẽ kích hoạt lambda một lần nữa, điều này có thể bắt đầu kích hoạt vô hạn các hàm lambda.

Làm cách nào để ngăn lambda được kích hoạt vô hạn?

var AWS = require('aws-sdk');
// extra
const docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event , context , callback) => {
    // TODO implement
    
    event.Records.forEach((record) => {
        console.log('Stream record: ', JSON.stringify(record, null, 2));
        // logic to find insert type / modify type 
        if(record.eventName == 'MODIFY'){
             // extract student id, and marks from event itself (save I/O)
            console.log("Printing new image values",JSON.stringify(record.dynamodb.NewImage,null,2));
             // modify the same record once new value is calculated
             
             //############# method to modify /update dynamo db  #################
             
             //############# end code ###############
        }
        
    });
    
    console.log(event);
    const response = {
        statusCode: 200,
        body: JSON.stringify(event),
    };
    
    
    
    return response;
};

Đây là mã tôi đang sử dụng trong lambda được kích hoạt bởi một sự kiện dynamicodb

Trả lời

1 qkhanhpro Oct 09 2020 at 15:40

Một giải pháp đơn giản là biểu thị Lambda khi không thay đổi bản ghi nữa

Giải pháp này phụ thuộc vào trường hợp sử dụng thực tế của bạn và nếu bạn có thể lưu một điều kiện nhất định thì bản ghi hiện tại sẽ không được xử lý nữa

Đôi khi nó có thể là một thuộc tính đơn giản như

  • Đã xử lý = true
  • LastProcessTime = 1602232746

được lưu trực tiếp vào hồ sơ

Kiểm tra các cuộc thảo luận khác xung quanh điều này cũng

https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/

Luồng DynamoDB - ghi dữ liệu trở lại bảng