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

AWS Lambda中获取S3桶Key存入列表后返回空如何解决?

问题原因
  • 变量名拼写不匹配:全局定义的存储桶实例变量名为myBucket,但lambda_handler内部遍历时使用的是my_bucket,二者不匹配导致遍历逻辑未执行,没有数据追加到列表中
  • 执行顺序错误:print(appendList)处于全局作用域,会在代码加载阶段直接执行,此时lambda_handler函数还未被触发调用,列表尚未被赋值
  • 存在语法违规:定义的1stList变量以数字开头,不符合Python变量命名规则,运行时会直接抛出语法错误
  • 额外隐患:在Lambda运行环境中使用全局变量存储业务数据,会在实例冷启动复用时残留上一次调用的旧数据,导致逻辑错误
解决方法

修正拼写问题,将业务变量定义到lambda_handler内部,所有业务执行逻辑都放在函数作用域内处理,修正后的代码如下:

import boto3

# 全局仅初始化重负载的S3资源,避免每次调用重复初始化
s3 = boto3.resource('s3')
predefine_list = ['1','2','3','4']
my_bucket = s3.Bucket('bucketName')

def lambda_handler(event, context):
    append_list = []
    for obj in my_bucket.objects.all():
        key = obj.key 
        append_list.append(key)
    # 打印、列表对比等业务逻辑均放在handler内部执行
    print(append_list)
    # 示例:和预定义列表做对比
    diff_result = list(set(predefine_list).difference(set(append_list)))
    print(diff_result)
    return append_list

# 本地测试时添加以下代码,主动触发handler执行
# lambda_handler(None, None)

如果是在本地调试运行,需要主动调用一次lambda_handler函数,才会执行S3遍历和列表赋值逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:09