s3から.jsonファイルをダウンロードし、その内容を変更し、別のキーで同じバケットに再アップロードすることを目標とするラムダ関数を書いています。AWS Lambdaを使用して、一時ファイルを作成して「ファイル」をS3にアップロードするにはどうすればよいですか?
だから私のS3で、私は「クラウド」バケツを持ってクラウド/フォルダ/ 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.jsonとしてそのバケットに直接アップロードする方法はありますか? 私はここで他の例を見ましたが、AWSの秘密やアクセスキーをどこにでも置くことに熱心ではありません。 「例外IOError」、 「にErrorMessage」:「[
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」を取得:私は、私は以下のような何かをしようとすると、私は、マシン上のファイルを作成することはできませんラムダを使用していますので、私は仮定しますErrno 30]読み取り専用ファイルシステム: 'myfile.json' "
アドバイスをいただければ幸いです。ありがとう!
あなたは 'StringIO'または' tempfile'を試しましたか?あなたのインスタンスはどれだけのメモリを持っていますか? Lambdaは '/ tmp'に書き込むことで、あなたがFSに書き留めたい場合にあなたのパスに追加します:[redditのスレッド](https://www.reddit.com/r/aws/comments/5mlgp4/ aws_lambda_s3_and_temporary_files /) –
@monchitos82ありがとうございました!ラムダがファイルシステムをサポートしていることを認識していませんでした。これは非常に助けて – user5494969
@ user5494969あなたの質問のタイトルが誤解を招くように助けてくれることを嬉しく思います。同じ状況で他の人を助けるためにこれを修正したいかもしれません。 –