Вопрос или проблема
Недавно я столкнулся с ситуацией, когда lambda была недоступна в моем регионе, и мои конечные точки API gateway возвращали 500-е ошибки, потому что авторизатор lambda не работал. Я хочу создать проверку работоспособности Route53 для авторизатора lambda, чтобы я мог запустить переключение на мой резервный регион, если это произойдет снова.
Но у меня возникли проблемы при попытке настроить это:
- Я попытался создать простой
/health
ресурс на API gateway + lambda, который возвращает 200-й ответ после того, как lambda распознает этот маршрут здоровья. Затем я могу интегрировать это с проверкой работоспособности R53. Однако авторизатор lambda на основе токена требует заголовокAuthorization
, который нельзя настроить для самой проверки работоспособности R53 (даже с фиктивным значением). Я не могу конвертировать lambda с токена на основе на запрос, так как есть некоторые требования, которые не позволяют мне это сделать. Поэтому эта несовместимость, похоже, исключает эту опцию. - Я создал тревогу Cloudwatch на ошибках Lambda, которая может быть использована для проверки работоспособности Route 53. Я решил использовать уровень ошибки (ошибки/вызовы), так как это лучше всего подходит для моего случая. Однако Route 53 не поддерживает тревоги, которые используют математические метрики для опроса нескольких тревог Cloudwatch. Для lambdas AWS рекомендует использовать Sum в качестве статистики для метрики
Error
. Но мне не нравится идея основывать тревогу на фиксированном числе сбоев, так как я не хотел бы, чтобы ожидаемые паттерны трафика и occasional error spikes from the lambda вызывали оповещение. Я действительно хочу, чтобы тревога + переключение R53 срабатывали только в том случае, если Lambda полностью недоступна. Будь то непрерывный набор ошибок lambda или отсутствие вызовов вообще за определенный период (предполагая, что lambda внезапно недоступна).
Есть ли какие-то советы/предложения о том, как настроить эту проверку работоспособности Route 53 с учетом этих проблем?
Ответ или решение
Создание проверки работоспособности через Route 53 для авторизатора Lambda, использующего токен на основе AWS API Gateway, представляет собой непростую задачу. Как вы уже заметили, в этой схеме есть ряд ограничений, которые могут вызвать сложности при попытке обеспечить стабильность вашей системы. Давайте подробно рассмотрим, как сделать это с учетом ваших требований и существующих проблем.
1. Понимание ограничений API Gateway и Lambda
Вы правильно отметили, что авторизатор Lambda для API Gateway требует заголовок Authorization
. Это действительно ставит под вопрос возможность настройки проверки работоспособности с помощью Route 53, поскольку он не поддерживает передачу пользовательских заголовков при настройке health check.
2. Рекомендации по альтернативным подходам
А. Использование CloudWatch Alarms
Ваша идея с использованием CloudWatch Alarm для отслеживания ошибок Lambda является разумным подходом. Однако, чтобы избежать ложных срабатываний при нормальных пиковых значениях запросов, следует рассмотреть настройку метрики, которая отслеживает не только количество ошибок, но и общее количество вызовов функции. Для этого вы можете создать Alarm, который срабатывает только в том случае, если ошибка Lambda сохраняется на уровне, превышающем допустимые пределы в течение определенного времени.
Б. Настройка метрики с использованием Статистики "Пользовательская"
Вместо того чтобы полагаться на фиксированные значения, рассмотрите возможность использования пользовательской метрики. Например, вы можете интегрировать функцию Lambda с Amazon CloudWatch и отправлять кастомные метрики, такие как LambdaIsHealthy
, которая будет принимать значение 1
, если Lambda доступна, и 0
в противном случае. Это даст вам больше контроля над срабатыванием Alarm и обеспечит надежность мониторинга вашего авторизатора.
В. Реализация периодического опроса через другой процесс
Если допустимо, вы можете организовать периодический опрос состояния вашего авторизатора через другой Lambda или EC2-инстанс, который будет выполнять запрос к вашему /health
эндпоинту. Данный процесс может использовать данные для оценки доступности вашего основном Lambda авторизатора и отправки оповещения при его недоступности.
3. Настройка Route 53 для Failover
После того как у вас есть Alarm, который корректно отслеживает состояние вашей Lambda-функции, вы можете использовать Route 53 для создания health check, основанный на этом Alarm.
- Создайте новый health check в Route 53, выбрав ваш CloudWatch Alarm в качестве триггера для проверки работоспособности.
- Установите правила для failover, чтобы Route 53 переключился на ваш DR-район в случае, если health check указывает на падение основной Lambda-функции.
Заключение
Использование комбинации CloudWatch и Route 53 для мониторинга вашего Lambda-authorizer может обеспечить надежность и защиту ваших API Gateway. Подход с использованием пользовательских метрик и грамотной настройки Alert-ов позволит вам избежать ложных срабатываний и даст возможность мгновенно реагировать на любые проблемы с доступностью вашего API.
Если у вас возникнут дополнительные вопросы или потребуется помощь в реализации, не стесняйтесь обращаться за помощью.