У меня есть S3 Bucket - где при загрузке объекта (CSV загружается) - лямбда срабатывает.Затем Lambda берет этот CSV-файл и загружает его в базу данных Dynamo.Теперь, после того как Dynam DB обновлен - мне нужно отправить уведомление SNS.
Ниже приведен мой код.нижеприведенный код вставляется в Dynamo DB - однако он не выходит из цикла для выполнения части SNS.Если я закомментирую цикл for (put_item), SNS сработает, и я смогу получить уведомление.
import os
import boto3
import json
import logging
log_level = os.environ['LOG_LEVEL']
log = logging.getLogger(__name__)
logging.getLogger().setLevel(log_level)
def lambda_handler(event, context):
# Fetch the bucket name and the file
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
log.info("Event: " + (str(event)))
# Generate record in DynamoDB
try :
# Declare S3 bucket and DynamoDB Boto3 Clients
s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
# Read the Object using get_object API
obj = s3_client.get_object(Bucket=bucket, Key=key)
rows = obj['Body'].read().decode("utf-8").split('\n')
tableName = os.environ['DB_TABLE_NAME']
table = dynamodb.Table(tableName)
log.info("TableName: " + tableName)
try :
# Write the CSV file to the DynamoDB Table
with table.batch_writer() as batch:
for row in rows:
batch.put_item(Item={
'A': row.split(',')[0],
'B': row.split(',')[1],
'C': row.split(',')[2],
'D': row.split(',')[3]
})
print('Finished Inserting into TableName: ' + tableName)
except dynamodb_client.exceptions.ResourceNotFoundException as tableNotFoundEx:
return ('ERROR: Unable to locate DynamoDB table: ', tableName)
except KeyError as dynamoDBKeyError:
msg = 'ERROR: Need DynamoDB Environment Var: DB_TABLE_NAME'
print(dynamoDBKeyError)
return msg;
log.info("Finished Inserting into TableName: " + tableName)
# Send Notificaiton to SNS
try :
topicName = os.environ['SNS_TOPIC_ARN']
print('*SNS TopicName*=', topicName)
log.info("TopicName: " + topicName)
sns_client = boto3.client('sns')
sns_client.publish(
TopicArn = topicName,
Message = "Vehicle Master data updated in DynamoDB!"
)
print('Generated new SNS message, ID: ' + recordId)
log.info("Generated new SNS message, Topic: " + topicName)
except KeyError as snsKeyError:
msg = 'ERROR: Need SNS Environment Var: SNS_TOPIC_NAME'
print(snsKeyError)
return msg;
# return
return {
"statusCode": 200,
"body": json.dumps('Updated to DDB!')
}
Я не уверен, где ошибка: