我需要将 AWS SDK 导入 lambda 吗

Do I need to import AWS SDK into lambda

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

我是 运行 Node10.x,在 AWS Lambda 中使用 Axios 模块。我有一个成功的功能,它检查 DNS/EC2/Endpoint 路径和 returns 正确的响应。我想让它自动化,所以它会检查,比方说...每 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. sendEmail 是 AWS SDK 的异步函数,你必须使用:

await ses.sendEmail(eParams).promise()

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

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