私はPythonで書かれたラムダ関数を持っており、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
ラムダに添付されたポリシー
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
本当の問題は、ラムダがVPCを使用していたが、VPCにはs3にアクセスするためのエンドポイントがなかったことです。だからあなたがそれを持っていることを確認してください。
(そしてラムダにs3を呼び出すのに十分なパーミッションを許可するため)
今では1秒未満で機能を実行します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加