暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

手把手教程 | 如何使用企业微信接收数据库事件通知

西云数据云计算 2022-05-12
412



Amazon Relational Database Service(Amazn RDS)是一个托管式服务的集合,可以简化在云中设置、运营和扩展数据库的过程。从以下七种热门引擎中选择 – 兼容 MySQL 的 Amazon Aurora、兼容 PostgreSQL 的 Amazon Aurora、MySQL、MariaDB、PostgreSQL、Oracle 以及 SQL Server。


监控是维护 Amazon RDS 和亚马逊云科技解决方案的可靠性、可用性和性能的重要组成部分。要调试多点故障,我们建议您从亚马逊云科技解决方案的所有部分收集监控数据,并尽可能地自动化监控任务。


RDS 事件表示 Amazon RDS 环境中的更改。例如,当数据库实例的状态从挂起变为正在运行时,Amazon RDS 将生成事件。Amazon RDS 将事件近乎实时地传输到 CloudWatch Events 和 EventBridge。同时,数据库的预期维护,特别是补丁更新等事件也会通过 RDS 事件进行通知。因此,能够快速地获取到 RDS 事件对于随时监控数据库运行情况非常重要。


目前一些国内的亚马逊云科技用户,在使用企业微信作为内部工作沟通平台。他们希望将 RDS 事件发送到企业微信中,方便统一运维及快速反应。在本文中,将使用 RDS 事件与 EventBridge 进行集成,并利用 SNS 直接以邮件的形式发送告警通知,并且与 Amazon Lambda 结合,通过企业微信以即时聊天的形式发送事件通知。以下所有操作将在由西云数据运营的亚马逊云科技中国(宁夏)区域进行测试。



方案架构



在本次的文章中,将会使用到如下的服务:

>>>Amazon EventBridge:EventBridge 是一种无服务器事件总线,可使用于您的应用程序、集成式软件即服务 (SaaS) 应用程序和服务生成的事件,更轻松地大规模构建事件驱动型应用程序。在 RDS 的页面也有 RDS Event 的订阅按钮,可以使用户订阅不同集群不同类型的 event。EventBridge 提供了更为灵活的订阅方式,EventBridge 支持订阅所有 RDS 事件,并且支持同时配置 Elasticache 等,支持一处配置多个事件源。


>>>Amazon SNS:SNS 是一项用于应用与应用之间 (A2A) 以及应用与人之间 (A2P) 通信的完全托管型消息收发服务。


>>>Amazon Lambda:Lambda 是一项无服务器事件驱动型计算服务,该服务使您可以运行几乎任何类型的应用程序或后端服务的代码,而无需预置或管理服务器。这里使用 Lambda 直接调用企业微信的群聊机器人 webhood 地址进行消息发送。



邮件测试


下面我们先将 RDS event 推送到邮件上用于查看 RDS event 的相关内容。


首先跳转到 SNS 页面并创建名为 “test” 的 SNS 主题。



对 SNS 主题创建邮件订阅。



创建 EventBridge 规则,首先跳转到 EventBridge 页面。



进行规则定义。



源选择所有 RDS 的事件。这里可以根据需要进行配置,比如需要配置只接收特定数据库的事件通知。




目标选择刚刚创建的 SNS 主题。



重启测试数据库获取事件通知。此时可以在邮箱中接收到相关重启的事件通知。这里就完成了发送到邮箱的测试。



发送到企业微信


下面创建一个 Lambda 的目标接收 SNS 的 RDS 事件通知。并且通过 Lambda 将事件通知推送到企业微信群中到群聊机器人,实现实时推送。


首先按照如下步骤在企业微信群中创建一个企业微信群聊机器人,并获取到 webhood 的 token。


创建群聊机器人。

获取 webhood 地址。

创建 Lambda 函数,其中配置环境变量为 mytoken,该值为上面获取到的机器人的 webhook 地址中的 key 的值。


例如 webhood 地址为:

https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa


则 mytoken 的值设置为 693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa



创建如下的 Lambda 函数,python 版本为 3.8。


import json
import requests
import os

def lambda_handler(event, context):
qywx_robot_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key="
token = os.environ['mytoken']
send_url = qywx_robot_url + token
headers = {
'Content-Type': 'application/json'
}

context = ""
try:
message = json.loads(event['Records'][0]['Sns']['Message'])
# 时间
time = message['time']
detail = str(message['detail'])
title = '<font color=\"info\">[Amazon Web Services health event]</font>'

content = title + "\n> time: " + str(time) + "\n> detail: " + detail

except Exception as e:
print('cloudwath event 告警解析异常,请检查lambda代码')
print(str(e))
content = "cloudwath event 告警解析异常,请检查lambda代码" + str(e)

msg = {
"msgtype": 'markdown',
"markdown": {'content': content}
}

response = requests.post(url=send_url, data=json.dumps(msg), headers=headers)
print('已发送消息到企业微信')
return response.text


配置 SNS,创建 Lambda 的订阅并根据情况删除邮件的订阅。



在企业微信接收相关通知。




小结


在这篇文章中,我们演示了如何使用 EventBridge,SNS 和 Lambda 自定义 Amazon RDS 事件通知并发送到企业微信进行通知。监控数据库对每个组织都至关重要,借助此解决方案,我们可以使用 Amazon RDS 事件监控数据库,向运营团队发送通知,这有助于您管理和监视所有 Amazon RDS 数据库环境。您还可以根据您的要求添加和删除所需的 Amazon RDS 事件。同时本方案支持在 EventBridge 中支持的所有亚马逊云科技云服务,包括 ElastiCache,OpenSearch 等,可以同时订阅并发送通知到企业微信。


参考连接:(复制下方链接至浏览器即可查看)

1、企业微信:如何设置群机器人
https://open.work.weixin.qq.com/help2/pc/14931?person_id=1
2、企业微信:群机器人配置说明
https://developer.work.weixin.qq.com/document/path/91770
3、监控 Amazon RDS 事件
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/working-with-events.html

作者介绍

肖福生


西云数据解决方案架构师,负责西云数据华南区域的云计算方案咨询和设计,同时致力于亚马逊云科技在国内的应用和推广。在加入西云数据之前,在云计算行业担任解决方案架构师,负责互联网行业的云计算方案咨询以及架构设计,在企业软件架构,数据库,中间件软件等方面有丰富的经验。


点击文末左下角 “阅读原文” 查看

亚马逊云科技中国(宁夏)区域免费套餐




互动


参与分享活动,赢取精选好礼!根据 “分享最多” 排行榜,我们将在每月第一次推送中公布获奖名单,为前 10 名送上精美礼品。







文章转载自西云数据云计算,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论