腾讯云轻量应用服务器调用API监控流量阻断访问防止流量超标

腾讯云轻量应用服务器调用API监控流量阻断访问防止流量超标 背景说明腾讯云轻量应用服务器大多有月流量的限制虽然在购买时有多种规格进行选择但如果对业务流量估计不足则可能会产生流量超标导致额外费用等问题的出现此时可以通过调用官方的 API 来对流量进行监控并采取一些措施从而避免流量超标等情况的发生。本教程将介绍如何通过代码和计划任务的方式定时调用官方 API 判断剩余流量并更新防火墙以阻断对服务器的请求从而避免流量超标的情况发生。实现逻辑PHP 代码调用 API 获取轻量应用服务器实例的流量情况计算相关流量的数值如剩余流量低于流量阈值则调用 API 更新轻量应用服务器实例的防火墙官方 API 文档这里主要使用 2 个 API分别是查看实例流量包详情、应用防火墙模板以下分别为两个 API 接口的官方文档说明地址。查看实例流量包详情https://cloud.tencent.com/document/product/1207/48681应用防火墙模板https://cloud.tencent.com/document/product/1207/96883官方推荐的请求方法是 POSTPOST 请求支持的 Content-Type 类型为 application/json推荐必须使用签名方法 v3TC3-HMAC-SHA256并且官方提供多种语言的 SDK便于开发及调试但本文仅展示思路及最基础的可行性实现故而使用 GET 方式进行代码演示且未使用 SDK 。说明本文代码未对异常情况进行判断仅用于功能演示请勿直接使用于生产环境。代码说明1、配置区// 腾讯云调用 API 的 SECRET_ID 和 SECRET_KEY// 可在控制台 API 密钥管理处申请 https://console.cloud.tencent.com/cam/capidefine(SECRET_ID,你的SecretId);define(SECRET_KEY,你的SecretKey);// 轻量应用服务器的实例 ID控制台可复制define(INSTANCE_ID,你的实例ID);// 服务器所在地域查看文档填写正确的代码// 地域列表文档 https://cloud.tencent.com/document/api/1207/47564#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8define(REGION,你的服务器所在地域);// 自己设置的流量阈值 单位 GB当剩余流量低于此值时触发相关代码define(TRAFFIC_THRESHOLD,10);// 用于流量超标后阻断服务器访问的防火墙模板// 可在控制台设置 https://console.cloud.tencent.com/lighthouse/firewalltemplate/indexdefine(FIREWALL_ID,用来阻断访问的防火墙模版ID);2、查看实例流量包详情函数// 查看实例流量包详情functiongetTraffic(){$params[ActionDescribeInstancesTrafficPackages,Version2020-03-24,RegionREGION,Timestamptime(),Noncerand(10000,99999),SecretIdSECRET_ID,InstanceIds.0INSTANCE_ID];ksort($params);$signStrGETlighthouse.tencentcloudapi.com/?.http_build_query($params);$params[Signature]base64_encode(hash_hmac(sha1,$signStr,SECRET_KEY,true));$urlhttps://lighthouse.tencentcloudapi.com/?.http_build_query($params);$responsefile_get_contents($url);$datajson_decode($response,true);return$data[Response][InstanceTrafficPackageSet][0][TrafficPackageSet][0];}3、应用防火墙模板函数// 更新应用防火墙模板functionupdateFirewall(){$params[ActionApplyFirewallTemplate,Version2020-03-24,RegionREGION,Timestamptime(),Noncerand(10000,99999),SecretIdSECRET_ID,TemplateIdFIREWALL_ID,ApplyInstances.0.InstanceIdINSTANCE_ID,ApplyInstances.0.RegionREGION];ksort($params);$signStrGETlighthouse.tencentcloudapi.com/?.http_build_query($params);$params[Signature]base64_encode(hash_hmac(sha1,$signStr,SECRET_KEY,true));$urlhttps://lighthouse.tencentcloudapi.com/?.http_build_query($params);$responsefile_get_contents($url);$resultjson_decode($response,true);return!isset($result[Response][Error]);}4、主逻辑// 主逻辑$trafficgetTraffic();if(!$traffic)die(获取流量信息失败\n);// 相关文档 https://cloud.tencent.com/document/api/1207/47576#TrafficPackage// TrafficUsed Integer 流量包生效周期内已使用流量单位字节。示例值5905577// TrafficPackageTotal Integer 流量包生效周期内的总流量单位字节。示例值536870912000// TrafficPackageRemaining Integer 流量包生效周期内的剩余流量单位字节。示例值536865006423// 数值 1073741824 表示 1 GB 即 1024 * 1024 * 1024$remaining$traffic[TrafficPackageRemaining]/1073741824;$total$traffic[TrafficPackageTotal]/1073741824;$used$traffic[TrafficUsed]/1073741824;echosprintf(流量统计: 剩余%.2fGB/总共%.2fGB (已用%.2fGB),$remaining,$total,$used).\n;if($remainingTRAFFIC_THRESHOLD){echo流量不足正在更新防火墙...\n;echo(updateFirewall()?防火墙更新成功\n:防火墙更新失败\n);}else{echo流量充足服务正常运行\n;}控制台相关操作1、API 密钥管理进入 API 密钥管理界面https://console.cloud.tencent.com/cam/capi如图操作即可新建密钥请特别注意官网的安全提示2、服务器实例 ID 获取进入轻量应用服务器管理界面https://console.cloud.tencent.com/lighthouse/instance/index选中要设置的服务器点击查看详情后在概要页可查看并复制实例 ID3、实例地域编码进入地域列表文档https://cloud.tencent.com/document/api/1207/47564#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8查看服务器所在地区找到对应编码。4、防火墙模板设置进入防火墙模板管理界面https://console.cloud.tencent.com/lighthouse/firewalltemplate/index可建立和管理多个模板用于不同场景对轻量应用服务器实例的快速设置。5、操作后配置代码将上述控制台设置的 API 密钥、实例 ID、所在地域编码、防火墙模板 ID 等信息复制至代码中的配置区即可。运行效果演示1、剩余流量充足假设流量阈值为10剩余流量大于 10GB代码逻辑为剩余流量充足运行结果为流量统计: 剩余 99.68GB/总共 300.00GB (已用 200.32GB) 流量充足服务正常运行2、剩余流量不充假设流量阈值为100剩余流量小于 100GB代码逻辑为剩余流量不足运行结果为流量统计: 剩余 99.68GB/总共 300.00GB (已用 200.32GB) 流量不足正在更新防火墙… 防火墙更新成功此时预先设定的阻断访问防火墙生效替换了轻量应用服务器实例对应的防火墙规则服务器无法访问。设置计划任务该文件可通过设置计划任务的方式定时运行。# PHP 解释器路径和 PHP 文件路径请根据实际情况进行修改# 每 5 分钟运行 1 次*/5 * * * * /usr/bin/php /root/lighthouse_check.php/root/lighthouse_check.log总结此种方式仅做为最基础的逻辑演示结合 API 可以实现多种功能的自动化处理如根据不同情况使用不同的防火墙规则、变更实例套餐等等操作。具体操作调用的使用方法请以腾讯云官方文档为准。本文同步发表于个人博客 云计算课代表更多云产品教程请访问 https://www.yiisu.vip/