因此,我试图创建一个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文件。