基于腾讯云Serverless的HTTP服务探活函数

2021-08-05  本文已影响0人  EasonYang

本文基于 Golang 开发了一款简单易用的 HTTP 拨测云函数,入口函数与腾讯云 Serverless SCF SDK 绑定。与目前腾讯云中默认的拨测函数不同的是, url-tester-func 支持将非 200 响应码作为预期值且通知机制由邮件变更为了 Telegram Bot 。使用者借助腾讯云提供的免费 Serverless 调用配额即可搭建一套简单的 HTTP 接口探活服务。

功能

项目地址

MrEasonYang/url-tester-func
中文文档

使用

填写函数配置

首先需要根据腾讯云文档创建 Serverless 函数的配置文件, 可参照如下示例配合文档进行配置: serverless.yaml

构建

本地安装 Golang 并构建项目:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

本地测试

参考腾讯云文档进行本地测试:腾讯云SCF说明

创建函数

在腾讯云中添加函数

在已注册腾讯云账号后,访问函数管理后台选择「自定义创建」来新建一个函数。配置可参考下图,「环境变量」参数在下文中会有详细描述,图中未展示的其他参数保持默认即可:

函数配置示例
需要注意的是,为了保证可正常访问 Telegram API ,函数的部署地域应选择中国大陆之外的区域。

配置环境变量

程序依赖腾讯云中的全局变量配置来获取目标 URL 集合配置和 Telegram API 配置,在腾讯云的管理平台中按如下格式设置即可:

示例:

[
    {
        "url": "<Target URL 1 with Telegram Notifier>",
        "expectedStatusCode": 200,
        "notifyMethod": "telegram"
    },
    {
        "url": "<Target URL 2 with FtqqV1 Notifier>",
        "expectedStatusCode": 403,
        "notifyMethod": "ftqq_v1"
    },
    {
        "url": "<Target URL 3 with FtqqV2 Notifier>",
        "expectedStatusCode": 400,
        "notifyMethod": "ftqq_v2"
    },
    {
        "url": "<Target URL 4 with Qmsg Notifier>",
        "expectedStatusCode": 301,
        "notifyMethod": "qmsg_chat"
    },
    {
        "url": "<Target URL 4 with Qmsg Group Notifier>",
        "expectedStatusCode": 200,
        "notifyMethod": "qmsg_group_chat"
    },
]

上传代码

使用上传 ZIP 压缩包(推荐)的方式将包含构建后程序的函数目录完整上传至平台。

添加定时触发器

在函数的「触发管理」中新建一个「定时触发器」,规则可根据需求定制。例如如果你希望探测函数每 5 分钟运行一次,则进行下图的配置:


定时器示例

运行

当目标服务按预期正常响应时程序将在每次执行后返回成功 JSON 结果,否则程序将借由绑定的 Telegram Bot 发送如下格式的消息至目标聊天中,消息内容将包含拨测失败的错误内容:

Failed to test URL https://foo.foo due to error Get "https://foo.foo": dial tcp: lookup foo.foo on 10.10.10.10:53: read udp 10.10.10.10:5180->10.10.10.10:53: i/o timeout

Todo

未来还考虑支持腾讯云之外的 Serverless 平台,包括但不限于:

贡献代码

欢迎大家通过 PR 的形式来完善本工具或加入新的想法,PR 形式不限,提 PR 前做好 lint 即可。

费用说明

在实际使用中,是否会产生费用其实是与探测的「地址数量」和探测的「频次」是正相关的。

腾讯云 SCF 在公测结束后,对免费额度进行了调整,本工具比较容易触发的费用模式主要是「外网出流量计费」,可以参考官方的文档

由于外网出流量计出不计入,所以探测的逻辑中只有在发起 HTTP 请求时会被计量,接收响应则不会。因此在「地址数量」和「频次」均不高的时候,造成的费用非常低,在账单中会被校准为 0 元。但大规模使用的场景下则会累积较大量的外网出流量,造成事实上的费用,目前的费用标准是 0.8 元/GB 。

那么用量的「高」和「低」该如何判断呢?这里以我个人的使用经验来给大家举例作为参考:

腾讯云账单如下,即产生 0.06 元费用,校准后实际收费为 0 元:


腾讯云账单

大家可以此为根据,假设流量和示例是线性关系来判断自己的用量是否会产生费用。

协议

MIT

上一篇 下一篇

猜你喜欢

热点阅读