我如何使用AWS Lambda通过创建临时文件将“文件”上传到S3?

我正在编写一个lambda函数,其目的是从s3下载.json文件,修改其内容,然后在不同的键下重新上传到同一存储桶.

所以在我的s3中,我有一个“云”存储桶cloud / folder / foo.json

>>> foo.json
{
   "value1": "abc",
   "value2": "123"
}

我想下载它,相应地更改几件事,然后将其重新上传到与bar.json相同的位置

我的第一部分工作是,它下载文件的内容并修改内容,但是现在所有内容都是python字典对象.

import boto3
import json


def get_json():
    client = boto3.client('s3')
    response = client.get_object(Bucket='cloud', Key='folder/foo.json')
    data = response['Body'].read()
    bar = json.loads(data)
    bar["value-1"] = "do-re-mi"

    #TODO: implement uploading here   

def lambda_handler(event, context):
    get_json()
    return 'Hello from Lambda'

所以现在

>>> bar
{
   "value1": "do-re-mi",
   "value2": "123"
}

bar变量是正确的,但是是字典对象.如何直接将其作为bar.json上传到该存储桶?
我在这里看到了其他示例,但是我不希望将我的AWS秘密或访问密钥放在任何地方.我想是因为我正在使用lambda,所以当我尝试执行以下操作时,无法在计算机上创建文件:

g = open('myfile.json', 'w')
g.write(json.dumps(bar, indent=4, sort_keys=True))
g.close()

with open('myfile.json', 'rb') as f:
    client.upload_fileobj(f, 'cloud', 'bar.json')

我得到一个“ errorType”:“ IOError”,
  “ errorMessage”:“ [Errno 30]只读文件系统:’myfile.json’”

任何建议将不胜感激.谢谢!

解决方法:

感谢monchitos82,我了解到您可以在lambda中写入/ tmp.因此,我要做的就是将其添加到文件的开头,并且可以正常工作.

g = open('/tmp/myfile.json', 'w')
g.write(json.dumps(bar, indent=4, sort_keys=True))
g.close()

with open('/tmp/myfile.json', 'rb') as f:
    client.upload_fileobj(f, 'cloud', 'bar.json')
上一篇:python boto3将IAM角色附加/替换为ec2


下一篇:python-演示如何使用boto3从S3存储桶中删除一个或多个特定键