OSError:Errno 30只读文件系统:以任何方式创建CSV并将其附加到AWS Lambda中来自Python的电子邮件中的方法?

问题描述 投票:0回答:1

因此,我试图创建一个Lambda函数以从MySQL数据库查询,并将查询输出写入CSV文件,将创建的文件作为附件附加,并使用Python发送电子邮件。

我有一个有效的代码可以实现这一目标,但是无法在AWS Lambda中执行相同的代码。

这是我现在正在处理的代码:

engine = create_engine("mysql+pymysql://username:password@MYSQL DB Creds")
con_mysql = engine.connect()

#dump_attachment_query_link
attach = pd.read_sql("SELECT * FROM some_table)",con_mysql)


#NAMING_FILES
#start,yest are dates
def filenames(start, yest):

if start == yest:
    return "Dump_{}.csv".format(yest)
  else:
    return "Dump_{}_to_{}.csv".format(start, yest)

attach.reset_index(drop = True, inplace = True)
att = attach.to_csv(filenames(start, yest))


files = filenames(start, yest)

def send_mail(fromaddr, subject, message):
    access_token, expires_in = refresh_authorization(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN)
    auth_string = generate_oauth2_string(fromaddr, access_token, as_base64=True)

    msg = MIMEMultipart('related')
    msg['Subject'] = subject + ": %s" %yest
    msg['From'] = fromaddr
    msg['To'] = "receivers'mail"
    msg.preamble = 'This is a multi-part message in MIME format.'
    msg_alternative = MIMEMultipart('alternative')
    msg.attach(msg_alternative)
    part_text = MIMEText(lxml.html.fromstring(message).text_content().encode('utf-8'), 'plain', _charset='utf-8')
    part_html = MIMEText(message.encode('utf-8'), 'html', _charset='utf-8')
    msg_alternative.attach(part_text)
    msg_alternative.attach(part_html)

    part = MIMEBase('application', "octet-stream")
    part.set_payload(open(files, "rb").read())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename = {}'.format(files))
    msg.attach(part)

    server = smtplib.SMTP('smtp.gmail.com:587')
    server.ehlo(GOOGLE_CLIENT_ID)
    server.starttls()
    server.docmd('AUTH', 'XOAUTH2 ' + auth_string)
    server.sendmail(fromaddr,msg['To'].split(",") + msg['Cc'].split(","), msg.as_string())
    server.quit()

[使用代码时,出现以下错误-[ERROR] OSError:[Errno 30]只读文件系统:'Dump _ {} to {}。csv'

我对Lambda和Python很陌生。对此有任何帮助,感激不尽]

python-3.x amazon-web-services aws-lambda html-email smtplib
1个回答
0
投票

错误提示您无法写入文件系统。根据代码,您尝试在其中创建CSV文件。

  1. 您无需创建真实文件即可创建附件。在内存中流就足够了。
  2. 允许您的Lambda写入/ tmp目录。
© www.soinside.com 2019 - 2024. All rights reserved.