python - AWS lambda URL 请求并将二进制文件写入 /tmp/
问题描述
我正在使用 API 网关 + lambda 函数集成和 Python 3.8。我需要从外部 webhook 接收帖子。webhook 发送一个带有一些数据和 url 的 JSON 对象。我正在尝试使用 requests lib 从 url 获取 pdf 文件并写入 /tmp/ 目录。我已经将请求库从 zip 上传到 lambda 并且工作正常。我进一步计划将pdf上传到S3。
问题:来自 URL 的请求文件没有被写入 /tmp/ 目录。
- 没有错误信息。
- 不是一个沉重的文件(<10 mb)。
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 秒后超时
解决方案
编辑:似乎是一个“超时”的问题。在 CloudWatch 上看到这个:任务在 3.00 秒后超时
根据常见问题解答:
问:AWS Lambda 函数可以执行多长时间?
AWS Lambda 函数可以配置为每次执行最多运行 15 分钟。您可以将超时设置为 1 秒到 15 分钟之间的任何值。
所以访问你的 Lambda 的配置页面,并增加时间限制。
推荐阅读
- angular - 在 Ionic 5 中使用 Ngrx DevTools
- gmp - MPFR - 添加后的损失精度
- shell - 以递增和递减顺序分布数据
- vector - 在 Vec 中搜索匹配项
- wcf - 带有 Windows 身份验证的 IIS 中托管的 WCF netTcpBinding 抛出“该服务不允许您匿名登录”
- python - 使用 Nominatim 和 geodataframe 对英文地址进行反向地理编码全局点
- html - 角度提交按钮的问题
- python - Python - 在一定长度的文件中查找字符串,字符串必须是大写和数字
- php - how do i write the validation in the model in laravel?
- python - pyspark 中用于生成流数据帧操作的高阶函数?