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

如何通过Zappa配置Lambda函数为S3上传文件添加指定后缀

Zappa实现S3上传文件自动添加指定后缀方案

你现有配置已经完成了S3事件触发的基础绑定,只需要调整配置、编写业务逻辑即可实现需求,具体步骤如下:

1. 修正zappa_settings.json配置

你现有配置中存在笔误:events下的function字段值为app.hanlder,拼写错误,应为app.handler。修正后的完整配置参考:

{
    "dev": {
        "app_function": "app.handler",
        "aws_region": "us-east-1",
        "profile_name": "default",
        "project_name": "scrapper",
        "runtime": "python3.8",
        "s3_bucket": "zappabucket",
        "keep_warm":false,
        "apigateway_enabled":false,
        "events": [{
            "function": "app.handler",
            "event_source": {
                  "arn":  "arn:aws:s3:::mybucket",
                  "events": [
                    "s3:ObjectCreated:*"
                  ]
               }
        }]
    }
}

同时需要提前给Zappa自动创建的Lambda执行角色,添加目标S3桶(上述配置中的mybucket)的以下权限:

  • s3:GetObject
  • s3:PutObject
  • s3:DeleteObject

2. 编写S3事件处理逻辑

在项目根目录的app.py文件中编写对应handler函数,实现自动加后缀的逻辑。核心逻辑为:解析S3事件拿到上传的文件信息→判断文件是否已有目标后缀,无后缀则执行重命名(S3无原生重命名接口,需要先复制对象添加后缀,再删除原对象)→逻辑中增加过滤规则避免循环触发。
示例代码如下:

import boto3
import urllib.parse

s3 = boto3.client('s3')
# 按需求修改目标后缀即可
TARGET_SUFFIX = '.html'

def handler(event, context):
    # 解析S3事件信息
    record = event['Records'][0]
    bucket = record['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(record['s3']['object']['key'], encoding='utf-8')
    
    # 过滤已有目标后缀的文件,避免循环触发
    if key.endswith(TARGET_SUFFIX):
        return
    # 过滤文件夹类对象
    if key.endswith('/'):
        return
    
    # 生成新文件名
    new_key = key + TARGET_SUFFIX
    
    # 复制对象到新路径
    s3.copy_object(
        Bucket=bucket,
        Key=new_key,
        CopySource={'Bucket': bucket, 'Key': key}
    )
    
    # 不需要保留原文件则保留此行,需要保留原文件可删除
    s3.delete_object(Bucket=bucket, Key=key)

3. 部署验证

配置和代码调整完成后,执行zappa update dev更新已部署的实例,首次部署则执行zappa deploy dev。部署完成后上传一个无对应后缀的文件到mybucket桶,即可验证自动加后缀的功能。


注意事项

  • 大文件(超过100MB)建议使用S3分段复制接口,避免Lambda执行超时
  • 如果存在多文件批量上传的场景,可适当调整Lambda的超时时间配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:00