Amazon EFS 目录级配额监控:多租户 SaaS方案

Amazon EFS 目录级配额监控:多租户 SaaS方案

💡 原文中文,约12000字,阅读约需29分钟。
📝

内容提要

本文介绍了一种基于AWS Lambda双层fan-out架构与Amazon EventBridge的Amazon EFS目录级配额监控方案。该方案通过Dispatcher Lambda扫描客户目录,异步调用多个Worker Lambda并行统计各项目目录大小,并将结果上报至CloudWatch。文章详细说明了架构设计、代码实现、部署步骤及成本分析,适用于多租户SaaS平台共享EFS存储场景。

🔎

延伸解读

为何需要自建监控

Amazon EFS 本身不提供目录级配额能力,其 Access Point 仅做路径隔离与权限映射,无法限制容量;CloudWatch 的 StorageBytes 指标也是整个文件系统的总量,无法细分到客户或项目。因此,多租户 SaaS 平台若需按目录追踪用量,必须自建监控方案,这正是本文方案的核心动机。

双层 fan-out 架构的优势

方案采用双层 Lambda fan-out:Dispatcher 扫描客户列表后异步调用多个 Worker,每个 Worker 只处理一个客户目录。相比单层架构,并行扫描使总耗时取决于最慢的单个客户而非所有客户之和,且客户数增长时仅需增加 invoke 调用,单个 Worker 无超时风险,天然可扩展。

性能与成本考量

实测显示,扫描耗时主要与目录下文件数量相关,而非总字节数。例如含约 13 万文件的目录耗时约 27 秒,而文件数少的目录仅需约 2 秒。端到端完成时间约 8~41 秒。扫描仅消耗 EFS 元数据读取 IOPS,不影响业务读写吞吐。部署时需注意网络配置,如 NAT 网关或 VPC Endpoint 用于 HTTPS 出站。

Q&A

Amazon EFS 是否支持目录级配额?如果不支持,有什么替代方案?

Amazon EFS 不提供原生的目录级配额能力,其 Access Point 仅做路径隔离与 POSIX 权限映射,无法限制容量。CloudWatch 的 StorageBytes 指标也是整个文件系统的总容量,无法细分到目录。替代方案是自建监控方案,例如本文介绍的基于 AWS Lambda 双层 fan-out 架构与 Amazon EventBridge 的方案,按客户/项目两级目录粒度统计用量。

如何监控 Amazon EFS 中每个客户或项目的存储用量?

可以通过本文提出的方案:使用 EventBridge 定时触发 Dispatcher Lambda,Dispatcher 扫描 EFS 根目录获取客户列表,然后异步调用多个 Worker Lambda,每个 Worker 负责一个客户目录,使用 du -s 统计各项目目录大小,并将结果上报到 CloudWatch 自定义指标。

为什么采用双层 fan-out 架构而不是单层?

双层 fan-out 架构有两个优势:一是并行扫描,各客户目录同时扫描,总耗时取决于最慢的单个客户而非所有客户之和;二是天然可扩展,客户数增长时 Dispatcher 多发几个 invoke 即可,单个 Worker 永远只处理一个客户,不存在超时风险。

Dispatcher Lambda 和 Worker Lambda 分别负责什么?

Dispatcher Lambda 负责扫描 EFS 根目录获取客户列表,并为每个客户异步调用 Worker Lambda,它本身不做 du 统计,耗时通常在秒级。Worker Lambda 负责处理单个客户目录,遍历该客户下所有项目目录并用 du -s 统计大小,然后上报 CloudWatch 指标并可选推送 Webhook 通知。

部署这个 EFS 配额监控方案需要哪些前提条件?

需要具备以下条件:已有一套 Amazon EFS 文件系统,且 VPC 私有子网内已就绪对应的挂载目标;业务系统提供一个可接收 HTTP POST JSON 的 API 端点(若采用 Webhook 接入方式);已配置具备相应权限的 AWS 命令行环境。

该方案的成本如何?

文章未给出具体成本数字,但提到方案无额外存储组件依赖,扫描过程只消耗 EFS 的元数据读取 IOPS,不影响业务读写吞吐。成本主要来自 Lambda 调用、CloudWatch 指标写入和可能的 NAT 网关费用。

如何调整配额阈值?

配额阈值通过环境变量灵活调整。在 Dispatcher Lambda 的环境变量中设置 QUOTA_GB(单项目配额,默认 50)和 SOFT_LIMIT_PERCENT(软限制百分比,默认 80),新增客户或项目时无需改动监控逻辑。

该方案适用于什么场景?

适用于多租户 SaaS 平台共享一套 Amazon EFS 文件系统,目录按 /{customer}/{project}/ 两级组织的场景,用于按客户或项目监控存储用量,并在接近或超出阈值时触发下游处理。

🏷️

标签

➡️

继续阅读