使用aws lambda上的aws-sdk iotData.publish延迟发布主题消息

时间:2017-10-12 12:07:52

标签: node.js aws-lambda aws-sdk

我使用aws-sdk发布以下主题的消息是代码:

var AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
AWS.config.credentials = {
    accessKeyId: 'myaccesskeyid',
    secretAccessKey: 'mysecretaccesskey'
}

function LEDOnIntent() {
    this.iotdata = new AWS.IotData({
        endpoint: 'XXXXXXXXX.iot.us-east-1.amazonaws.com'
    });
}

LEDOnIntent.prototype.publishMessage = function() {
    console.log('>publishMessage');
    var params = {
        topic: 'test_topic',
        /* required */
        payload: new Buffer('{action : "LED on"}') || 'STRING_VALUE',
        qos: 1
    };
    this.iotdata.publish(params, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else {
            console.log("Message published : " + data); // successful response
        }
    });
}

它在本地单元测试中工作正常但是当我在AWS lambda上部署此代码时,我的行为非常不均匀。对于前几个请求它不会发布消息然后它会在我连续测试时正常工作。当我在一些休息之后进行测试时,它会再次停止工作以获得一些初始请求。

1 个答案:

答案 0 :(得分:0)

在幕后,Lambda像一个容器模型一样运行。它意味着在需要时创建一个容器,如果不需要容器则销毁它。

您在初始请求中看到延迟的原因是因为设置容器并执行必要的引导需要时间,这会在每次调用Lambda函数时增加一些延迟。您通常会在首次调用Lambda函数或更新Lambda函数后看到此延迟,因为AWS Lambda会尝试重用该容器以便后续调用Lambda函数。

AWS Lambda维护容器一段时间以预期另一个Lambda函数调用。实际上,服务在Lambda函数完成后冻结容器,如果AWS Lambda选择在再次调用Lambda函数时重用容器,则解冻容器以便重用。

请阅读官方文档here