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

AWS Lambda无有效调试日志且超时问题求助

排查基于ECR镜像的AWS Lambda超时问题

错误日志

OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k
START RequestId: a22379c9-427c-45ab-bfd5-c166bf507418 Version: $LATEST
2023-04-29T15:45:42.496Z a22379c9-427c-45ab-bfd5-c166bf507418 Task timed out after 600.11 seconds

END RequestId: a22379c9-427c-45ab-bfd5-c166bf507418
REPORT RequestId: a22379c9-427c-45ab-bfd5-c166bf507418  Duration: 600108.83 ms  Billed Duration: 601489 ms  Memory Size: 256 MB Max Memory Used: 154 MB Init Duration: 1379.93 ms

问题根源分析

  • 递归调用无返回值导致死循环:make_get_request函数中,遇到ConnectionError或Timeout异常时,递归调用自身但未返回结果。若请求持续失败,会陷入无限递归,直至Lambda达到超时上限。
  • 反爬机制触发导致请求阻塞:代码未添加请求延迟,Stepstone的反爬策略会对高频请求进行限制,导致请求挂起无法完成。
  • 入口函数嵌套定义错误:main函数被嵌套在extract_and_append_skills函数内部,Lambda无法正确识别入口函数,引发执行异常或卡住。
  • 分页逻辑错误:range(get_pages())生成的循环从0开始,但Stepstone的分页参数page_selected从1起始,导致第一页请求无效,后续处理停滞。
  • 资源配置不足:Lambda内存设置为256MB,CPU和网络带宽与内存正相关,较低的内存会拖慢请求处理速度,爬取大量页面时易超时。

修复方案

  1. 修复递归调用的返回值
    在make_get_request的异常处理中,添加返回值并传入URL参数,建议配套添加重试次数限制(可使用tenacity库替代手动递归):

    except (ConnectionError, requests.exceptions.Timeout) as err:
        print(f"Failed to connect to the API, retrying... Error: {err}")
        return make_get_request(max_retries, URL)
    
  2. 添加请求延迟规避反爬
    在爬取每个职位详情后添加延迟,避免触发网站反爬机制:

    def extract_and_append_skills(cards, job_df):
        for card in cards:
            # 原有过滤逻辑
            keywords, title, href, company_name = extract_keywords(card)
            append_to_df(keywords, job_df, title, company_name, href)
            sleep(1)  # 添加1秒延迟,可根据实际情况调整
    
  3. 修正函数嵌套结构
    将main函数移到extract_and_append_skills函数外部,确保Lambda能正确识别入口函数:

    def extract_and_append_skills(cards, job_df):
        # 函数原有逻辑
    
    def main(event, context):    
        job_df = pd.DataFrame(columns=COLUMNS)
        try:
            # main函数原有逻辑
        except Exception as e:
            print(e)
    
  4. 调整分页循环起始值
    匹配Stepstone的分页规则,从1开始循环获取页面:

    for i in range(1, get_pages() + 1):
        cards = extract_job_cards('data-engineer', 1, i)
        extract_and_append_skills(cards, job_df)
    
  5. 提升Lambda资源配置
    将内存大小调整为512MB或更高,同时保持超时设置为600秒,提升CPU和网络处理性能:

    resource "aws_lambda_function" "job_scraping_function" {
        package_type  = "Image"
        image_uri     = "${aws_ecr_repository.scraping_repo.repository_url}:latest"
        function_name = "job_scraping_function"
        role = aws_iam_role.lambda_s3_role.arn
        memory_size  = 512
        timeout      = 600
        depends_on = [null_resource.docker_build_and_push]
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:47:19