雨云API自动化管理实战:Python SDK调用与运维脚本

Python 调雨云 API 查实例状态、拉监控、按标签批量操作,交给 crontab 自动巡检
发布于
8

控制台点点点管一台机器还行,管理十来台就费劲了。雨云提供的 API 让你能用脚本操作云资源——查实例状态、拉监控数据、批量启停,全写成代码交给 crontab 跑。本文以 Python 为例讲怎么调。

一、准备工作:API 密钥

先在雨云控制台生成 AccessKey(AK/SK),不同平台的叫法可能略有差异——API Key、Secret Key、Token 等。拿到后在脚本目录下建一个 .env 文件存放:

RAINYUN_AK=你的AccessKey
RAINYUN_SK=你的SecretKey

永远不要把 AK/SK 写进代码或提交到 git。把 .env 加入 .gitignore

二、Python 调 API 基础封装

import requests
import hmac, hashlib, time, os
from dotenv import load_dotenv

load_dotenv()
AK = os.getenv('RAINYUN_AK')
SK = os.getenv('RAINYUN_SK')

BASE_URL = 'https://api.rainyun.com'

def sign_request(method, path, body=''):
    ts = str(int(time.time()))
    msg = f"{method}n{path}n{ts}n{body}"
    sig = hmac.new(SK.encode(), msg.encode(), hashlib.sha256).hexdigest()
    return {
        'X-RY-AccessKey': AK,
        'X-RY-Timestamp': ts,
        'X-RY-Signature': sig
    }

def get_instances():
    path = '/v1/instances'
    headers = sign_request('GET', path)
    resp = requests.get(f'{BASE_URL}{path}', headers=headers)
    return resp.json()

上面是 API 签名通用模式——各家云厂商签法大同小异,核心是 timestamp + 请求路径 + 密钥做 HMAC,防重放和篡改。具体的 API 端点和签名算法以雨云官方文档为准。

三、常用 API 场景

查所有实例状态

遍历实例列表,滤出状态异常的(非 running),汇总成一句话推送到企业微信。每天跑一次,机器挂了早知道。

拉监控数据

拉 CPU/内存/带宽/磁盘 IO 等指标,写入本地文件或推给 Prometheus pushgateway。不用在每台机器上装 exporter 也能拿到基础指标。

按标签批量操作

如果实例打了标签(如 env=dev / env=prod),按标签筛选后对一组机器统一执行操作。比如每晚 10 点批量关 dev 标签的机器,省电费。

四、自动化巡检脚本示例

#!/usr/bin/env python3
import requests
# ... 签名函数如上

def daily_check():
    instances = get_instances()
    bad = [i for i in instances if i['status'] != 'running']
    if bad:
        msg = "【雨云告警】以下实例异常:n"
        msg += "n".join([f"{i['name']} ({i['id']}): {i['status']}" for i in bad])
        send_to_wechat(msg)
    print(f"巡检完成,共 {len(instances)} 台实例,{len(bad)} 台异常")

if __name__ == '__main__':
    daily_check()

丢进 crontab:0 9 * * * python3 /opt/scripts/rainyun_check.py,每天 9 点跑一次。

五、API 调用的几个坑

  • 频率限制:API 一般有 QPS 限额,for 循环里不加 sleep 可能部分请求被拒;
  • 分页:查实例列表默认一页 20 条,机器多了要循环翻页把数据拉全;
  • 幂等操作:创建实例类操作注意幂等性,脚本跑两遍别创建出两台一样的机器;
  • 错误处理:网络超时、API 返回 5xx 要做重试和降级,别一个超时脚本直接挂。

六、雨云部署建议

雨云新购用优惠码 admin01 走专属入口 https://www.jiyueip.com/link/5617 五折。巡检脚本可以跑在任何一台能联网的机器上,不一定要在雨云服务器上跑。配合前面的 Prometheus 监控、Shell 自动化运维、frp 内网穿透,就形成一套完整的自动化管理闭环。

常见问题

关于雨云 API 和自动化管理的高频疑问,下面一并解答。

常见问题(FAQ)

API 密钥泄露了怎么办?
立即在控制台禁用或轮换密钥。密钥不要写代码里,用 .env 文件管理并加入 .gitignore。生产环境建议用环境变量或密钥管理服务(Vault 等)注入。
API 有频率限制吗?
有 QPS 限额,for 循环批量操作时建议加 time.sleep(0.5) 控制频率,或做指数退避重试。具体限额看雨云官方 API 文档。
API 签名怎么实现?
核心模式:timestamp + HTTP方法 + 请求路径 + 密钥 → HMAC-SHA256 签名。各家云厂商大同小异,具体算法以雨云官方文档为准。本文给出了 Python 示例代码框架。
能不能用 API 做自动扩缩容?
理论上能——监控到 CPU 持续高负载时调 API 创建新实例并加进负载均衡池,低负载时销毁。但自动扩缩容逻辑复杂(状态机、冷却期、最小保留数),建议先用 API 做自动化巡检和告警,扩缩容等业务确实需要再上。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600