【问题标题】:aws lambda SES function timeoutaws lambda SES 函数超时
【发布时间】:2019-06-17 03:22:06
【问题描述】:

我正在使用 nodejs 8.1 版和无服务器框架

在我的 serverless.yml 中,我有:

provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1
  iamRoleStatements:
  - Effect: "Allow"
    Action:
      - "ses:GetIdentityVerificationAttributes"
    Resource: "*"

我的 lambda 看起来像这样:

const AWS = require('aws-sdk');
var ses = new AWS.SES({
  region: 'eu-west-1'
});
module.exports.handler = async (event, context, callback) => {
 context.callbackWaitsForEmptyEventLoop = false;
 let identityVerif = await ses.getIdentityVerificationAttributes({Identities: ['email']}).promise();
}

我不明白为什么永远不会执行 getIdentity 函数。 函数超时退出。

【问题讨论】:

  • 这是一个异步调用,因此很可能永远不会返回结果并且函数在等待时超时。启用一些日志记录并检查是否正在发出并响应该请求。
  • 如果我在 getIdentity 之前记录了一些东西,那就是日志,但函数之后的东西不是日志。我尝试将超时设置为 25 秒,但同样的事情发生了。
  • 你需要在服务器端的日志,而不是客户端
  • 我不明白,我将日志放在我的 lambda 函数中,就在 getIdentityVerificationAttributes 行之前,在 getIdentityVerificationAttributes 之后放置了一个日志。第一个被执行,但不是第二个日志。
  • 我忘了说我的 lambda 在 vpc 中运行,这可能是问题吗?

标签: amazon-web-services aws-lambda aws-sdk serverless-framework amazon-ses


【解决方案1】:

您正在等待异步调用的响应,但很可能没有得到响应。检查SES API logs in CloudTrail 以确保确实正在发出请求。听起来您的 lamdba 函数无法访问 SES,如果您在 VPC 中运行它会发生这种情况。您需要将 NAT 网关添加到 VPC。考虑将 lambda 移出 VPC。 Here is a guide 帮助确定权衡。

【讨论】:

  • 我看到了一个叫做私有链接的东西,这个可以用于 SES 吗?还是我只能通过 NAT 网关来实现?我在 VPC 中使用我的 lambda,因为我需要通过 vpc 对等访问我的数据库。
  • 私人链接不适用于 SES。如果您不想设置 NAT,也许您可​​以将与 SES 相关的操作移至 VPC 外部的函数并通过 API Gateway 将所需信息传递给它
  • PrivateLink 自 2020 年 4 月起可用于 SES,但我无法使其正常工作。 announcement
猜你喜欢
  • 2017-07-22
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2021-06-02
相关资源
最近更新 更多