2015-11-18 15 views
18

AWSのS3バケットにjsonファイルの範囲が格納されています。ラムダを使用してS3からデータを読み取る

AWSラムダ・パイソンサービスを使用してこのjsonを解析し、解析結果をAWS RDS MySQLデータベースに送信したいとします。

私は、解析とデータベースへの書き込みを行うための安定したpythonスクリプトを持っています。 jsonファイルを反復するためにlambdaスクリプトを追加する必要があります。

各JSONファイルがリストに含まれている、単純な私が欲しいものを擬似コードでresults = [content]

からなることです:S3バケットへ

  1. 接続(jsondata
  2. の内容を読みますJSONファイル(results
  3. このデータにmyスクリプトを実行する(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) 

EDIT

のようなものを望みます。 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) 

答えて

7

あなたも(バケット内のすべてのオブジェクトのリストを取得するためにbucket.objects.all()を使用することができます

)あなたの必要性に応じて filterpage_sizelimitのような代替方法を持っているこれらのメソッドを使用して、ファイルを取得する方法 object.getを使用することができ、そこからそれで S3.ObjectSummaryオブジェクト、とイテレータを返します。

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

応答に使用するs3オブジェクトを作成する必要があることにも注意してください。すなわち、 's3 = boto3.client( 's3')' – ScottMcC

関連する問題