Мы разработали две лямбда-функции в Python, как показано ниже:
Лямбда-функция для записи RDS - эта функция анализирует файлы .csv, загруженные на S3, и записывает их в AWS Aurora db. Журналы обработки файлов сбрасываются в cloudwatch.
Лямбда-функция подписана на группу cloudwatch, созданную из 1-й лямбда-функции, которая записывает в RDS - она запускается каждый раз, когда новые журналы добавляются в группу лямбда-записей записи RDS.
У нас проблема со 2-й лямбда-функцией, которая подписана на группу cloudwatch. В большинстве случаев он корректно анализирует логи cloudwatch, но в некоторых случаях мы заметили, что лямбда-функция запускается даже до того, как 1-я лямбда-функция завершает запись всех логов в группу логов. 2-я лямбда-функция запускается несколько раз для одиночного выполнения 1-й лямбда-функции, и каждое выполнение получает часть данных группы журналов для анализа.
Вышеуказанное поведение является непоследовательным, и большую часть времени вторая лямбда-функция выполняется один раз при каждом выполнении первой лямбда-функции.
У меня есть код ниже для сбора потоков журнала
def lambda_handler(event, context):
print(f'Logging Event: {event}')
print(f"Awslog: {event['awslogs']}")
cw_data = event['awslogs']['data']
print(f'data: {cw_data}')
print(f'type: {type(cw_data)}')
compressed_payload = base64.b64decode(cw_data)
uncompressed_payload = gzip.decompress(compressed_payload)
payload = json.loads(uncompressed_payload)
messagelst=[]
for log_event in payload:
data_log=json.loads(json.dumps(log_event))
messagelst.append(re.split(r'\t',data_log['message'])
messagelst собирает полный журнал для анализа и отправки в функцию синтаксического анализа. Мы заметили, что функция парсера иногда не получает полные данные журнала.