You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure Functions访问并清理Azure App Service存储中的用户目录

解决方案:Azure Functions访问App Service存储并清理过期用户目录

核心前提

你在App Service里用的持久化用户目录,本质是挂载在/home路径下的Azure Storage Files共享(App Service默认用关联存储账户的wwwroot共享,自定义目录也在这个共享里)。要让Azure Functions访问这些目录,最直接可靠的方式是让Functions也挂载同一个Storage Files共享。

步骤1:确认App Service的存储共享信息

  1. 登录Azure门户,打开你的App Service
  2. 进入「配置」→「路径映射」,查看持久化存储的配置:
    • 找到/home对应的存储账户名称、文件共享名称(默认是wwwroot)
    • 你的用户目录应该在这个共享下(比如/home/userdata/{user-id}对应共享里的userdata/{user-id}路径)

步骤2:给Azure Functions挂载同一个存储共享

  1. 打开你的Azure Functions应用
  2. 进入「配置」→「路径映射」,点击「添加存储挂载」:
    • 类型选「Azure文件存储」
    • 选择和App Service完全相同的存储账户
    • 选择对应的文件共享(比如wwwroot)
    • 设置挂载路径(比如/home/site/userdata,Functions代码里就用这个路径访问用户目录)
  3. 保存配置,Functions重启后就能直接访问该路径下的文件

步骤3:编写定时器Function的清理逻辑(以Python为例)

import os
import time
from datetime import datetime, timedelta
import shutil
import azure.functions as func

def main(mytimer: func.TimerRequest) -> None:
    # 挂载的用户目录路径,和步骤2设置的一致
    user_data_path = "/home/site/userdata"
    # 过期时间阈值:72小时
    expire_hours = 72

    # 遍历所有用户目录
    for user_dir in os.listdir(user_data_path):
        dir_path = os.path.join(user_data_path, user_dir)
        if not os.path.isdir(dir_path):
            continue

        # 优先检查自定义的访问标记文件(推荐)
        marker_file = os.path.join(dir_path, "last_accessed.txt")
        if os.path.exists(marker_file):
            last_modified = datetime.fromtimestamp(os.path.getmtime(marker_file))
        else:
            #  fallback到目录的修改时间
            last_modified = datetime.fromtimestamp(os.path.getmtime(dir_path))

        # 判断是否过期
        if datetime.now() - last_modified > timedelta(hours=expire_hours):
            # 删除目录及所有内容
            shutil.rmtree(dir_path)
            print(f"Deleted expired user directory: {user_dir}")

关键注意事项

  • 不要用App Service的临时存储:/tmp或D:\local\Temp是实例本地临时存储,重启就丢失,多实例不共享,完全不适合持久化用户数据
  • 推荐用访问标记文件:文件系统的「最后访问时间」可能因系统优化不准,建议你的RAG系统每次处理用户请求时,更新用户目录里的last_accessed.txt(比如写入当前时间),这样Function的时间判断更准确
  • 权限配置:确保Functions应用有存储账户的访问权限,要么用存储账户密钥(挂载时自动配置),要么给Functions的托管标识赋予「存储文件数据参与者」角色

内容的提问来源于stack exchange,提问作者Ashcom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:33:12