2016-03-03 110 views
5

我的python代碼從其他網站獲取信息並創建json文件。在本地計算機上它工作的很好,但是當我嘗試在Lambda中運行代碼時,出現錯誤。
我用不同的方法來創建文件:
當想要創建文件時,Lambda和S3權限被拒絕

file = open('test.json', 'w') 

oldumask = os.umask(0) 
fdesc = os.open('test.json', os.O_WRONLY | os.O_CREAT, 0o600) 
file = os.fdopen(fdesc, "w") 

錯誤消息:

{ 
    "stackTrace": [ 
    [ 
     "/var/task/awsewt1.py", 
     24, 
     "handler", 
     "fdesc = os.open('test.json', os.O_WRONLY | os.O_CREAT, 0o600)" 
    ] 
    ], 
    "errorType": "OSError", 
    "errorMessage": "[Errno 13] Permission denied: 'test.json'" 
} 

代碼:

from __future__ import print_function 

import json 
import urllib 
import boto3 
import os, stat 

access_key = 'hide' 
secret_key = 'hide' 

def loadJSONByURL(url,key): 
    response = urllib.urlopen(url) 
    content = response.read() 
    data = json.loads(content) 
    text = {key:data} 
    return text 

def handler(event, context): 
    phattha = "hide" 
    phuket = "hide" 
    koSamui = "hide" 
    oldumask = os.umask(0) 
    fdesc = os.open('test.json', os.O_WRONLY | os.O_CREAT, 0o600) 
    file = os.fdopen(fdesc, "w") 
    json.dump(loadJSONByURL(phattha,'phatthaya'), file) 
    json.dump(loadJSONByURL(phuket,'phuket'), file) 
    json.dump(loadJSONByURL(koSamui,'koSamui'), file) 
    file.close() 
    conn = S3Connection(access_key,secret_key) 
    bucket = conn.get_bucket('ewtbucket') 

    key1 = bucket.get_key('test.json') 
    if key1: 
     key1.delete() 
    key = bucket.new_key('/test.json') 
    key.set_contents_from_filename('test.json') 
    key.set_acl('public-read') 

s3 = boto3.client('s3') 


def lambda_handler(event, context): 
    handler(event,context) 

回答

11

您的Lambda函數在本機上無處不在本地文件寫入權限。嘗試寫/tmp目錄:

file = open('/tmp/test.json', 'w') 
+0

謝謝,你是天才! :) – Iraklii

相關問題