【问题标题】:Lambda Function timing out when uploading to S3上传到 S3 时 Lambda 函数超时
【发布时间】:2016-04-11 22:43:47
【问题描述】:

我有一个用python编写的lambda函数,它在mongodb中执行一些操作,然后它应该从函数的tmp文件夹上传一张图片到s3。该函数在上传步骤中保持超时。

我将超时时间提高到 2 分钟,并且该函数具有 S3 和 vpc 权限。该函数只是超时。有人对出了什么问题有任何想法吗?

示例输入

#picturename should be created by the app. a name unique for the dish
{
    "UserId": "56dc63fc1769d032d4d78e2e",  
    "DishId": "56dcc2781769d032d4d78e2f",
    "PictureName" : "katsu-001.png",
    "Data": "base64 image just the bits ignore data:image/jpeg;base64, if you have it"
}

功能

def addPicture(event,context):  

from __future__ import print_function
import pymongo
from pymongo import MongoClient
import bson.code
from bson.objectid import ObjectId
import datetime
import json    
import boto3
import sys
import uuid
from base64 import decodestring

print ('Writing file to disk')
with open('/tmp/' + pictureName,"wb") as f:
    f.write(decodestring(event["Data"]))
    print ('File written to /tmp/' + pictureName)

s3_client = boto3.client('s3')
print ('Starting S3 upload')
bucket = "foundue-dev-filestore"
upload_path = 'pictures/dish/' + dishId.__str__() + '/' + pictureName
print ('Uploading /tmp/' + pictureName + ' ' + bucket + ' ' + upload_path) 
s3_client.upload_file('/tmp/' + pictureName,bucket, upload_path)   
print ('Upload Complete')  
#pics[pictureName] = upload_path
#dish["Pictures"] = pics
#dish["UpdatedOn"] = datetime.datetime.utcnow()
#db.dishes.replace_one({"_id": dishId}, dish)
return

附加到 lambda 的策略

oneClick_lambda_basic_vpc_execution_1457284829450
oneClick_lambda_s3_exec_role_1457392283800

输出

Loading function 
START RequestId: ed91c290-e582-11e5-95d6-ed4fc6a3321b Version: $LATEST 
Writing file to disk 
File written to /tmp/katsu-002png 
Starting S3 upload 
Uploading /tmp/katsu-002png foundue-dev-filestore pictures/dish/56dcc2781769d032d4d78e2f/katsu-002png 
END RequestId: ed91c290-e582-11e5-95d6-ed4fc6a3321b 
REPORT RequestId: ed91c290-e582-11e5-95d6-ed4fc6a3321b  Duration: 121003.49 ms  Billed Duration: 121000 ms Memory Size: 128 MB  Max Memory Used: 22 MB
2016-03-08T23:12:21.437Z ed91c290-e582-11e5-95d6-ed4fc6a3321b Task timed out after 121.00 seconds

【问题讨论】:

    标签: python amazon-s3 aws-lambda


    【解决方案1】:

    真正的问题是 lambda 正在使用 VPC,但 VPC 没有端点来访问 s3。 所以确保你有那个。

    (并允许 lambda 有足够的权限调用 s3)

    现在它可以在不到一秒的时间内完成这些功能。

    【讨论】:

    • 我假设我的默认 vpc 可以访问互联网也可以访问 S3。谢谢你的回答,它为我节省了很多时间
    • 经过 2 天的问题识别后,这为我节省了更多时间......谢谢
    【解决方案2】:

    你的输出很清楚:

    任务在 121.00 秒后超时

    似乎 2 分钟不足以成功上传您的文件。 尝试使用较小的文件重现该问题。您也可以尝试设置超时设置的最大值(5 分钟)。

    【讨论】:

    • 文件很小,只有 200k。我很难相信数据中心上的某个函数在其中传输时遇到问题。我会增加超时并报告
    • 是的,5 分钟后仍然超时。我认为还有其他一些潜在的问题。
    • 我敢打赌,如果您尝试上传少量文件,您的功能将成功完成。可以试试这个吗?我还可以在您的代码中看到print ('Uploading /tmp/' + pictureName + ' ' + bucket + ' ' + upload_path) 。您是否看到任何显示成功上传的日志记录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2016-12-22
    • 2011-12-12
    • 2017-10-26
    • 2020-01-02
    • 2021-08-27
    相关资源
    最近更新 更多