2016-03-03 13 views
5

私のpythonコードは他のWebサイトから情報を受け取り、jsonファイルを作成します。ローカルコンピュータ上ではうまくいきますが、ラムダでコードを実行しようとするとエラーが発生します。
私が作成ファイルに異なる方法を使用しています
ラムダと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

ラムダ関数は、マシン上のどこにでもローカルファイルへの書き込み権限を持ちません。 /tmpディレクトリに書き込みを試みてください:

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

ありがとう、あなたは天才です! :) – Iraklii

関連する問題