Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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
Amazon web services AWS Lambda函数无法发送电子邮件_Amazon Web Services_Aws Lambda_Nodes_Aws Api Gateway - Fatal编程技术网

Amazon web services AWS Lambda函数无法发送电子邮件

Amazon web services AWS Lambda函数无法发送电子邮件,amazon-web-services,aws-lambda,nodes,aws-api-gateway,Amazon Web Services,Aws Lambda,Nodes,Aws Api Gateway,我有一个简单的AWS Lambda函数,它使用nodeEmailer发送电子邮件。提供程序为“Gmail”,包含: SMTP_SECURE: true, SMTP_PORT: 465 问题是API网关URL在30456.58毫秒后超时,网关超时为504。AWS文档中明确提到,它将在30秒后超时,这也是可以接受的 当我从AWS lambda控制台直接调用lambda时,也会发生同样的情况。它也超时了。对我来说没有意义的事情是什么 transporter.sendMail(mailOpti

我有一个简单的AWS Lambda函数,它使用nodeEmailer发送电子邮件。提供程序为“Gmail”,包含:

  SMTP_SECURE: true,
  SMTP_PORT: 465
问题是API网关URL在30456.58毫秒后超时,网关超时为504。AWS文档中明确提到,它将在30秒后超时,这也是可以接受的

当我从AWS lambda控制台直接调用lambda时,也会发生同样的情况。它也超时了。对我来说没有意义的事情是什么

transporter.sendMail(mailOptions);
为什么这些线路需要30秒以上?当API网关超时时,lambda也会超时。我已经连接了VPC、子网和安全,拥有来自所有人的流量,并且在google上启用了不太安全的功能

Cloudwatch日志清楚地表明我的代码没有超出:

const info = await transporter.sendMail(mailOptions);
PS:在我的本地机器上,一切都像一个魔咒,问题只在于云功能。

以下是安全支出:

安全组出站规则:

Lambda函数出站规则:


如果AWS Lambda功能连接到VPC,则只有在VPC配置了NAT网关或NAT实例时,它才能访问互联网

这是因为Lambda函数不接收公共IP。Lambda功能应配置为使用专用子网,然后通过NAT网关或NAT实例访问Internet

Lambda目的地

如果异步调用Lambda函数,另一个选项是配置触发另一个Lambda函数的Lambda目标。第二个Lambda功能可以“在”专有网络之外并连接到互联网。调用由AWS服务管理

因此,流程将是:

Trigger --> Lambda 1 (does RDS stuff) --> Destination: Lambda 2 (does email stuff)
第一个Lambda函数可以将信息传递给第二个Lambda函数,以便包含在电子邮件中

API网关


另一种选择是将Lambda函数保持在VPC的“外部”,但让它调用API网关从VPC的“内部”检索信息。

如果AWS Lambda函数连接到VPC,则只有在VPC配置了NAT网关或NAT实例时,它才能访问互联网

这是因为Lambda函数不接收公共IP。Lambda功能应配置为使用专用子网,然后通过NAT网关或NAT实例访问Internet

Lambda目的地

如果异步调用Lambda函数,另一个选项是配置触发另一个Lambda函数的Lambda目标。第二个Lambda功能可以“在”专有网络之外并连接到互联网。调用由AWS服务管理

因此,流程将是:

Trigger --> Lambda 1 (does RDS stuff) --> Destination: Lambda 2 (does email stuff)
第一个Lambda函数可以将信息传递给第二个Lambda函数,以便包含在电子邮件中

API网关


另一种选择是将Lambda函数保持在VPC的“外部”,但让它调用API网关从VPC的“内部”检索信息。

为什么要将Lambda函数连接到VPC?如果它不需要访问专有网络中的资源,请保持断开连接。这将允许Lambda函数直接访问互联网。@JohnRotenstein你说得对,我已经从Lambda函数中删除了它。我还有一个名为auth的lambda用于用户身份验证。它使用RDS和云监控。所以,auth在VPC中。它需要访问非专有网络lambda。但它无法做到这一点。任何事情都不会简单地超时。有什么想法吗?@JohnRotenstein如果我把mailer服务和api网关连接起来呢。我的意思是,我可以简单地从auth服务对mailer进行http调用。我还有别的选择吗?NAT网关是一种选择,但我认为这太昂贵了。为什么要将Lambda功能连接到VPC?如果它不需要访问专有网络中的资源,请保持断开连接。这将允许Lambda函数直接访问互联网。@JohnRotenstein你说得对,我已经从Lambda函数中删除了它。我还有一个名为auth的lambda用于用户身份验证。它使用RDS和云监控。所以,auth在VPC中。它需要访问非专有网络lambda。但它无法做到这一点。任何事情都不会简单地超时。有什么想法吗?@JohnRotenstein如果我把mailer服务和api网关连接起来呢。我的意思是,我可以简单地从auth服务对mailer进行http调用。我还有别的选择吗?NAT网关是一种选择,但我认为这太昂贵了。我已经尝试了第二种选择,它无法从vpc lamda(认证)与非vpc lamda(邮件)通信。因此,这个选项不起作用。我将不得不使用nat网关。怎么样-vpc lamda将发布到sns,非vpc lambda将订阅该主题。这样行吗?问题是我能否从非专有网络lambda访问sns?@dinesrawat是的,您可以使用sns的专有网络端点让专有网络直接访问亚马逊sns。另外,请注意,我的第二个选项专门使用一个名为“Destinations”的新Lambda特性来调用第二个Lambda函数。第一个Lambda函数不直接调用第二个Lambda函数。相反,AWS服务调用目标中定义的第二个Lambda函数。您能将我重定向到一些在线文档吗?我已经尝试了第二个选项,它无法从专有网络lamda(auth)与非专有网络lambda(mailer)通信。因此,这个选项不起作用。我将不得不使用nat网关。怎么样-vpc lamda将发布到sns,非vpc lambda将订阅该主题。这样行吗?问题是我能否从非专有网络lambda访问sns?@dinesrawat是的,您可以使用sns的专有网络端点让专有网络直接访问亚马逊sns。另外,请注意,我的第二个选项专门使用一个名为“Destinations”的新Lambda特性来调用第二个Lambda函数。第一个Lambda函数