AWS-Lamda node js不在AWS中推送指标,在本地运行时有效

5uzkadbs  于 2023-03-22  发布在  Node.js
关注(0)|答案(1)|浏览(112)

我需要构建一个aws lambda,检查主机上的端口是否打开,然后推送“0”或“1”作为云指标。我是一个完全的node js新手,经过几个小时的谷歌搜索,我能够拼凑出一个js文件,当我在桌面上本地运行它时,它可以工作。当我从本地桌面运行js文件时,它工作了.它检查主机并正确推送度量.当我将我的项目的zip作为lamba上传时它失败了.我确实验证了如果a删除“putmetricdata”部分及其相关的var语句它会成功地检查端口。我真的觉得我不知道我在做什么,任何帮助都很感激!
响应{“errorMessage”:“2021-04- 01 T19:00:39.949Z d2 c3 a983 - 94 e4 -4179-b326- 5 b 921 f8413 e6任务在3.00秒后超时”}

'use strict';

var lambdaHandler = function(event, context, callback) {
    const connData = {
        port: 5555,
        host: '10.10.10.10',
        timeout: 75
    };

    const timeout = typeof connData.timeout !== 'undefined' ?
                    parseInt(connData.timeout) :
                    50; // Fallback to 50ms
    const net = require('net');
    var available = 0;
    var message = 'Whoops port ' + connData.port + ' on host ' +
                  connData.host + ' seems closed! ' + available;
    
    const client = net.connect(connData, function() {
      available = 1;
      message = 'Port ' + connData.port + ' on ' + connData.host + ' is open!' + available;

      callback(null, message);

      client.destroy();
    });

    client.setTimeout(timeout, function() {
        client.destroy(new Error(message), null);
    });

    client.on('error', function(err) {
        callback(new Error(message), null);
    });
    var AWS = require('aws-sdk');
    AWS.config.update({region: 'us-gov-west-1'});
    var cw = new AWS.CloudWatch({apiVersion: '2010-08-01'});
    var params = {
  MetricData: [
    {
      MetricName: 'TCPHealthCheck',
      Dimensions: [
        {
          Name: 'HOST',
          Value: '10.141.8.15'
        },
        {
          Name: 'PORT',
          Value: '5444'
        },
      ],
      Unit: 'None',
      Value: available
    },
  ],
  Namespace: 'Route53PrivateHealthCheck'
};

cw.putMetricData(params, function(err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", JSON.stringify(data));
  }
});
};

exports.checkPortOpen = lambdaHandler;

if (require.main === module) {
    var lambdaContext = {
        context: {
            'my-host': process.env.MY_HOST,
            'my-port': process.env.MY_PORT,
            'my-timeout': process.env.MY_TIMEOUT
        }
    };

    lambdaHandler(lambdaContext, null, function(err, data) {
        if (err) {
            console.log(err.message);
           return null;
        }

        console.log(data);
    });
}
deyfvvtc

deyfvvtc1#

给出的错误表示超时
响应{“errorMessage”:“2021-04- 01 T19:00:39.949Z d2 c3 a983 - 94 e4 -4179-b326- 5 b 921 f8413 e6任务在3.00秒后超时”}
Lambda的默认超时时间为3秒,您可以在Lambda的“常规配置”部分将此配置更改为最多15分钟。

相关问题