Python 调用阿里云 OpenAPI 巡检到期云资源

文若5个月前技术文章132

前言

本篇文章介绍我写的一个程序,通过调用阿里云 OpenAPI 巡检即将到期的云资源。

https://github.com/COOH-791/cloud_instance_sentry

1. 用途

说到云资源续费,公认不移,是一件几乎不可能出错的事情,根据 “墨菲定律” 如果事情有变坏的可能,不管概率多小,总会发生。

实际工作中还是遇到不少因为云资源到期未续费造成的服务中断情况,所以编写该程序,通过定期巡检避免此类问题发生。

  • 支持对称加密用户填写到配置文件中的 AK 信息。

  • 支持多个 AK 账号巡检。

  • 支持云账号额度巡检。

  • 支持全局配置。

  • 支持将巡检报告发送到钉钉 & 飞书(研发中)。

2. 项目状态

正常维护,应用于公司部分线上环境。

  • 已测试环境

    • Python 3.7

    • CentOS Linux release 7.9.2009 (Core)

3. 环境准备

3.1 Python 安装

程序基于 Python3 研发,如果系统中没有 Python3 可使用下面方式安装:

# 下载 Python 源码
wget "https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz"
# 解压
tar -xvJf Python-3.7.3.tar.xz
# 编译
cd Python-3.7.3
./configure prefix=/usr/local/python3
make && make install
ln -fs /usr/local/python3/bin/python3 /usr/bin/python3
ln -fs /usr/local/python3/bin/pip3 /usr/bin/pip3

测试:

python3 --version
pip3 --version

3.2 代码依赖安装

下载源代码:

# 下载源码
wget https://github.com/COOH-791/cloud_instance_sentry/archive/refs/heads/main.zip
# 解压
unzip cloud_instance_sentry-main.zip
# 进入代码
cd cloud_instance_sentry-main/

在项目路径中,创建虚拟环境:

# 创建虚拟环境文件夹
mkdir venv
cd venv
# 创建虚拟环境
python3 -m venv .
# bin  include  lib  lib64  pyvenv.cf
# 激活环境
source ./bin/activate

安装依赖模块:

# 更新 pip
pip3 install --upgrade pip
# 进入代码 requirements.txt 文件目录,执行依赖模块安装
pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
# 该模块需要单独安装
pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com alibabacloud_cas20200407==1.0.13

退出当前虚拟环境:

deactivate

4. 使用案例

本小节,会介绍代码如何配置以及执行流程。

4.1 配置文件介绍

以下是脱敏的测试配置文件,通过它向大家介绍各项配置的含义。

[global-config]
# 实例过期天数阈值
global_overdue_day = 15
# 费用阈值
global_amount_threshold = 1000000
# webhook
global_webhook = https://oapi.dingtalk.com/robot/send?access_token=39c437db9d6f217b1cedad7012c8f
# 最大显示多少个实例
max_list_length = 10
# 心跳检测
ping = on
# 是否隐藏余额,on 隐藏 off 不隐藏
global_amount_invisible = off

[test01]
username = 测试用户1
access_key = B_c31f34addb5f08f365b322dd199f92092b34142e64e
access_key_secret = B_2344bfd8236ea936d38c7e3474841f033fa9
amount_threshold = 10000
overdue_day = 10

[test02]
username = 测试用户2
access_key = B_c31f34addb5f08f365b322dd199f92092b34142e64e
access_key_secret = B_2344bfd8236ea936d38c7e3474841f033fa9

该程序支持巡检多个 AK 账号,配置文件由两部分组成,分别是 全局配置用户配置,其中全局配置是必需要配置的,用户配置是指每个 AK 的信息配置,有多个 AK 就有多少个用户配置。

全局配置 [global-config]:

  • global_overdue_day:全局实例过期天数阈值,如果用户配置中,没有设置 overdue_day 过期天数阈值,那么会以全局配置中该值为准。

  • global_amount_threshold:全局费用阈值,如果用户配置中,没有设置 amount_threshold 余额阈值,那么会以全局配置中该值为准。

  • global_webhook:通知群的 webhook ,如果用户配置中,没有设置 webhook 群通知 token,那么会以全局配置中该值为准。

  • max_list_length:如果过期实例非常多的话,发送出来的卡片会非常长,而且超出限制消息会发送失败,该参数用来配置,过期实例列表的最大长度。

  • ping:设置为 off 的话,如果当天巡检没有发现即将过期的实例,那么不会发送任何消息,设置为 on 的话,既使没有巡检出过期实例,也会向用户发送一个通知,相当于一个心跳检测,告诉用户程序正常运行。

  • global_amount_invisible:程序会采集余额,但是有些用户对余额比较敏感,不想让余额展示出来,可通过设置该参数。如果用户配置中,没有设置 amount_invisible 参数,那么会以全局配置中该值为准。

用户配置 [用户名]:

如上面的演示,[test01] 和 [test02] 这两部分为用户配置,其中 section name 由用户自由设置(支持英文和下划线)有多少个 AK 配置多少个 section 即可。

因为有全局配置的存在,用户配置中,只有 3 个配置项是必需要设置的:

  • username:用户名。

  • access_key:AK。

  • access_key_secret:AK 密钥。

可选配置,如果配置了,将优先以用户配置为准:

  • webhook:通知的群 webhook。

  • amount_threshold:费用阈值。

  • overdue_day:过期天数阈值。

  • amount_invisible:是否隐藏余额,on 隐藏 off 不隐藏。

4.2 启动巡检

编写完配置文件后,使用刚才创建的虚拟环境 Python3 启动程序:

/code/cloud_instance_sentry-main/venv/bin/python3 patrol_cloud_sentry.py

正常情况下,配置的群里,将会收到如下信息:

994dbeefb0d541ad807db458f4e8ec7c994dbeefb0d541ad807db458f4e8ec7c.png

测试无异常后,可配置定时任务,例如每天 09:30 进行过期实例巡检:

30 09 * * * /code/cloud_instance_sentry-main/venv/bin/python3 /code/cloud_instance_sentry-main/cloud_instance_sentry/patrol_cloud_sentry.py

4.3 程序流程

程序的执行流程如下:

  1. 读取配置文件,会进行判断用户配置中的 AK 信息是否已经加密,如果没有加密将使用对称加密针对 AK 信息加密。

  2. 使用 AK 调用阿里云 OpenAPI 拉取实例列表。

  3. 根据列表和用户提供的阈值,组织消息列表。

  4. 调用消息通知模块,发送巡检结果。

5. 后记

有任何问题,请与我联系。邮箱:huabing8023@126.com

欢迎提问题提需求,欢迎 Pull Requests!

相关文章

HDFS Fsimage分析磁盘目录(文件级别)

HDFS Fsimage分析磁盘目录(文件级别)

首先获取fsimage信息hdfs dfsadmin -fetchImage  /opt/fsimage格式化fsimage 转换为可读文本hdfs oiv -i /opt/fsimage/fsima...

企业级大数据安全架构(九)

企业级大数据安全架构(九)

一、FreeIPA管理员密码忘记后如何修改1.1重置Directory Server管理员密码1.1.1停止directory server服务[root@ipa schema]# start-dir...

apache Kyuubi部署及对接hive

apache Kyuubi部署及对接hive

1、背景客户重度使用spark sql,但是使用spark thriftserver存在各种各样的问题,我们选择使用kyuubi来替代spark thriftserver的使用2、安装包下载下载地址:...

日志聚合工具loki

1、loki是什么Loki是一个水平可扩展,高可用性,多租户的日志聚合系统,受到Prometheus的启发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。...

Pod终止-preStop

由于 Pod 所代表的是在集群中节点上运行的进程,当不再需要这些进程时允许其体面地 终止一般不应武断地使用 KILL 信号终止它们设计的目标是令你能够请求删除进程,并且知道进程何时被终止,同时也能够确...

开源Kubernetes工具

开源Kubernetes工具

类别 1:运行 Kubernetes 环境Minikube 仍然是最佳的几乎每个 Kubernetes 教程都是从“下载 Minikube”开始的,这在今天仍然行得通。如果你想在一个真正低风险的环境中...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。