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

从Lambda函数读取AWS S3中Excel文件时出现超时问题

问题描述

我编写了如下代码:

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

import pandas as pd
import pyodbc
import boto3

aws_id = 'xxxxxxxxxxxxxx'
aws_secret = 'xxxxxxxxxxxxxxxxxxxxxx'

s3 = boto3.client('s3',aws_access_key_id=aws_id, aws_secret_access_key=aws_secret)
response = s3.get_object(Bucket='testesolaire', Key='globalterrorismdb_0522dist.xlsx')
data  = response['Body'].read().decode('utf-8')

但在执行data = response['Body'].read().decode('utf-8')这一行时,出现了Task timed out after 62.06 seconds的错误,具体报错信息如下:

Response
{
  "errorMessage": "2023-01-08T08:24:17.460Z ebe0a951-8656-4736-8871-0b325ac17f63 Task timed out after 62.06 seconds"
}

我已尝试将Lambda函数的「常规配置>超时」选项调整为15分钟,但问题仍未解决,请问可能是什么原因导致的?

可能的原因及解决方向
  • 代码执行顺序错误:Lambda仅会执行lambda_handler函数内的逻辑,你当前在函数外编写的S3读取代码,只会在冷启动阶段执行部分逻辑,不会完整运行。需将所有S3相关操作代码移至lambda_handler函数内部。
  • 权限不足:若Lambda执行角色未被授予s3:GetObject权限,或目标S3桶的访问策略未允许该角色访问,会导致请求挂起超时。检查Lambda角色的权限配置和S3桶的资源策略。
  • 二进制文件处理错误:.xlsx是二进制格式文件,使用decode('utf-8')解码会引发异常,甚至卡住进程。正确做法是直接读取二进制内容,交给pandas处理,例如使用pd.read_excel(response['Body']),无需手动解码为UTF-8。
  • VPC网络限制:如果Lambda配置了VPC,但该VPC未配置S3网关端点或NAT网关,Lambda无法访问公网S3服务,会导致请求超时。检查VPC路由表是否包含S3访问路由。
  • 文件体积过大:若目标Excel文件体积庞大,在Lambda中直接读取处理会消耗大量内存和时间,即使设置15分钟超时也可能因资源不足或传输缓慢超时。建议使用S3事件触发+Glue服务处理大文件,或在Lambda中实现分段读取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:35:11