Я пытаюсь использовать лямбда-функцию python для добавления текстового файла с новой строкой к объекту, хранящемуся в S3.Поскольку объекты, хранящиеся в S3, являются неизменяемыми, вы должны сначала загрузить файл в '/ tmp /', затем изменить его, а затем загрузить новую версию обратно в S3.Мой код добавляет данные, но не добавляет их с новой строкой.
BUCKET_NAME = 'mybucket'
KEY = 'test.txt'
s3 = boto3.resource('s3')
def lambda_handler(event, context):
try:
s3.Object(BUCKET_NAME, KEY).download_file('/tmp/test.txt')
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
with open('/tmp/test.txt', 'a') as fd:
fd.write("this is a new string\n")
s3.meta.client.upload_file('/tmp/test.txt', BUCKET_NAME, KEY)
К файлу всегда добавляется новая строка, но никогда не добавляется новая строка.Любые идеи?
ОБНОВЛЕНИЕ: Эта проблема не возникает на машинах Linux или на Mac.Лямбда-функции выполняются на контейнерах linux, что означает, что файл в / tmp / сохраняется как текстовый файл в формате Unix.Некоторые приложения Windows не будут отображать разрывы строк в текстовых файлах, отформатированных в Unix, как это было здесь.Я тупой.