Запись строки в S3 с помощью boto3: «объект dict не имеет атрибута put - PullRequest
0 голосов
/ 02 февраля 2019

В лямбда-выражении AWS я использую boto3 для помещения строки в файл S3:

import boto3
s3 = boto3.client('s3')
data = s3.get_object(Bucket=XXX, Key=YYY)
data.put('Body', 'hello')

Мне говорят следующее:

[ERROR] AttributeError: 'dict' object has no attribute 'put'

То же самое происходит с data.put('hello') это метод, рекомендуемый верхними ответами на Как записать файл или данные в объект S3, используя boto3 и с data.put_object: 'dict' object has no attribute 'put_object'.

Что я делаюнеправильно?

Напротив, чтение прекрасно работает (с data.get('Body').read().decode('utf-8')).

1 Ответ

0 голосов
/ 02 февраля 2019

put_object - это метод объекта s3, а не объекта данных.

Вот полный рабочий пример с Python 3.7:

import json
import boto3
s3 = boto3.client('s3')
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

    bucket = 'mybucket'
    key = 'id.txt'
    id = None

    # Write id to S3
    s3.put_object(Body='Hello!', Bucket=bucket, Key=key)

    # Read id from S3
    data = s3.get_object(Bucket=bucket, Key=key)
    id = data.get('Body').read().decode('utf-8') 
    logger.info("Id:" + id)


    return {
        'statusCode': 200,
        'body': json.dumps('Id:' + id)
    }
...