Я пытаюсь загрузить простую таблицу Transactions.txt в корзину S3, где функция Lambda читает файл и заполняет таблицы DynamoDB для клиентов и транзакций.Это все отлично работает.Однако у меня также есть лямбда-функция, которая должна читать таблицу транзакций, когда они заполняют таблицу, суммировать итоги транзакций по клиенту и вставлять их в другую таблицу DynamoDB - TransactionTotal.
Моя лямбда-функция TotalNotifierвыдает «KeyError» относительно «нового изображения».Я считаю, что код в порядке, и я попытался изменить тип потоков с «Новый и старый» на «Новый» для таблицы «Транзакции» и все еще сталкиваюсь с той же ошибкой.
from __future__ import print_function
import json, boto3
# Connect to SNS
sns = boto3.client('sns')
alertTopic = 'HighBalanceAlert'
snsTopicArn = [t['TopicArn'] for t in sns.list_topics()['Topics'] if t['TopicArn'].endswith(':' + alertTopic)][0]
# Connect to DynamoDB
dynamodb = boto3.resource('dynamodb')
transactionTotalTableName = 'TransactionTotal'
transactionsTotalTable = dynamodb.Table(transactionTotalTableName);
# This handler is executed every time the Lambda function is triggered
def lambda_handler(event, context):
# Show the incoming event in the debug log
print("Event received by Lambda function: " + json.dumps(event, indent=2))
# For each transaction added, calculate the new Transactions Total
for record in event['Records']:
customerId = record['dynamodb']['NewImage']['CustomerId']['S']
transactionAmount = int(record['dynamodb']['NewImage']['TransactionAmount']['N'])
# Update the customer's total in the TransactionTotal DynamoDB table
response = transactionsTotalTable.update_item(
Key={
'CustomerId': customerId
},
UpdateExpression="add accountBalance :val",
ExpressionAttributeValues={
':val': transactionAmount
},
ReturnValues="UPDATED_NEW"
)
Вот примерошибка из журнала CloudWatch:
'NewImage': KeyError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 30, in lambda_handler
customerId = record['dynamodb']['NewImage']['CustomerId']['S']
KeyError: 'NewImage'