gpt4 book ai didi

python - 如何使用 AWS Lambda 通过创建临时文件将 'file' 上传到 S3?

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:54 24 4
gpt4 key购买 nike

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

所以在我的 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 secret 或访问 key 。我假设因为我使用的是 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 - 如何使用 AWS Lambda 通过创建临时文件将 'file' 上传到 S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44166583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com