2015-12-22 1 views
3

Я работаю над модулем, который получает информацию о последовательности изображений из моей базы данных MySQL, а затем загружает их локально на Lambda, используя библиотеку boto. Впоследствии, он должен сделать некоторую обработку изображения, но я еще не совсем там.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' 

Line 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)) 

Любые идеи, почему они не сохраняют файлы изображений? Я использую S3 роль по умолчанию, предложенные консоли Lambda

+1

0 Вы можете попробовать изменить строку: string = '/ tmp /' + str (count) + '.png' – helloV

+0

Это правильно разобрало - спасибо! – 24x7

ответ

4

Вы можете попытаться изменить строку:

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

Там нет никакого способа узнать, если у вас есть доступ для записи в текущей директории на лямбда машина. Но /tmp позволит вам писать.

От: AWS Lambda FAQ

Q: Что делать, если мне нужно рабочее пространство на диске для моей функции AWS лямбда?

Каждая функция Лямбда получает 500 МБ непостоянного дискового пространства в своей собственной/tmp-директории.

+0

Есть ли ссылка на документацию Лямбда, где я могу найти такую ​​информацию? –

+0

"Q: Что делать, если мне нужна площадь скреста на диске для моей функции AWS Lambda? Каждая функция Lambda получает 500 МБ непостоянного дискового пространства в своей собственной директории/tmp." [источник] (https://aws.amazon.com/lambda/faqs/) – buildmaestro

+0

Спасибо @buildmaestro. Я обновил свой ответ. Часто задаваемых вопросов не было, когда задавался вопрос. – helloV

 Смежные вопросы

  • Нет связанных вопросов^_^