本篇文章介绍我写的一个程序,通过调用阿里云 OpenAPI 巡检即将到期的云资源。
https://github.com/COOH-791/cloud_instance_sentry
说到云资源续费,公认不移,是一件几乎不可能出错的事情,根据 “墨菲定律” 如果事情有变坏的可能,不管概率多小,总会发生。
实际工作中还是遇到不少因为云资源到期未续费造成的服务中断情况,所以编写该程序,通过定期巡检避免此类问题发生。
正常维护,应用于公司部分线上环境。
程序基于 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
下载源代码:
# 下载源码
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
本小节,会介绍代码如何配置以及执行流程。
以下是脱敏的测试配置文件,通过它向大家介绍各项配置的含义。
[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]:
overdue_day
过期天数阈值,那么会以全局配置中该值为准。amount_threshold
余额阈值,那么会以全局配置中该值为准。webhook
群通知 token,那么会以全局配置中该值为准。用户配置 [用户名]:
如上面的演示,[test01] 和 [test02] 这两部分为用户配置,其中 section name 由用户自由设置(支持英文和下划线)有多少个 AK 配置多少个 section 即可。
因为有全局配置的存在,用户配置中,只有 3 个配置项是必需要设置的:
可选配置,如果配置了,将优先以用户配置为准:
编写完配置文件后,使用刚才创建的虚拟环境 Python3 启动程序:
/code/cloud_instance_sentry-main/venv/bin/python3 patrol_cloud_sentry.py
正常情况下,配置的群里,将会收到如下信息:
测试无异常后,可配置定时任务,例如每天 09:30 进行过期实例巡检:
30 09 * * * /code/cloud_instance_sentry-main/venv/bin/python3 /code/cloud_instance_sentry-main/cloud_instance_sentry/patrol_cloud_sentry.py
程序的执行流程如下:
有任何问题,请与我联系。邮箱:[email protected]
欢迎提问题提需求,欢迎 Pull Requests!