Lambda and S3 permissions if you want to create a file

My python code takes information from other websites and creates a json file. It works fine on the local machine, but when I try to run the code in Lambda, I have an error.
I used various methods to create the file:

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

and

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

Error message:

 { "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'" } 

code:

 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) 
+5
source share
1 answer

Your Lambda function will not have local permissions to write the file on the machine. Try writing to the /tmp :

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

Source: https://habr.com/ru/post/1244377/


All Articles