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

AWS Lambda部署Python函数报LambdaContext对象无len()错误求助

错误原因

Lambda 运行时给 handler 函数传入的第二个参数 context 是 AWS 内置的 LambdaContext 类型对象,用于存储函数运行时的元数据(比如请求 ID、剩余运行时间等),不是你本地测试时传入的 schema 列表,自然不支持 len() 操作。你本地测试的传参逻辑和 Lambda 平台的默认调用规则不匹配。

修复方案

你需要把业务参数(目标用户组、待授权的 schema 列表)都放到 Lambda 第一个入参 event 里传递,不要占用 context 传业务数据,同时建议补充 SQL 注入防护和异常处理逻辑。

修改后的代码示例

import psycopg2
from psycopg2 import sql
from password.redshift_credentials import username, password, host, port, database


def security_group_update(event, context):
    # 从event中取业务参数,不要用context传业务数据
    target_group = event.get("target_group")
    target_schemas = event.get("target_schemas", [])
    
    con = None
    cur = None
    try:
        # 连接Redshift
        con = psycopg2.connect(dbname=database, host=host, port=port, user=username, password=password)
        cur = con.cursor()

        for schema in target_schemas:
            # 用psycopg2的sql模块拼接标识符,避免SQL注入
            command = sql.SQL("""
                GRANT USAGE ON SCHEMA {} TO GROUP {};
                GRANT SELECT ON ALL TABLES IN SCHEMA {} TO GROUP {};
            """).format(
                sql.Identifier(schema),
                sql.Identifier(target_group),
                sql.Identifier(schema),
                sql.Identifier(target_group)
            )
            print(f"执行SQL: {command.as_string(con)}")
            cur.execute(command)
            con.commit()
        return {
            "statusCode": 200,
            "message": "权限更新完成"
        }
    except Exception as e:
        if con:
            con.rollback()
        print(f"执行出错: {str(e)}")
        return {
            "statusCode": 500,
            "error": str(e)
        }
    finally:
        # 确保资源释放
        if cur:
            cur.close()
        if con:
            con.close()


# 本地测试用例
if __name__ == "__main__":
    test_event = {
        "target_group": "analytics",
        "target_schemas": [
            'acquisition',
            'cohort_analytics',
            'dev_vegalash_traffic_sources',
            'facebook28',
            'facebook28_veg2'
        ]
    }
    print(security_group_update(test_event, None))

部署后调用说明

触发 Lambda 时,传入的 event 结构和上面本地测试的 test_event 结构一致即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:57:07