web-dev-qa-db-fra.com

Comment utiliser aws lambda pour écrire un fichier sur s3 (python)?

J'ai essayé d'utiliser la fonction lambda pour écrire un fichier sur S3, puis les tests de test "ont réussi", mais rien n'est apparu dans mon compartiment S3. Qu'est-il arrivé? Est-ce que quelqu'un peut me donner des conseils ou des solutions? Merci beaucoup. Voici mon code.

import json
import boto3

def lambda_handler(event, context):

string = "dfghj"

file_name = "hello.txt"
lambda_path = "/tmp/" + file_name
s3_path = "/100001/20180223/" + file_name

with open(lambda_path, 'w+') as file:
    file.write(string)
    file.close()

s3 = boto3.resource('s3')
s3.meta.client.upload_file(lambda_path, 's3bucket', s3_path)
15
Rick.Wang

J'ai eu du succès en streaming des données vers S3, il doit être encodé pour faire ceci:

import boto3

def lambda_handler(event, context):
    string = "dfghj"
    encoded_string = string.encode("utf-8")

    bucket_name = "s3bucket"
    file_name = "hello.txt"
    lambda_path = "/tmp/" + file_name
    s3_path = "/100001/20180223/" + file_name

    s3 = boto3.resource("s3")
    s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)

Si les données sont dans un fichier, vous pouvez lire ce fichier et l'envoyer:

with open(filename) as f:
    string = f.read()

encoded_string = string.encode("utf-8")
24
Tim B