AWSのS3バケットにさまざまなjsonファイルを保存しています。
AWS lambda pythonサービスを使用してこのJSONを解析し、解析結果をAWS RDS MySQLデータベースに送信したいと思います。
安定したpythonデータベースを解析および書き込むためのスクリプトがあります。jsonファイルを追加する場合は、jsonファイルを反復処理するラムダスクリプトが必要です。
各jsonファイルには、単純なresults = [content]
擬似コードで私が欲しいのは:
jsondata
)results
)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でファイルを読み取るのではなく、lambdaはそれ自体をダウンロードする必要があります。
here から、lambdaにダウンロードパスを与えなければならず、そこからファイル自体にアクセスできます
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)
bucket.objects.all()
を使用して、バケット内のすべてのオブジェクトのリストを取得できます(必要に応じて、filter
、page_size
、limit
などの代替メソッドもあります)
これらのメソッドは S3.ObjectSummary
オブジェクトを含むイテレータを返します。そこからobject.get
メソッドを使用してファイルを取得できます。
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
emailcontent = response['Body'].read().decode('utf-8')