Netlify前段时间推出了自动定时任务:Scheduled Functions (serverless),试用了一下,真的很香。目前还在测试,但个人感觉非常好用。目前的限制是每个账户每月不超过100小时的运行时间,每个函数的运行时间不超过10秒。
创建一个Web项目
这个项目可以是React,Vue的项目,也可以是一个最简单的HTML静态页面。其实后面开发的自动定时运行的serverless function,跟这些页面没有什么关系,但在Netlify架构中,似乎需要一个站点作为这些serverless functions的“宿主”。
然后将这个项目添加到Github,并通过OAuth认证并授权Netlify可以自动构建并发布这个项目。
在后续步骤中添加了serverless functions之后,只要提交到Github,Netlify就会自动构建前端/后端funcitons并发布到Netlify。
在Web前端项目中添加无服务器函数
首先安装需要用到的几个库:
yarn add @netlify/functions coingecko-api telegraf
添加文件:netlify/functions/test.ts
import { Handler, schedule } from "@netlify/functions";
import CoinGecko from "coingecko-api";
import { Telegraf } from 'telegraf';
const handler: Handler = async () => {
const telegramToken = process.env.TELEGRAM_TOKEN;
const chatId = process.env.TELEGRAM_CHAT_ID;
const bot = new Telegraf(telegramToken);
const CoinGeckoClient = new CoinGecko();
let prices = "";
const result = await CoinGeckoClient.coins.fetchTickers('bitcoin')
const tickers = result.data.tickers;
for (let i = 0; i < tickers.length; i += 1) {
const ticker = tickers[i];
if (ticker.target === "USDT") {
prices = `${ticker.base}: ${ticker.last}\n`;
break;
}
}
await bot.telegram.sendMessage(chatId, prices);
return {
statusCode: 200,
headers: {
"Content-Type": "application/json",
},
body: prices,
};
};
exports.handler = schedule("35 12 * * *", handler);
添加环境变量
在Netlify中单击自己的站点后,选择Settings -> Build & deploy -> Environment,然后添加相应的环境变量:
- TELEGRAM_TOKEN
- TELEGRAM_CHAT_ID
部署
只要把代码提交到Github,Netlify就会自动部署前端代码+后台serverless functions。
最后一步设置
在默认情况下,Scheduled functions是被禁用的,因此需要手工开启。选择Netlify右上角的用户图标,然后选择Netlify Labs,再启动Scheduled Functions。这样就能看到对应的functions上添加了”Scheduled”标签。
