Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我需要将AWS SDK导入lambda吗_Node.js_Aws Lambda_Axios_Amazon Ses - Fatal编程技术网

Node.js 我需要将AWS SDK导入lambda吗

Node.js 我需要将AWS SDK导入lambda吗,node.js,aws-lambda,axios,amazon-ses,Node.js,Aws Lambda,Axios,Amazon Ses,可能是个愚蠢的问题,但在stack/aws文档中找不到明确的答案。我的假设是它应该内置在lambda中 我正在AWS Lambda中运行Node10.x,带有Axios模块。我有一个成功的函数,它检查DNS/EC2/端点路径并返回正确的响应。我想让它自动化,让它每10分钟检查一次。如果出现错误,它将在SES中通知我,如果响应良好,则什么也不做 所有的功能都可以正常工作,但我在整合SES时遇到了问题。在下面的if语句中,我添加了这段代码,console.log可以工作,所以这只是我遇到问题的SES

可能是个愚蠢的问题,但在stack/aws文档中找不到明确的答案。我的假设是它应该内置在lambda中

我正在AWS Lambda中运行Node10.x,带有Axios模块。我有一个成功的函数,它检查DNS/EC2/端点路径并返回正确的响应。我想让它自动化,让它每10分钟检查一次。如果出现错误,它将在SES中通知我,如果响应良好,则什么也不做

所有的功能都可以正常工作,但我在整合SES时遇到了问题。在下面的if语句中,我添加了这段代码,console.log可以工作,所以这只是我遇到问题的SES部分

exports.handler = async (event, context) => {

let aws = require('aws-sdk');
let ses = new aws.SES({
   region: 'us-east-1'
});

let data = "document_contents=<?xml version=\"1.0\" encoding=\"UTF-8\"?><auth><user>fake</user><pass>info</pass></auth>";

var axios = require("axios");

var config = {
  headers: { 'Content-Type': 'text/xml' },
};

let res = await axios.post('https://awebsiteidontwanttogiveout.com', data, config);
let eParams;

if (res.status === 200) {
  console.log("Success");

  eParams = {
        Destination: {
            ToAddresses: ["banana@apples.com"]
        },
        Message: {
            Body: {
                Text: {
                    Data: "Test SUCCESSFUL"
                }
            },
            Subject: {Test SUCCESSFUL"
            }
        },
        Source: "banana@apples.com"
  };

  ses.sendEmail(eParams);
} 

if (res.status != 200) {
  console.log("Failure");

  eParams = {
        Destination: {
            ToAddresses: ["banana@apples.com"]
        },
        Message: {
            Body: {
                Text: {
                    Data: "Test FAIL"
                }
            },
            Subject: {
                Data: "Test FAIL"
            }
        },
        Source: "banana@apples.com"
  };

  ses.sendEmail(eParams);
}


};
exports.handler=async(事件、上下文)=>{
设aws=require('aws-sdk');
设ses=新的aws.ses({
地区:'us-east-1'
});
let data=“document\u contents=fakeinfo”;
var axios=要求(“axios”);
变量配置={
标题:{'Content Type':'text/xml'},
};
let res=等待axios.post('https://awebsiteidontwanttogiveout.com,数据,配置);
让eParams;
如果(资源状态===200){
控制台日志(“成功”);
eParams={
目的地:{
地址:[”banana@apples.com"]
},
信息:{
正文:{
正文:{
数据:“测试成功”
}
},
主题:{测试成功“
}
},
来源:“banana@apples.com"
};
ses.发送电子邮件(eParams);
} 
如果(恢复状态!=200){
控制台日志(“故障”);
eParams={
目的地:{
地址:[”banana@apples.com"]
},
信息:{
正文:{
正文:{
数据:“测试失败”
}
},
主题:{
数据:“测试失败”
}
},
来源:“banana@apples.com"
};
ses.发送电子邮件(eParams);
}
};
我在3秒钟后超时。我上传了一个zip文件到节点,带有依赖项。我需要安装AWS SDK并将其与文件一起上传吗?它不应该以某种方式内置吗?我的SES调用中是否遗漏了什么


谢谢

有两个问题需要解决:

  • sendEmail是AWS SDK的异步函数,您必须使用:
  • 等待ses.sendmail(eParams.promise()

    否则,Lambda将在
    sendmail方法
    完成之前结束执行

  • Lambda的默认超时时间为3秒。在Lambda配置中,此时间最多可以增加到15分钟

  • 不确定,但您是否也应该
    var AWS=require('AWS-sdk');
    var ses=new AWS.ses({apiVersion:'2010-12-01'))
    etc?zip文件中到底上传了什么?其中是否有node_modules文件夹?aws sdk不需要导入,它已经包含在lambda运行时中很难说不知道网络限制。是否需要使用公司代理?唯一的一点是您应该使用
    wait ses.sendmail(eParams).promise()
    由于此调用是异步的,您确定是
    sendmail
    函数有问题吗?