首页 > 解决方案 > AWS lambda URL 请求并将二进制文件写入 /tmp/

问题描述

我正在使用 API 网关 + lambda 函数集成和 Python 3.8。我需要从外部 webhook 接收帖子。webhook 发送一个带有一些数据和 url 的 JSON 对象。我正在尝试使用 requests lib 从 url 获取 pdf 文件并写入 /tmp/ 目录。我已经将请求库从 zip 上传到 lambda 并且工作正常。我进一步计划将pdf上传到S3。

问题:来自 URL 的请求文件没有被写入 /tmp/ 目录。

import json
import requests
import os

def lambda_handler(event, context):
    prods = event
    body = json.loads(prods["body"])
    url = body["url"]

    print("Body:", body)

    r = requests.get(url)
    content = r.content

    with open('/tmp/test.pdf', 'wb') as fd:
        fd.write(content)

    print(os.listdir("/tmp/"))

    return {
        'statusCode': 200,
        'body': {
            'file_path': '/tmp/test.pdf'
        }
    }

我已经尝试使用以下策略对文件进行分块:

url = 'http://www.example.com'
r = requests.get(url, stream=True)

with open('/tmp/test.pdf', 'wb') as fd:
    for chunk in r.iter_content(chunk_size):
        fd.write(chunk)

编辑:似乎是一个“超时”的问题。在 CloudWatch 上看到这个: 任务在 3.00 秒后超时

标签: pythonpython-3.xaws-lambdapython-requestsaws-api-gateway

解决方案


编辑:似乎是一个“超时”的问题。在 CloudWatch 上看到这个:任务在 3.00 秒后超时

根据常见问题解答

问:AWS Lambda 函数可以执行多长时间?

AWS Lambda 函数可以配置为每次执行最多运行 15 分钟。您可以将超时设置为 1 秒到 15 分钟之间的任何值。

所以访问你的 Lambda 的配置页面,并增加时间限制。


推荐阅读