S3に保存されているJSONファイルを「DocumentDB」「DynamoDB」などのAWSのDBへ取り込む方法として
下記の記事を参考に実施いたしましたが、ClodWatchで下記のエラーが発生してしまいます。
他にも方法がございましたら、ご教示をお願いします。
https://qiita.com/yifey/items/cd97445ecd7085cea444
lambdaのテンプレコードで変更した個所は下記となります。
YOUR_DYNAMO_TABLE_NAME → test-jsonlog
DynamoDBのパーティションキーは同じなので「name 」で変更しておりません。
よろしくお願いいたします。
'Records': KeyError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 16, in lambda_handler
bucket = event['Records'][0]['s3']['bucket']['name']
KeyError: 'Records'
import boto3
import json
import urllib.parse
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
dynamodb = boto3.client('dynamodb')
s3 = boto3.client('s3')
def lambda_handler(event, context):
#target dynamo table name
dynamotable = 'test-jsonlog'
#get bucket name and file name by s3 put event bucket = event['Records'][0]['s3']['bucket']['name'] filename = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') #get uploaded text file contents try: res = s3.get_object(Bucket=bucket, Key=filename) except Exception as e: return logger.error("Failed to get uploaded file: {}".format(e)) # file type check if (res['ContentType'] == 'text/plain'): # get body body = res['Body'].read() bodystr = body.decode('UTF-8') lines = bodystr.split('\r\n') # for windows line endings #get items of each line for item in lines: data = item.split(' ') name = data[0] age = data[1] #register data to the dynamo db try: dynamodb.put_item( TableName = dynamotable, Item = {'name':{'S':name},'age':{'N':age}}, Expected = {'name':{'Exists':False}} ) except Exception as e: print(e) else: logger.error('Invalid File Type: ' + res['ContentType'])
あなたの回答
tips
プレビュー