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

无法将AWS Lambda并发限制设置为1?求解决方案

解决Lambda处理S3事件时的字典数据竞态问题

先搞定Lambda并发限制:把并发设为1的正确操作

你说在编辑界面没法设置并发为1,应该是没找对配置入口。正确操作步骤是:

  • 打开目标Lambda函数的控制台页面
  • 切到配置标签,选择左侧菜单里的并发选项
  • 在「预留并发」板块点「编辑」,输入1后保存就行

这么设置后,这个Lambda同一时间只会跑一个实例,从根儿上避免多实例同时读写字典的竞态问题

要是并发设置搞不定,换分布式锁方案

如果预留并发设置有障碍(比如账号权限不够、配额限制),直接用分布式锁来保护字典读写更靠谱,比如用AWS DynamoDB做锁:

  1. 别把字典存在Lambda本地内存里,转存到DynamoDB的一张单条记录表中
  2. 每次更新字典前,用DynamoDB的条件表达式做锁校验,确保同一时间只有一个操作能修改
  3. 举个Python代码例子:
import boto3

dynamodb = boto3.resource('dynamodb')
dict_table = dynamodb.Table('your-dictionary-store')

def update_dict(key, value):
    try:
        response = dict_table.update_item(
            Key={'record_id': 'global-dictionary'},
            UpdateExpression='SET #key = :val',
            ExpressionAttributeNames={'#key': key},
            ExpressionAttributeValues={':val': value},
            # 条件表达式:要么没锁,要么锁已释放
            ConditionExpression='attribute_not_exists(lock) OR lock = :unlocked',
            ExpressionAttributeValues={':val': value, ':unlocked': False},
            ReturnValues='UPDATED_NEW'
        )
        return response
    except dynamodb.meta.client.exceptions.ConditionalCheckFailedException:
        # 锁被占用,重试或返回失败
        raise Exception("Dictionary is being updated by another process")

还有个备选:调整S3事件触发方式

如果你的文件上传频率不高,可以让S3攒一批事件再触发Lambda,同时确保事件按顺序处理:

  • 在S3事件通知设置里,调大「批量大小」或者设置「批量间隔」,减少触发次数
  • 要是用EventBridge中转S3事件,开启事件排序功能,保证Lambda按事件产生顺序执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:01:21