公有云-实验三 使用无服务器函数发邮件

实验三 使用无服务器函数发邮件

概述

在本实验中,我们将会使用腾讯云的消息队列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】;
  • 请确认触发器代码中使用了正确的邮件地址