mcpField
T
tigris-lifecycle-management

tigris-lifecycle-management

github.com/tigrisdata云与 DevOps280 次安装14 周前更新
代码仓库

关于 tigris-lifecycle-management

用于通过 Tigris CLI 管理 Tigris 对象存储生命周期的技能,可按前缀设置对象过期和存储层转换规则。适合维护上传、日志、会话及备份等数据的清理与归档策略。

主要功能

  1. 01按前缀设置生命周期规则
  2. 02配置对象到期删除
  3. 03在存储层之间转换对象
  4. 04查看或删除现有规则

适用场景

  1. 01自动清理临时上传和会话文件
  2. 02归档旧日志并设置后续删除
  3. 03为备份和构建产物设置保留期

安装

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

$npx skills add https://github.com/tigrisdata/skills --skill tigris-lifecycle-management

安装后在 Claude Code 中输入/tigris-lifecycle-management确认已加载。

附带文件metadata.jsonREADME.md

详细介绍

Tigris 生命周期管理

使用生命周期规则自动执行对象过期、存储层转换和清理。设置策略,自动删除临时文件、归档旧数据并控制存储成本。

前置条件

开始任何操作之前,如果尚未安装 Tigris CLI,请先安装:

tigris help || npm install -g @tigrisdata/cli

如果需要安装,请告知用户:“我正在安装 Tigris CLI(@tigrisdata/cli),以便使用 Tigris 对象存储。”

快速参考

操作命令
设置规则tigris buckets lifecycle set <bucket> --config lifecycle.json
查看规则tigris buckets lifecycle get <bucket>
移除规则tigris buckets lifecycle delete <bucket>

设置生命周期规则

tigris buckets lifecycle set my-app-uploads --config lifecycle.json
规则格式
{
  "Rules": [
    {
      "ID": "rule-name",
      "Filter": { "Prefix": "path/prefix/" },
      "Status": "Enabled",
      "Expiration": { "Days": 30 },
      "Transitions": [
        { "Days": 7, "StorageClass": "STANDARD_IA" },
        { "Days": 90, "StorageClass": "GLACIER" }
      ]
    }
  ]
}
字段用途
ID易于理解的规则名称
Filter.Prefix仅对匹配此前缀的对象应用规则
Status"Enabled" 或 "Disabled"
Expiration.DaysN 天后删除对象
Transitions在不同存储层之间移动对象

常见模式

清理临时上传文件

24 小时后删除 tmp/ 中的文件:

{
  "Rules": [
    {
      "ID": "cleanup-temp-uploads",
      "Filter": { "Prefix": "tmp/" },
      "Status": "Enabled",
      "Expiration": { "Days": 1 }
    }
  ]
}
未验证上传文件过期

7 天后删除尚未处理的上传文件:

{
  "Rules": [
    {
      "ID": "expire-unverified-uploads",
      "Filter": { "Prefix": "uploads/pending/" },
      "Status": "Enabled",
      "Expiration": { "Days": 7 }
    }
  ]
}
清理会话数据

1 天后自动删除会话文件:

{
  "Rules": [
    {
      "ID": "cleanup-sessions",
      "Filter": { "Prefix": "sessions/" },
      "Status": "Enabled",
      "Expiration": { "Days": 1 }
    }
  ]
}
日志归档

将日志移至更低成本的存储,然后在 1 年后删除:

{
  "Rules": [
    {
      "ID": "archive-logs",
      "Filter": { "Prefix": "logs/" },
      "Status": "Enabled",
      "Transitions": [
        { "Days": 30, "StorageClass": "STANDARD_IA" },
        { "Days": 90, "StorageClass": "GLACIER" }
      ],
      "Expiration": { "Days": 365 }
    }
  ]
}
备份保留

保留备份 30 天:

{
  "Rules": [
    {
      "ID": "expire-old-backups",
      "Filter": { "Prefix": "backups/" },
      "Status": "Enabled",
      "Expiration": { "Days": 30 }
    }
  ]
}
旧版资源

清理旧的构建产物:

{
  "Rules": [
    {
      "ID": "cleanup-old-builds",
      "Filter": { "Prefix": "builds/" },
      "Status": "Enabled",
      "Expiration": { "Days": 14 }
    }
  ]
}

存储层

层级成本访问适用场景
STANDARD最高即时经常访问的文件
STANDARD_IA较低即时,需支付检索费用不常访问的数据(存放超过 30 天)
GLACIER最低检索需数分钟至数小时归档、合规数据(存放超过 90 天)
何时进行转换
场景转换时间节省
用户上传后很少再次访问的文件30 天 → IA存储成本约降低 40%
合规归档90 天 → Glacier存储成本约降低 80%
构建产物7 天 → IA,30 天 → 删除删除后成本约降低 90%

多规则示例

组合多条规则,制定完整的生命周期策略:

{
  "Rules": [
    {
      "ID": "cleanup-temp",
      "Filter": { "Prefix": "tmp/" },
      "Status": "Enabled",
      "Expiration": { "Days": 1 }
    },
    {
      "ID": "archive-uploads",
      "Filter": { "Prefix": "uploads/" },
      "Status": "Enabled",
      "Transitions": [
        { "Days": 90, "StorageClass": "STANDARD_IA" }
      ]
    },
    {
      "ID": "expire-backups",
      "Filter": { "Prefix": "backups/" },
      "Status": "Enabled",
      "Expiration": { "Days": 30 }
    },
    {
      "ID": "archive-logs",
      "Filter": { "Prefix": "logs/" },
      "Status": "Enabled",
      "Transitions": [
        { "Days": 30, "StorageClass": "STANDARD_IA" },
        { "Days": 90, "StorageClass": "GLACIER" }
      ],
      "Expiration": { "Days": 365 }
    }
  ]
}

应用级 TTL

当生命周期规则不够精细时(例如,过期时间取决于元数据而非文件年龄),请在应用中实现 TTL:

import { put, list, remove, head } from "@tigrisdata/storage";

// Store with expiration metadata
await put("tokens/abc123.json", data, {
  contentType: "application/json",
  // Store expiry as part of the key or track in your database
});

// Cleanup job: delete expired objects
async function cleanupExpired(prefix: string, maxAgeMs: number) {
  const result = await list({ prefix });
  const now = Date.now();

  for (const item of result.data?.items ?? []) {
    const age = now - new Date(item.modified).getTime();
    if (age > maxAgeMs) {
      await remove(item.path);
    }
  }
}

// Run daily
cleanupExpired("tokens/", 24 * 60 * 60 * 1000); // 24 hours

与快照的交互

  • 生命周期规则适用于源存储桶,不适用于快照副本
  • 生命周期规则删除的对象可以从快照中恢复(前提是快照在删除前创建)
  • 设置过期策略时,请考虑快照频率

关键规则

始终: 对可预测的清理模式使用生命周期规则 | 为临时/短期数据设置过期时间 | 使用存储层转换来节省成本 | 先在非生产存储桶上测试规则

切勿: 仅依赖生命周期规则删除关键数据(还应添加应用级检查) | 未备份重要数据就为存储桶设置较短的过期时间 | 忘记已删除的对象会永久消失(除非你有快照)


相关技能

  • tigris-backup-export — 备份保留策略
  • tigris-egress-optimizer — 通过存储层转换节省成本
  • tigris-snapshots-forking — 删除前进行时间点恢复

官方文档

评论

支持 Markdown