我在 lambda 中有以下代码:
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
def lambda_handler(event, context):
msg_email = MIMEMultipart('alternative')
msg_email.attach(MIMEText("mymessage", 'plain'))
msg_email['Subject'] = subject
msg_email['From'] = "[email protected]"
msg_email['To'] = "[email protected]"
try:
print("AAAA")
with smtplib.SMTP('email-smtp.eu-west-1.amazonaws.com', 587) as smtp_server:
print("BBBB")
smtp_server.ehlo()
smtp_server.starttls()
smtp_server.ehlo()
smtp_server.login('myid', 'mypass')
smtp_server.sendmail("[email protected]", "[email protected]", msg_email.as_string())
except Exception:
print("Couldn't send message.")
raise
else:
print("Email sent!")
此代码打印“AAAA”,但在打印“BBBB”之前,执行 lambda 时出现错误:任务在 3.01 秒后超时。但是,如果我在我的 EC2 实例中运行它可以正常工作。为什么 lambda 不能执行它?
编辑: lambda 的角色具有以下权限:AWSLambdaBasicExecutionRole(后面带有一些 uiid)、pinpoint-email-ers-、AmazonSESFullAccess、AmazonWorkMailFullAccess、AmazonWorkMailMessageFlowFullAccess
如果您将VPC 中的 Lambda 放在公共子网中,则它没有 Internet 连接。它必须放置在一个私有子网中,该子网有一个路由表,其中的路由指向一个NAT 网关。NAT 将放置在公共子网中。
AWS Docs 中描述了详细信息:
或者,如果您不需要,请不要将您的 lambda 放在 VPC 中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句