Я развернул приложение репо без сервера в своей учетной записи AWS. Приложение представляет собой LogzioCLoudWatchShipper. Мое намерение состоит в том, чтобы установить события cloudwatch как триггер для этой лямбда-функции, которая затем будет выполнять эту лямбду, извлекать данные журнала из события и отправлять данные журнала в logz.io.
Когда я тестирую лямбда-функцию в консоли AWS, я получаю сообщение об ошибке: «errorType»:
"IOError",
"errorMessage": "Не распакованный файл"
Я успешно развернул безсерверное приложение репо и вижу код лямбды в консоли AWS.
Я указал событие со следующей разметкой:
{"awslogs":{"data":"aGVsbG8gd29ybGQ=}}
Вот функция, которая извлекает данные журнала из события. Эта функция является частью лямбда-функции.
def _extract_aws_logs_data(event):
# type: (dict) -> dict
try:
logs_data_decoded = event['awslogs']['data'].decode('base64')
logs_data_unzipped = gzip.GzipFile(fileobj=StringIO(logs_data_decoded)).read()
logs_data_dict = json.loads(logs_data_unzipped)
return logs_data_dict
except ValueError as e:
logger.error("Got exception while loading json, message: {}".format(e))
raise ValueError("Exception: json loads")
Я также добавил событие в свой блок функций serverless.yaml:
handler: lambda_function.lambda_handler //From AWS console
events:
- cloudwatchEvent:
event:
source:
- 'custom.servicename'
detail-type:
- 'New_Event'
~