我是否需要将AWS开发工具包导入lambda

时间:2019-09-26 11:23:53

标签: node.js aws-lambda axios amazon-ses

可能是一个愚蠢的问题,但在堆栈/ aws文档上找不到明确的答案。我的假设是应将其内置到lambda中。

我正在AWS Lambda中运行带有Axios模块的Node10.x。我有一个成功的函数,可以检查DNS / EC2 / Endpoint路径并返回正确的响应。我想使其自动化,以便每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);
}


};

3秒后我超时。我将一个zip文件上载到具有依赖性的节点上。我需要安装AWS SDK并随文件上传吗?它不应该以某种方式构建吗?我在SES通话中遗漏了什么吗?

谢谢

1 个答案:

答案 0 :(得分:1)

有两个问题需要解决:

  1. sendEmail 是来自 AWS SDK 的异步函数,您必须使用:

await ses.sendEmail(eParams).promise()

否则,Lambda 将在 sendEmail method 完成之前结束执行。

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

enter image description here