Ich habe eine Reihe von JSON-Dateien in einem S3-Bucket auf AWS gespeichert.Lesen von Daten aus S3 mit Lambda
Ich möchte den AWS Lambda Python-Dienst verwenden, um diesen JSON zu analysieren und die geparsten Ergebnisse an eine AWS RDS MySQL-Datenbank zu senden.
Ich habe ein stabiles Python-Skript zum Parsen und Schreiben in die Datenbank. Ich brauche ein Lambda-Skript, um die JSON-Dateien zu durchlaufen (wenn sie hinzugefügt werden).
Jede JSON-Datei enthält eine Liste, einfach bestehend aus results = [content]
In Pseudo-Code, was ich will, ist:
- Verbindung mit dem S3-Bucket (
jsondata
) - Lesen Sie den Inhalt der JSON-Datei (
results
) - für diese Daten meines Skript ausführen (
results
)
Ich kann den Eimer Liste Ich habe von:
import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
Giving:
jsondata
Aber ich kann diesen Eimer nicht zugreifen seine Ergebnisse zu lesen.
Es scheint keine read
oder load
Funktion zu sein.
Ich wünsche für so etwas wie
for bucket in s3.buckets.all():
print(bucket.contents)
EDIT
ich etwas Missverständnis bin. Anstatt die Datei in S3 zu lesen, muss Lambda sie selbst herunterladen.
Von here scheint es, dass Sie Lambda einen Download-Pfad geben muss, aus dem er auf die Dateien zugreifen können selbst
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)
Beachten Sie auch, dass Sie ein s3-Objekt erstellen müssen, um es in Ihrer Antwort zu verwenden. d.h. 's3 = boto3.client ('s3')' – ScottMcC