python - example - Чтение данных с S3 с использованием Lambda



boto3 s3 delete_objects (2)

Вы можете использовать bucket.objects.all() чтобы получить список всех объектов в page_size (у вас также есть альтернативные методы, такие как filter , page_size и limit зависимости от ваших потребностей)

Эти методы возвращают итератор с объектами S3.ObjectSummary , оттуда вы можете использовать метод object.get для получения файла.

https://src-bin.com

У меня есть ряд файлов json, хранящихся в корзине S3 на AWS.

Я хочу использовать сервис AWS lambda python для анализа этого json и отправки проанализированных результатов в базу данных AWS RDS MySQL.

У меня есть стабильный скрипт Python для выполнения анализа и записи в базу данных. Мне нужно, чтобы лямбда-скрипт перебирал файлы json (когда они добавляются).

Каждый файл JSON содержит список, простой состоящий из results = [content]

В псевдокоде я хочу:

  1. Подключите к ведру S3 ( jsondata )
  2. Прочитать содержимое файла JSON ( results )
  3. Выполнить мой скрипт для этих данных ( results )

Я могу перечислить ведра, которые я имею:

import boto3

s3 = boto3.resource('s3')

for bucket in s3.buckets.all():
    print(bucket.name)

Предоставление:

jsondata

Но я не могу получить доступ к этому ведру, чтобы прочитать его результаты.

Кажется, нет функции read или load .

Я хочу что-то вроде

for bucket in s3.buckets.all():
   print(bucket.contents)

РЕДАКТИРОВАТЬ

Я что-то неправильно понимаю. Вместо того, чтобы читать файл в S3, лямбда должна загрузить его сама.

here кажется, что вы должны указать лямбде путь загрузки, из которого он может получить доступ к самим файлам.

import libraries

s3_client = boto3.client('s3')

def function to be executed:
   blah blah

def handler(event, context):
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = record['s3']['object']['key'] 
        download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
        s3_client.download_file(bucket, key, download_path)

Answer #1
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
emailcontent = response['Body'].read().decode('utf-8')




aws-lambda