Python 3.x OSError:Errno 30只读文件系统:有没有办法在AWS Lambda中创建CSV并将其附加到Python的电子邮件中?

Python 3.x OSError:Errno 30只读文件系统:有没有办法在AWS Lambda中创建CSV并将其附加到Python的电子邮件中?,python-3.x,amazon-web-services,aws-lambda,html-email,smtplib,Python 3.x,Amazon Web Services,Aws Lambda,Html Email,Smtplib,因此,我尝试创建一个Lambda函数来从MySQL数据库进行查询,并将查询输出写入CSV文件,将创建的文件作为附件附加,然后使用Python发送电子邮件 我有一个工作代码来实现这一点,但无法在AWS Lambda中执行相同的代码 下面是我正在编写的代码: engine = create_engine("mysql+pymysql://username:password@MYSQL DB Creds") con_mysql = engine.connect() #dump_attachment_

因此,我尝试创建一个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很陌生。
非常感谢您提供的任何帮助。

错误说明您无法写入文件系统。根据代码,您尝试在那里创建CSV文件。

  • 创建附件不需要创建真实的文件。内存流就足够了
  • 允许Lambda写入/tmp目录