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

如何设置仅当90MB以上文件上传至Amazon S3时触发SNS通知

实现Amazon S3仅在大文件(>90MB)上传时触发SNS通知的方法

S3原生事件通知无法直接按文件大小过滤,需要通过Lambda函数作为中间层实现条件判断,具体步骤如下:

1. 创建/配置Lambda处理函数

Lambda负责接收S3上传事件,判断文件大小和类型后,再决定是否调用SNS发送通知。

示例Python代码

import boto3
import os

sns_client = boto3.client('sns')
# 从环境变量读取配置,避免硬编码
SNS_TOPIC_ARN = os.environ['SNS_TOPIC_ARN']
# 替换为你需要监控的文件扩展名
TARGET_EXTENSIONS = ['.pdf', '.zip', '.tar']
# 90MB转换为字节(1MB=1024*1024字节)
MIN_SIZE_BYTES = 90 * 1024 * 1024

def lambda_handler(event, context):
    for record in event['Records']:
        bucket_name = record['s3']['bucket']['name']
        object_key = record['s3']['object']['key']
        object_size = record['s3']['object']['size']
        
        # 检查文件扩展名是否匹配
        if any(object_key.lower().endswith(ext) for ext in TARGET_EXTENSIONS):
            # 检查文件大小是否超过阈值
            if object_size > MIN_SIZE_BYTES:
                # 构造通知内容
                msg = f"检测到大文件上传:\n存储桶: {bucket_name}\n文件路径: {object_key}\n文件大小: {round(object_size/(1024*1024), 2)} MB"
                # 发送SNS通知
                sns_client.publish(
                    TopicArn=SNS_TOPIC_ARN,
                    Message=msg,
                    Subject="S3大文件上传告警"
                )
    return {'statusCode': 200, 'body': '事件处理完成'}

配置Lambda环境变量

在Lambda函数的「配置」-「环境变量」中添加:

  • SNS_TOPIC_ARN:填入你已有的SNS主题ARN

配置Lambda权限

确保Lambda执行角色拥有以下权限:

  • sns:Publish:允许向目标SNS主题发送消息
  • s3:GetObject(可选):若需要额外读取文件元数据时使用

示例IAM策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "你的SNS主题ARN"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::你的存储桶名/目标文件夹前缀*"
        }
    ]
}

2. 修改S3事件通知配置

  • 登录S3控制台,找到目标存储桶,进入「属性」-「事件通知」
  • 删除之前直接绑定SNS的通知规则
  • 创建新规则:
    • 事件类型选择ObjectCreated下的具体触发场景(如Put、Post或*)
    • 前缀填写你要监控的文件夹路径(如docs/)
    • 后缀保留你需要的文件类型(如.pdf)
    • 目标选择「Lambda函数」,选中你创建的Lambda函数

3. 测试验证

  • 上传一个小于90MB的目标类型文件,确认不会收到SNS通知
  • 上传一个大于90MB的目标类型文件,检查是否收到通知邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:20:34