mcpField
C
crontap-supabase-edge-function-cron

crontap-supabase-edge-function-cron

github.com/crontap云与 DevOps1943 次安装6 周前更新
代码仓库

关于 crontap-supabase-edge-function-cron

为需要定时调用 Supabase Edge Function 的开发者提供配置指导,使用 Crontap 创建 HTTPS 调度,并涵盖鉴权、幂等性和验证。

主要功能

  1. 01创建 Crontap 定时任务
  2. 02部署后再配置调度
  3. 03使用专用密钥保护函数
  4. 04验证状态码与幂等行为
  5. 05检查调度记录和函数日志

适用场景

  1. 01定时运行 Supabase 数据库相关函数
  2. 02将现有 Edge Function 接入外部调度
  3. 03排查函数鉴权、重复执行或超时问题

MCP 相关

指导通过 Crontap MCP 的 create_schedule 工具创建任务;也说明 Ultra 账户可使用 REST API。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/crontap/skills --skill crontap-supabase-edge-function-cron

安装后在 Claude Code 中输入/crontap-supabase-edge-function-cron确认已加载。

详细介绍

调度 Supabase Edge Function

使用 Supabase pg_cron 执行仅限 SQL 的数据库维护。如果定期执行的任务是 HTTP Edge Function,且需要使用外部调度器,请采用此模式。

前提条件

使用所需工具前,请先检查它们是否可用。如果有任何工具不可用,请停止并向用户提供且仅提供以下两个选项:

  1. 连接 Crontap MCP:https://mcp.crontap.com/mcp。所有 Crontap 套餐均支持 MCP 访问。
  2. 为原始 API 配置 $CRONTAP_CLIENT_ID 和 $CRONTAP_API_KEY。原始 API 访问需要 Ultra。

在用户做出选择前,不要擅自选择路径或继续操作。

  • 创建调度前,先部署函数。
  • 确保函数对同一个逻辑周期具有幂等性。
  • 使用专用的服务端 cron 密钥保护函数。
  • 切勿将 Supabase 服务角色密钥发送给 Crontap。

函数安全模式

读取专用标头或 bearer 值,并在执行任何操作前将其与仅限服务端使用的环境变量进行比较。如果函数禁用了 Supabase 网关 JWT 验证,则必须进行此应用层检查。

限制函数响应的大小。对于耗时较长的工作,应将任务持久化加入队列,并且仅在队列接受任务后返回成功。

工作流

  1. 部署 Edge Function 并配置其 cron 密钥。
  2. 在受控环境中分别使用和不使用密钥手动调用该函数。
  3. 确认预期的状态码和幂等性行为。
  4. 使用已部署的 HTTPS URL 创建 Crontap 调度。
  5. 验证解析后的执行频率和首次保留的运行记录。

MCP 示例

{
  "tool": "create_schedule",
  "arguments": {
    "url": "https://project-ref.supabase.co/functions/v1/nightly-cleanup",
    "text": "every day at 02:00",
    "timezone": "UTC",
    "method": "POST",
    "headers": {
      "Authorization": "Bearer <cron-secret-from-secure-store>",
      "Content-Type": "application/json"
    },
    "body": {
      "source": "crontap"
    },
    "label": "Supabase nightly cleanup"
  }
}

使用 Supabase 项目 URL 中的实际项目引用。不要将密钥放入函数 URL 或 JSON 请求正文中。

REST 备用方案

REST 需要 Ultra API 访问权限:

curl --fail-with-body https://api.crontap.com/v1/schedule \
  -X POST \
  -H "ClientId: $CRONTAP_CLIENT_ID" \
  -H "ApiKey: $CRONTAP_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "url": "https://project-ref.supabase.co/functions/v1/nightly-cleanup",
    "interval": "0 2 * * *",
    "timezone": "UTC",
    "verb": "POST",
    "headers": {
      "Authorization": "Bearer <cron-secret-from-secure-store>",
      "Content-Type": "application/json"
    },
    "data": {"source": "crontap"},
    "label": "Supabase nightly cleanup"
  }'

条件允许时,优先使用 MCP。

验证

  • 不带 cron 密钥的请求会在产生任何副作用前返回 401。
  • 带有密钥的请求会返回预期的成功状态。
  • 对同一逻辑周期发送两次请求,只会产生一个持久化副作用。
  • Crontap 历史记录中的结果与同一时刻的 Supabase 函数日志相符。

安全与套餐限制

  • 不要将 SUPABASE_SERVICE_ROLE_KEY 用作调度凭据。
  • 将函数限定为范围最小的定期操作。
  • 如果 Supabase 项目可能暂停,请记住:外部时钟可以暴露故障,但无法让不可用的项目执行任务。
  • 如果 Crontap 拒绝该执行频率或容量,请提供返回的四档选项,以及满足需求的最小选项。

故障排查

  • Supabase 401 表示网关或函数授权拒绝了该请求。
  • Supabase 404 通常表示项目引用、函数 slug 或部署环境有误。
  • 如果返回 2xx 但未执行任务,请检查应用日志和幂等性记录。
  • 超时问题最好通过持久化入队解决,而不是采用激进的重试策略。

参考资料

评论

支持 Markdown