前提・実現したいこと
URL先のようなS3内のログをSplunkに流す構成(S3→SNS→SQS①→Lambda→SQS②→Splunk)の中にLambdaを構築したいと考えています。
https://github.com/pauld-splunk/aws-s3-sqs-lambda
発生している問題・エラーメッセージ
SQS①から受け取ったキューをLambda(Python3.8)にて複数のSQSにルーティングするためサイト内のコードをコピペし環境変数とIAMロールを設定しDeployしたところ以下のようなKeyErrorが発生してしまいました。
{ "errorMessage": "'Records'", "errorType": "KeyError", "stackTrace": [ " File \"/var/task/lambda_function.py\", line 7, in lambda_handler\n sqs_records = event[\"Records\"]\n" ] }
該当のソースコード
Python3.8
1import json 2import boto3 3import os 4sqs = boto3.client('sqs') 5def lambda_handler(event, context): 6 7 sqs_records = event["Records"] 8 9 try: 10 excludelist=json.loads(os.environ['EXCLUDELIST']) 11 except: 12 excludelist=[] 13 14 for payload_record in sqs_records: 15 16 body = json.loads(payload_record['body']) 17 18 try: 19 message = json.loads(body['Message']) 20 except: 21 message = [] 22 23 s3_records = message["Records"] 24 25 26 for s3_record in s3_records: 27 mykey = s3_record["s3"]["object"]["key"] 28 arn = s3_record["s3"]["bucket"]["arn"] 29 30 skip=0 31 for item in excludelist: 32 if (item in mykey): 33 skip=1 34 print(f'Not forwarding object <{mykey}> from bucket <{arn}> as it is in exclude list') 35 36 37 if ("CloudTrail" in mykey): 38 forwardQueue = sqs.get_queue_url(QueueName=os.environ['CloudTrailQueueName']) 39 elif ("Config" in mykey): 40 forwardQueue = sqs.get_queue_url(QueueName=os.environ['ConfigQueueName']) 41 elif ("vpcflowlogs" in mykey): 42 forwardQueue = sqs.get_queue_url(QueueName=os.environ['vpcflowlogsQueueName']) 43 else: 44 forwardQueue = sqs.get_queue_url(QueueName=os.environ['defaultQueueName']) 45 46 if skip!=1: 47 forwardQueueUrl = forwardQueue['QueueUrl'] 48 sqs.send_message(QueueUrl=forwardQueueUrl, MessageBody=(json.dumps(body))) 49 50
試したこと
調べた中でKeyErrorはキーが存在しないという記述が多かったためスペルミスや括弧の表記が間違っている可能性を考慮し変更してテストしてみましたがエラーが解消されませんでした。
補足情報
18-21行目箇所
try: message = json.loads(body['Message']) except: message = []
は別のエラーが発生していたためtry-exceptを追加しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。