实验三 使用无服务器函数发邮件
概述
在本实验中,我们将会使用腾讯云的消息队列CKafka、无服务器云函数SCF和对象存储COS,实现一个异常日志检测及记录系统。当业务系统中的应用功能程序生成日志后,会把日志信息通过消息实时传输到CKafka服务端。通过配置异常日志检测SCF的触发规则,一旦日志消息投递成功即可触发异常日志监测SCF的逻辑。异常日志监测SCF会监测接收到的日志消息是否含有异常关键字,然后把异常信息归档后投递到COS并发送邮件到指定的邮箱,从而实现无服务器函数发送邮件的目的。
实验环境
1、 实验组网介绍
2、 实验数据规划(数据规划表)
数据项 | 数据 | 说明 |
---|---|---|
腾讯云账号 | 账号:XXXXXXXXX 密码:XXXXXXXXXX | 涉及产品如下: CKafka VPC SCF COS CVM |
3、 实验环境确认
能够通过浏览器连接腾讯云官网https://cloud.tencent.com;
配置表
购买产品 | 规格 | 备注 |
---|---|---|
消息队列CKafka | 地域:华南地区(广州) | 使用腾讯提供的代金券购买 |
私有网络VPC | 地域:华南地区(广州) | 使用腾讯提供的代金券购买 |
无服务器云函数SCF | 模板函数“Ckafka消息投递COS” | 使用腾讯提供的代金券购买 |
对象存储COS | 地域:中国-广州;私有读写 | 使用腾讯提供的代金券购买 |
云服务器CVM | 广州1核1GB CentOS7.2 64位 | 使用腾讯提供的代金券购买 |
前提条件
本实验要求:
- 运行Microsoft Windows,可以接入互联网的笔记本电脑或者台式机
- Internet浏览器,例如Chrome, IE或Firefox
- 能够通过浏览器连接腾讯云官网https://cloud.tencent.com
- SSH客户端
实验流程
实验目标
完成本实验后,您将能够:
- 创建Ckafka
- 新建函数服务
- 配置函数、编写函数代码
- 测试函数
- 通过CKafka触发调用SCF
通过该实验,学员能够在腾讯云平台上创建CKafka和函数服务,并通过Ckafka调用SCF,实现在无服务器的环境下实现邮件发送功能。本实验实验时长为1.5小时。
任务1 创建消息队列
【任务目标】
在腾讯云平台的消息队列Ckafka管理控制台中创建Ckafka实例。
【任务步骤】
1、 在【腾讯云控制台】中,鼠标依次悬停【云产品-中间件-消息队列CKafka】,单击进入【消息队列CKafka】;在左侧导航栏中,点击【实例列表】,单击【新建】。
- 【计费模式】包年包月
- 【地域】默认切换到“华南地区(广州)”
- 【可用区】广州三区
- 【产品规格】入门型,根据实际需求
- 【磁盘容量】300GB,根据实际需求
- 【私有网络】需要事先创建一个地域相同的VPC及一个可用区相同的子网
- 【消息保留】24小时,根据实际需求
- 【实例名称】even_ckafka,自由创建
- 【购买数量】1,根据实际需求
- 【购买时长】1个月,根据实际需求
- 单击【立即购买】;
2、 购买完成后,可以在控制台列表中查看购买的Ckafka
3、 点击新创建的Ckafka实例进入实例详情页,点击【topic管理】,单击【新建】。
- 【名称】even_test,自行创建
- 其余保持默认,单击【提交】
任务2 创建COS桶
【任务目标】
通过腾讯云对象存储控制台,创建COS桶,用于存放云函数处理后的Ckafka消息。
【任务步骤】
1、 在【腾讯云控制台】中,鼠标依次悬停【云产品-存储-对象存储】,单击进入【对象存储】;在左侧导航栏中,点击【存储桶列表】,单击【创建存储桶】。
- 【名称】ckafka-backcup,自由创建
- 【所属地域】中国-广州
- 【访问权限】私有读写
- 其余保持默认,点击【确定】
任务3 创建无服务器函数
【任务目标】
通过腾讯云无服务器云函数控制台,创建函数服务,进行函数代码编写并完成函数测试。
【任务步骤】
1、 在【腾讯云控制台】中,鼠标依次悬停【云产品-Serverless-云函数】,单击进入【云函数】;在左侧导航栏,点击【函数服务】,右侧地域选择【广州】,单击【新建】按钮;
2、 新建函数:
1) 函数配置
- 【函数名称】设为“ckafka-backup”
- 【运行环境】设为【Python 2.7】
- 【创建方式】选择【模板函数】
- 【模板搜索】使用ckafka搜索并选择【ckafka消息投递COS】
- 单击【下一步】
2) 函数代码
- 保持默认配置,点击【完成】
- 完成后点击新建的函数进入详情页,点击【函数代码】,并把准备好的代码(ckafka-backup.py文件的代码)拷贝并覆盖到该函数代码中。
- 使用本模板时,需按照提示,修改函数代码中的配置信息,包括【账号】、【邮箱】、【授权码】、【APPID】、【SecertID】、【SecertKey】、【region】、【COS Bucket】等。
注意:使用授权码替代QQ密码,不能直接使用QQ密码
注:获取QQ授权码的方法如下:
- 打开QQ邮箱,点击【设置】,然后选择【账户】配置页面:
- 确保POP3/SMTP服务已经开启,然后点击【生成授权码】,使用手机进行短信验证后,即可收到授权码。
3) 函数测试:保存以上配置,修改【当前测试模板】为【Ckafka事件模板】,然后运行测试。
3、 在上述操作的同样的页面,点击【触发方式】,单击【添加触发方式】。
- 【触发方式】Ckafka触发
- 【Ckafka实例】ckafka-cyy74tv3,选择前面创建的ckafka实例
- 【topic】even_ckafka,选择前面创建的ckafka实例topic
- 【最大批量消息数】500,根据根据实际需求
- 单击【保存】
任务4 创建云服务器CVM
【任务目标】
在腾讯云平台的云服务器管理控制台中创建CVM实例,以发送生产测试消息到Ckafka。
【任务步骤】
1、 在【腾讯云控制台】中,鼠标依次悬停【云产品-计算-云服务器】,单击进入【云服务器】;在左侧导航栏,点击【实例】,右侧地域选择【广州】,单击【新建】按钮;
1)新建CVM
- 【地域】华南地区(广州)
- 【机型】入门配置(1核1GB),根据实际需求
- 【镜像】CentOS 7.2 64位
- 其余保持默认,点击【立即购买】
C:\Users\v_haohcheng\Documents\WXWork\1688850526751824\Cache\Image\2019-09\企业微信截图_15693880821972.png
2)登陆CVM,下载CKafka客户端,通过客户端发送测试消息到已购买的CKafka实例
- 登录CVM并安装JDK(运行命令yum -y install java-1.8.0-openjdk*)
- 下载Kafka客户端:在shell中运行以下命令: wget https://archive.apache.org/dist/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz 若直接下载速度不稳定,可事先将相应的压缩包进行上传至cos,设置公有读私有写,然后把cos链接替换到这里wget后的连接
- 将下载好的客户端解压到当前文件夹(在shell中运行命令:tar -C ./ -xzvf kafka_2.10-0.10.2.0.tgz),如下图所示:
- 进入解压后Kafka客户端的bin目录(在shell中运行命令:cd kafka_2.10-0.10.2.0/bin),如下图所示:
- 运行命令生产消息发送到所购买的CKafka中的主题(这里以even_test为例)中(在shell中运行命令:./kafka-console-producer.sh --broker-list 172.16.0.9:9092 --topic even_test),然后输入你想发送的消息(只有当消息中含有含error或者exception关键字时才会触发SCF的逻辑,将消息投递到COS并发送报警邮件到指定的邮箱地址)。如下图所示:
- 注意:这里的ip和port信息,需要到所购买的CKafka的【基本信息】页签中查看,如下图所示:
2、 查看日志输出:在利用Kafka客户端发送完消息后,查看新建的SCF【运行日志】页签的日志输出,如下图所示:
1)查看新建的COS存储桶,看是否有新增文件夹
2)点击COS桶中新建的文件夹,将文件夹下的文件下载下来
3)并用编辑器打开,查看是否是自己发送的消息。如下图所示
4)查看邮箱,检查是否收到告警邮件(可以观察到,只有消息中含有error或者exception的消息才会发送到指定的邮箱)
实验验证
1、 验证Ckafka实例及topic创建成功。在任务一的第2-3步中,能够查看到消息队列Ckafka实例及topic;
2、 验证无服务器云函数SCF。在任务三的第2步,测试函数成功;并在COS通中看到相应文件。
3、 验证CKafka能够调用SCF。能够在SCF【运行日志】页签的日志输出看到正确的SCF的调用信息、能够在QQ邮箱中收到相关邮件。
FAQ
1、 任务三中的第二步,测试函数报错,邮箱无法正常收到指定邮件。
- 函数代码错误。请确保代码是从文件复制粘贴过去的,因为Python代码必须严格缩进,如果代码复制后格式不正确将不能正常运行;
- 函数代码的参数是否输入正确,QQ邮箱是否填写正确;
- 请确认函数代码中的密码并不是输入QQ密码,而且需要在QQ邮箱中获取授权码,使用授权码替代QQ密码。
2、 任务四中的第三步无法查看到SCF的调用情况的相关信息。
- 请确认选择了正确的【触发方式】和【Kafka Topic】;
- 请确认触发器代码中使用了正确的邮件地址