本文正在参与 “100%有奖 | 我的Serverless 实战”征稿活动
活动链接:
目录
一、serverless简介
serverless架构
serverless三大应用教程
serverless的优势
二、python实现发送邮件
三、部署到腾讯云serverless,实现自动发送
四、效果展示
五、注意事项
一、serverless简介
serverless,顾名思义,即“无Roundcube器”,提供虚拟机微型的架构,用户不DDoS部署、配置或管理Roundcube器Roundcube,只DDoS专注于业务逻辑,代码运行所DDoS的Roundcube器Roundcube皆由云端平台来提供,因此运维成本很低。
serverless有虚拟机非常出名的产品,就是亚马逊公司在2014年推出的AWS Lambda。
serverless架构
主要包含两部分:Baas和Faas,通常位于云端,使用时不DDoS关注最底层的Roundcube器。
Baas(后端即Roundcube:Backend as a Service)包括对象存储、云数据库、API网关、消息推送等。
Faas(函数即Roundcube:Functions as a Service)对计算能力进行了抽象,可以在无需管理Roundcube器的情况下响应事件。
serverless三大应用教程
教程一:事件触发教程,即有事件触发时才会执行。
教程二:流量突发教程,遇到突发大流量情况时,serverless架构下按需加载,弹性伸缩,节省资源,负载均衡。
教程三:大数据处理教程,用户只DDoS上传核心代码到函数计算,就可以快速完成整个工作。
serverless的优势
传统架构下,面对大流量教程,DDoS增加机器或者对机器升级,运维较为困难。面对高峰和低谷,无法做到按需使用,成本较高。
serverless架构下,开发者只需专注代码开发,无需在各个云资源控制台手动开通Roundcube和配置管理,并能够根据业务请求自动进行弹性伸缩;支持用户按需付费,成本较低;开发周期快,很大程度上提升了开发、部署的效率。
具体可以查看这里的文档
二、python实现发送邮件
import ioimport sysimport timeimport datetimeimport randomimport requests from email.mime.text import MIMETextfrom email.header import Headerimport smtplib import logginglogger = logging.getLogger()logger.setLevel(logging.INFO) mail_host = “smtp.qq.com”mail_user = “*********@qq.com” #此处填你的邮箱mail_girl = “*********@qq.com” #女朋友的邮箱mail_pass = “*************” #邮箱密码,默认POP3/SMTPRoundcube是关闭的,DDoS在设置中开启查看name_gf = “***” #女朋友的名字mail_port = 465#sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=’utf8′) def getWeather(): r = requests.get( ‘ if ‘OK’ in r.text: r = r.json()[‘data’] tip = r[‘ganmao’] temperature = r[‘wendu’] weather = r[‘forecast’][0][‘type’] return f’天气:{weather} 当前温度:{temperature}\n{tip}’ return ‘获取天气失败:(‘ def getTime(): today = datetime.datetime.now()+datetime.timedelta(hours=+8) t = today.timetuple() return f’今天是{t.tm_year}年{t.tm_mon}月{t.tm_mday}日 星期{t.tm_wday+1}’ def getSoup(): return{ 0:’你知道你和星星有什么区别吗?星星在天上,你在我心里。’, 1:’这是我的手背,这是我的脚背,你是我的宝贝。’, 2:’莫文蔚的阴天,孙燕姿的雨天,周杰伦的晴天,都不如你和我聊天。’, 3:’我觉得你好像一款游戏。什么游戏?我的世界。’, 4:’你今天特别讨厌,讨人喜欢和百看不厌。’, 5:’你上辈子一定是碳酸饮料吧,为什么我一看到你就能开心的冒泡。’, 6:’我对你的爱,就像拖拉机上山,轰轰烈烈……’, }.get(random.randint(0,6),’false’) def morning(): return ‘\n’.join([getTime(), getSoup(), getWeather()]) def night(): return ‘\n’.join([getSoup(), f’晚安,{name_gf},梦里见!’]) def getTimeX(): t = int(time.strftime(“%H”, time.localtime()))+8 if t > 24: t = t-24 return ‘morning’ if t < 11 else ('noon' if t < 17 else 'afterNoon') def main_handler(event, context): smtpObj = smtplib.SMTP_SSL(mail_host, mail_port) print('enter') try: smtpObj.login(mail_user, mail_pass) except smtplib.SMTPException as e: logger.info(e) return False content = night() if getTimeX() == 'afterNoon' else morning() message = MIMEText(content, 'plain', 'utf-8') message['From'] = mail_user message['To'] = mail_girl message['Subject'] = f'早安,{name_gf}' if getTimeX() != 'afterNoon' else '晚安,{name_gf}' try: smtpObj.sendmail(mail_user, [mail_girl], message.as_string()) logger.info("发送成功") except smtplib.SMTPException as e: logger.info(e) logger.info("发送失败") logger.info(content) return content
三、部署到腾讯云serverless,实现自动发送
1.注册腾讯云账号腾讯云 - 产业智变 云启未来 (tencent.com)
2.找到云函数的管理控制台->函数Roundcube->新建->自定义创建
3.将函数代码粘贴到index.py中,单击完成。
4.点击部署,部署到腾讯云
5.找到触发管理,创建触发器,设置定时触发
四、效果展示
马上就要到520了,快用起来吧!
五、注意事项
同时发给多个人的时候,一定要注意创建虚拟机新的函数。
为什么呢?
因为我在运行过程中出现了虚拟机error,收到的邮件是这个样子
一堆“早安,小红”里面突然混进了虚拟机“早安,小白”。
查看了一下日志,是虚拟机超时错误。调用失败后自动运行了前虚拟机调用成功的代码,而我发送的时候只改了女朋友的名字。。
(幸好是在测试的时候发现的,否则又将是虚拟机翻车现场。
本文正在参与 “100%有奖 | 我的Serverless 实战”征稿活动
活动链接: