Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lambda and S3 Permission denied when want to create file

My python code takes information from others web sites and creates json file. On local computer it works good but when I try to run code in Lambda I have error.
I have used different methods to creation 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)
like image 320
Iraklii Avatar asked Mar 03 '16 17:03

Iraklii


1 Answers

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

file = open('/tmp/test.json', 'w')
like image 183
James Avatar answered Sep 27 '22 16:09

James