AWS Lambda S3 Files:从对象存储到文件系统的范式转换

Lambda 函数终于不用跟 S3 对象做上传下载的"搬运工"了。S3 Files 让 Serverless 函数直接把 S3 桶当本地磁盘用,这对 AI Agent 多步工作流的影响比想象中大。

背景

2026 年 4 月底,亚马逊云科技发布了 S3 Files——让 Lambda 函数可以将 S3 桶挂载为 POSIX 文件系统。这个功能底层基于 EFS 协议,但暴露的是 S3 的存储模型和成本结构。

对于跑 AI Agent 流水线的团队来说,这解决了一个长期痛点:多步骤之间的数据传递不再需要 S3 SDK 胶水代码

核心设计

Lambda 函数 A ─→ /mnt/workspace ─→ S3 Files ─→ S3 桶
Lambda 函数 B ─→ /mnt/workspace ─→ S3 Files ─→ 同一个桶
Lambda 函数 C ─→ /mnt/workspace ─→ S3 Files ─→ 同一个桶

三个函数看到的是同一个文件系统视图。A 写的文件,B 和 C 立刻能读到。

关键特性:

  • 标准 POSIX 操作(open/read/write/stat/listdir)
  • 多 Lambda 实例并发挂载
  • 无需 VPC 配置
  • 容量无上限(跟 S3 桶一样)
  • 无额外费用(只有 S3 标准存储费)

实际配置

1. 启用桶的 S3 Files 功能

aws s3api put-bucket-file-configuration \
  --bucket agent-workspace-prod \
  --file-configuration '{"Status": "Enabled"}'

2. Lambda 挂载配置

aws lambda update-function-configuration \
  --function-name multi-agent-orchestrator \
  --file-system-configs '[{
    "Arn": "arn:aws:s3:::agent-workspace-prod",
    "LocalMountPath": "/mnt/workspace"
  }]'

3. IAM 策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::agent-workspace-prod", "arn:aws:s3:::agent-workspace-prod/*"]
    },
    {
      "Effect": "Allow",
      "Action": ["elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite"],
      "Resource": "*"
    }
  ]
}

4. SAM 模板(IaC 方式)

Resources:
  OrchestratorFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: python3.12
      Handler: orchestrator.handler
      Timeout: 600
      MemorySize: 2048
      FileSystemConfigs:
        - Arn: !Sub "arn:aws:s3:::${WorkspaceBucket}"
          LocalMountPath: /mnt/workspace
      Policies:
        - S3FullAccessPolicy:
            BucketName: !Ref WorkspaceBucket

  AnalyzerFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: python3.12
      Handler: analyzer.handler
      FileSystemConfigs:
        - Arn: !Sub "arn:aws:s3:::${WorkspaceBucket}"
          LocalMountPath: /mnt/workspace

AI Agent 流水线案例

代码审查 Agent 流水线:一个编排函数 + 三个专项分析 Agent。

# orchestrator.py
import subprocess, json, os

def handler(event, context):
    workspace = '/mnt/workspace'
    repo_dir = f'{workspace}/repos/{event["repo_name"]}'
    
    # Clone 到共享目录
    subprocess.run(['git', 'clone', '--depth', '1', event['repo_url'], repo_dir])
    
    # 写任务文件,分析 Agent 读取
    task = {
        'repo_path': repo_dir,
        'files': [f for f in os.listdir(repo_dir) if f.endswith('.py')],
        'analysis_output': f'{workspace}/results/{event["repo_name"]}'
    }
    os.makedirs(task['analysis_output'], exist_ok=True)
    
    with open(f'{workspace}/tasks/{event["repo_name"]}.json', 'w') as f:
        json.dump(task, f)
    
    return {'task_path': f'{workspace}/tasks/{event["repo_name"]}.json'}

三个分析 Agent 各自读 /mnt/workspace/repos/xxx 下的源码,分析结果写到 /mnt/workspace/results/xxx/ 下不同文件。最后汇总函数读所有结果生成报告。

整个流程零 S3 SDK 调用,纯文件操作。

与 Durable Functions 协同

Lambda Durable Functions(4 月初发布)提供多步编排 + checkpoint 能力。配合 S3 Files:

  • Durable Functions:控制流(顺序/并行/重试/checkpoint)
  • S3 Files:数据流(读写共享)

某步失败后 checkpoint 恢复,前序步骤的输出文件仍在共享目录中,不需要重新执行。

性能与成本

对比项 S3 GET/PUT EFS S3 Files
10GB/月存储 $0.23 + API费 $3 $0.23
并发读写 需要代码同步 原生支持 原生支持
需要 VPC
冷启动影响 +500ms +200-500ms
容量限制 需预估

注意事项

  1. Capacity Provider 模式的 Lambda 暂不支持 S3 Files
  2. 首次挂载有冷启动开销(200-500ms)
  3. 并发写同一文件是 last-writer-wins,生产环境用目录隔离
  4. S3 Files 目前在 Lambda 和 S3 Files 同时可用的区域支持

总结

S3 Files 把 Serverless 函数间的数据共享从"API 调用"变成了"文件操作"。对 AI Agent 流水线,最直接的收益是:

  • 砍掉所有 S3 上传下载的胶水代码
  • 多 Agent 并行共享工作区零额外开发
  • 成本降到纯 S3 存储费(比 EFS 低一个数量级)

十分钟配置,零业务代码改动。


配置在亚马逊云科技 us-west-2 验证通过。参考文档:Lambda S3 Files Developer Guide

posted @ 2026-05-06 08:09  亚马逊云开发者  阅读(2)  评论(0)    收藏  举报