【发布时间】:2016-11-17 15:51:45
【问题描述】:
每当我尝试从 Lambda(使用 Java)发送带有 SES 的电子邮件时,它都会失败 - 连接超时。
我已经在与 Lambda 函数相同的 VPC 中测试了来自 EC2 实例的完全相同的代码,并且它可以从那里工作(它们分配了相同的角色)。我也尝试过在 VPC 中不运行 Lambda 函数(尽管无论如何它都需要在一个 VPC 中),但这也不起作用。
这是相关的代码
SendEmailRequest request = new SendEmailRequest().withSource(from)
.withDestination(destination)
.withMessage(message);
try {
System.out.println("Attempting to send an email through Amazon SES by using the AWS SDK for Java...");
if (client == null) {
client = new AmazonSimpleEmailServiceClient();
client.setRegion(Region.getRegion(Regions.EU_WEST_1));
}
client.sendEmail(request); // this is where the exception is thrown
System.out.println("Email sent!");
} catch (Exception ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
}
}
错误消息指出,由于超时,它无法连接(到 email.eu-west-1...)。
任何想法为什么它不能在 Lambda 中工作?
【问题讨论】:
-
如果您将 Lambda 函数放置在 VPC 中,则它无法访问 VPC 之外的任何内容,包括 AWS API,除非您还将 NAT 网关添加到您的 VPC。
-
@MarkB 我确实在问题中注意到我也在 VPC 之外尝试过它,但它并没有以完全相同的方式工作。
-
如果它在没有进入 VPC 的情况下仍然出现超时,那么您确定是与 SES 的连接超时,而不是 Lambda 函数用完了分配的时间吗?可能显示实际的错误消息?代码在本地运行吗?
-
@MarkB 我从在这个领域工作的人那里得到了关于我的确切案例的帮助。我会让它工作,然后写一个答案来记录该怎么做。谢谢您的帮助!为了回答您的问题,它确实在我自己的机器以及 EC2 机器上成功运行。
标签: java amazon-web-services aws-lambda amazon-ses