2015-12-22 202 views
3

我正在研究一个模块,该模块从我的MySQL数据库获取有关图像序列的信息,然后使用boto库在Lambda上本地下载它们。之后,它应该做一些图像处理,但我还没有完成。Boto不保存s3文件到AWS上的光盘Lambda

我不断收到的错误很奇怪。之后(我相信)它下载第一个图像,它说,它不存在的文件/目录:

Traceback (most recent call last): File "/var/task/module.py", line 41, in lambda_handler key.get_contents_to_filename(string) 

File "/var/task/boto/s3/key.py", line 1714, in get_contents_to_filename os.remove(filename) OSError: [Errno 2] No such file or directory: '1.png' 

41号线在我的代码可以在这里找到:

# Download and Save all of the cropped images for this company 
count = 1 
files_list = [] 
for image in cropped_images: 
    key = bucket.get_key(image) 
    string = str(count) + '.png' 
    key.get_contents_to_filename(string) 
    files_list.append(string) 
    count += 1 
print("should be done downloading all of the pictures from S3 ...") 

以下是完整的脚本对于我到目前为止的模块:

from __future__ import print_function 
import json, os 
import pymysql 

import os, glob, subprocess, boto 
from boto.s3.connection import S3Connection 

conn = pymysql.connect(host='*******', port=3306, user='*****', passwd='******', db='*******') 
cur = conn.cursor() 

conn = S3Connection('***************','************************') 
bucket = conn.get_bucket('**********') 

def upload_file(company_friendly, filepath): 
    key = bucket.new_key(company_friendly + ".gif") 
    key.set_contents_from_filename(filepath) 
    key.set_acl('public-read') 
    return True 

def lambda_handler(event, context): 
    ### Grab Company Friendly from DB ### 
    cur.execute("SELECT ************ FROM *********** WHERE company_id = %i LIMIT 1" % (event['company_id'])) 

    company_data = cur.fetchone() 
    company_friendly = company_data[0] 

    ### Grab all snapshots from DB ### 
    cur.execute("SELECT *********** FROM ************ WHERE company_id = %i ORDER BY date ASC" % (event['company_id'])) 
    snapshot_data = cur.fetchall() 

    cropped_images = [] 
    for snapshot in snapshot_data: 
     cropped_images.append(snapshot[0]) 

    ### Download and Save all of the cropped images for this company ### 
    count = 1 
    files_list = [] 
    for image in cropped_images: 
     key = bucket.get_key(image) 
     string = str(count) + '.png' 
     key.get_contents_to_filename(string) 
     files_list.append(string) #this makes sure that the animated gif compiles the images in order 
     count += 1 
    print("should be done downloading all of the pictures from S3 ...") 

    return(json.dumps({'status_code':200, 'msg':"company friendly name is " + company_friendly}, sort_keys=True)) 

任何想法为什么它不保存图像文件?我使用由氧控制台

+1

你可以尝试改变行:string ='/ tmp /'+ str(count)+'.png' – helloV

+0

它正确地排序 - 非常感谢! – 24x7

回答

4

你可以尝试转产到建议的默认S3作用:

string = '/tmp/' + str(count) + '.png'

有没有办法知道,如果你有一个拉姆达在当前目录的写访问机。但/tmp会让你写。

来源:AWS Lambda FAQ

问:如果我需要为我的AWS lambda函数在磁盘上的暂存空间?

每个Lambda函数在 自己的/ tmp目录中接收到500MB的非持久磁盘空间。

+0

有没有Lambda文档的链接,我可以找到像这样的信息? –

+0

“问:如果我的AWS Lambda功能需要磁盘暂存空间,该怎么办? 每个Lambda函数都会在其自己的/ tmp目录中接收500MB的非永久性磁盘空间。” [来源](https://aws.amazon.com/lambda/faqs/) – buildmaestro

+0

谢谢@buildmaestro。我更新了我的答案。当问题被问到时,常见问题解答不存在。 – helloV

相关问题