使用Netlify的Scheduled Functions定时运行一个任务


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”标签。

Netlify Scheduled functions


文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !
  目录