当从 Lambda 函数 运行 时从 Mailchimp Transactional 获取超时
Getting timeout from Mailchimp Transactional when running from Lambda function
我正在尝试使用 Node 和无服务器框架通过 Mailchimp Transactional/Mandrill 发送电子邮件。
我可以在本地正常发送电子邮件(使用 serverless-offline
),但是当我将该功能部署到我们的暂存环境时,在尝试连接到 API.
我的代码是:
const mailchimp = require('@mailchimp/mailchimp_transactional')(MAILCHIMP_TRANSACTIONAL_KEY);
async function sendEmail(addressee, subject, body) {
const message = {
from_email: 'ouremail@example.com',
subject,
text: body,
to: [
{
email: addressee,
type: 'to',
},
],
};
const response = await mailchimp.messages.send({ message });
return response;
}
我的 Lambda 设置为 60 秒超时,我从 Mailchimp 返回的错误是:
Response from Mailchimp: Error: timeout of 30000ms exceeded
在我看来,要么是 Mailchimp 以某种方式阻止了来自 Lambda IP 的流量,要么是 AWS 不让流量连接到邮件 API。
我试过直接使用 fetch
调用 API 而不是使用 npm 模块,但仍然返回类似的错误(尽管在 html 格式中很奇怪):
Mailchimp send email failed: "<html><body><h1>408 Request Time-out</h1>\nYour browser didn't send a complete request in time.\n</body></html>\n\n"
是否有我遗漏的任何 AWS 权限,或我忽略的 Mailchimp Transactional/Mandrill 配置?
我在使用 Mailchimp 的营销 API 时遇到了同样的问题,并通过通过 NAT 网关路由流量解决了这个问题。这样做可以让 VPC 内的 lambda 函数访问外部服务。
我是如何做到这一点的简短版本:
- 在您的 VPC 中创建一个新子网
- 为刚刚创建的新子网创建一个新路由 table,并确保新子网正在使用这个新路由 table
- 创建一个新的 NAT 网关
- 让新路由 table 将所有出站流量 (0.0.0.0/0) 指向该 NAT 网关
- 让与 NAT 网关关联的子网将所有出站流量指向互联网网关(这通常在 AWS 填充默认 VPC 时已经创建)
您可以在此 link 找到更多信息:https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/
我正在尝试使用 Node 和无服务器框架通过 Mailchimp Transactional/Mandrill 发送电子邮件。
我可以在本地正常发送电子邮件(使用 serverless-offline
),但是当我将该功能部署到我们的暂存环境时,在尝试连接到 API.
我的代码是:
const mailchimp = require('@mailchimp/mailchimp_transactional')(MAILCHIMP_TRANSACTIONAL_KEY);
async function sendEmail(addressee, subject, body) {
const message = {
from_email: 'ouremail@example.com',
subject,
text: body,
to: [
{
email: addressee,
type: 'to',
},
],
};
const response = await mailchimp.messages.send({ message });
return response;
}
我的 Lambda 设置为 60 秒超时,我从 Mailchimp 返回的错误是:
Response from Mailchimp: Error: timeout of 30000ms exceeded
在我看来,要么是 Mailchimp 以某种方式阻止了来自 Lambda IP 的流量,要么是 AWS 不让流量连接到邮件 API。
我试过直接使用 fetch
调用 API 而不是使用 npm 模块,但仍然返回类似的错误(尽管在 html 格式中很奇怪):
Mailchimp send email failed: "<html><body><h1>408 Request Time-out</h1>\nYour browser didn't send a complete request in time.\n</body></html>\n\n"
是否有我遗漏的任何 AWS 权限,或我忽略的 Mailchimp Transactional/Mandrill 配置?
我在使用 Mailchimp 的营销 API 时遇到了同样的问题,并通过通过 NAT 网关路由流量解决了这个问题。这样做可以让 VPC 内的 lambda 函数访问外部服务。
我是如何做到这一点的简短版本:
- 在您的 VPC 中创建一个新子网
- 为刚刚创建的新子网创建一个新路由 table,并确保新子网正在使用这个新路由 table
- 创建一个新的 NAT 网关
- 让新路由 table 将所有出站流量 (0.0.0.0/0) 指向该 NAT 网关
- 让与 NAT 网关关联的子网将所有出站流量指向互联网网关(这通常在 AWS 填充默认 VPC 时已经创建)
您可以在此 link 找到更多信息:https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/