Skip to content

YLiteraturePro/taskbox

 
 

Repository files navigation

任务盒子 TaskBox

任务盒子(TaskBox,以下简称盒子)是一个运行在 Serverless 平台的个人定时任务框架。它注重稳定、性能和扩展性。基于 AWS Lambda + DynamoDB + S3 + APIGW + EventBridge scheduler 编写。

deploytoaws

📦项目主页 📦演示地址

index exc page

它有如下特点:

  • 全免费,利用 AWS 给开发者的永久免费额度 🎉
  • 简单部署。基于 AWS SAM 应用模板,能自动的绝不手动。
  • Web 任务列表。支持任务增删改查,可绑定个人域名。
  • 简单的登录鉴权功能,并利用 AWS Api-Gateway 做了访问安全限制,狠狠防住暴力破解!
  • 配置、任务周期可在网页设置(不同任务支持自定义配置),任务cookie过期1秒钟更换!
  • 注重性能。无 web 框架(flask/bottle等),无冗余代码。并得益于 AWS 函数计算和数据库的高可用、高性能,网页冷启动时间 1s 内,后续网页请求基本在 5ms 内完成。不包含DynamoDB查询时延 10ms 以内
  • 提供了网页版的 Shell 和 Python 命令接口,临时使用不在话下。
  • 极具扩展性。任务插件化(Submodule 管理),根据贡献指南一分钟创建属于你的任务。还可在任务市场寻找丰富扩展求PR

2 如何使用

盒子通过 github action 实现向 AWS Lambda 的部署。你可以创建一个用户组,并添加必要的权限

1、Fork 本仓库,并在你仓库的 setting -> Actions secrets 设置如下三个变量

AWS_ACCESS_KEY_ID 
AWS_SECRET_ACCESS_KEY
WEB_PASSWORD

前两个变量从你的 aws 账户获取,一般在这里设置,第三个是用来登录盒子的密码,现在鉴权方式比较简陋,所以推荐设置一个强密码

2、推送一个 commit 到 master 分支触发自动部署到 AWS
之后从 AWS api-gateway控制台或者 github action 任务回显能够找到访问的api。

3 创建自己的任务

盒子具有很强的扩展性,以创建一个定时访问网址的任务为例。添加文件 src/taskbox/user_task/taskcronreq.py,继承taskbox.taskbase.task.Task类,内容如下

import requests

from taskbox.taskbase.task import Task
from taskbox.utils.tools import LOG

__all__ = ['CornReq']

class CornReq(Task):
    '''定时访问一个网址,万金油任务,后续加入自定义 data/param
    '''
    name_zh = '定时访问'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def step(self, config):
        '''这里是任务具体做的事情

        盒子会根据设置的周期,调用这个方法。返回的结果会显示在web的‘结果’一栏。
        '''
        res = getattr(requests, config.get('method'))(config.get('url'))
        return f'执行 {config} 成功:{res.json}'

    def get_conf_list(self):
        '''method 是 requests支持的请求方法,暂不支持 data/param 字段'''
        return {
            'url': '要访问的地址',
            'method': 'get, option, post',
        }

CornReq.register()

之后盒子解析代码的注释和配置要求,任务详情页会自动显示如下: cronreq

还可以通过 git submodule 管理任务 TODO

快速更新中,欢迎 PR

About

Another Personal task solution 演示地址 https://demo.taskbox.cn

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 83.9%
  • HTML 16.1%