Писал бота, исправлял ошибки, как вдруг он перестал запускаться. Сначала вылетал Bad Gateway, а через 15-20 минут вместо него начал появляться Gateway Timeout. В коде нет проблем которые могли бы на это влиять, так что это значит?
вот огрызок кода который может помочь, там явно есть ошибки, но с ними бот хотя бы запускался
async def dice_game(message: types.Message, ): await bot.send_message(message.from_user.id, 'Let`s play dice!') bot_data = await bot.send_dice(message.from_user.id) bot_data = bot_data['dice']['value'] user_data = await bot.send_dice(message.from_user.id) bot_data = bot_data['dice']['value'] if bot_data > user_data: await bot.send_message(message.from_user.id, f'Число бота: {bot_data}, твое число: {user_data}. Ты проиграл!', reply_markup=stop) elif bot_data < user_data: await bot.send_message(message.from_user.id, f'Число бота: {bot_data}, твое число: {user_data}. Ты выиграл!', reply_markup=stop) elif bot_data == user_data: await bot.send_message(message.from_user.id, f'Число бота: {bot_data}, твое число: {user_data}. Ничья!', reply_markup=stop)
Устранение ошибок тайм-аута HTTP 504 шлюза API
Я получаю код состояния ошибки HTTP 504 при вызове REST API, HTTP API или Websocket API с помощью Amazon API Gateway.
Краткое описание
Если запрос на интеграцию занимает больше времени, чем параметр максимального времени ожидания интеграции REST API шлюза API, шлюз API возвращает код состояния HTTP 504.
Чтобы устранить ошибки тайм-аута 504 от шлюза API, сначала определите и проверьте источник ошибки в журналах выполнения Amazon CloudWatch. Затем используйте один или несколько из следующих методов, чтобы сократить время выполнения ваших запросов на интеграцию до тех пор, пока они не истечет время ожидания.
Решение
Чтобы определить и проверить источник ошибки 504 в журналах Amazon CloudWatch
1. Для Rest API и Websocket API настройте ведение журнала выполнения API Gateway для ошибок 504. Для HTTP API активируйте ведение журнала, чтобы записывать журналы в журналы CloudWatch.
2. Попытайтесь вручную воспроизвести ошибку 504 в API.
3. Активируйте ведение журнала доступа для API, а затем используйте следующие переменные параметров для диагностики источника ошибки:
$context.integration.status: Код состояния, возвращенный из интеграции. Для интеграции прокси-сервера AWS Lambda это код состояния, который возвращает ваш код функции Lambda. $context.integrationStatus: для интеграции прокси-сервера Lambda этот параметр представляет собой код состояния, возвращаемый из Lambda, а не из внутренней функции Lambda.$context.integrationLatency: задержка интеграции в мс.
Дополнительные сведения см. в разделе Переменные $context для моделей данных, авторизаторов, шаблонов сопоставления и ведения журнала доступа CloudWatch.
4. Используйте следующий запрос CloudWatch Log Insights, чтобы отфильтровать код состояния «5XX» из журналов доступа:
fields @timestamp, @message, @logStream | статус фильтра, например «5» | сортировать @timestamp desc | display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
5. В консоли CloudWatch просмотрите журналы выполнения шлюза API для интеграции, получившей ошибку.
6. Отслеживайте идентификатор запроса в журналах CloudWatch. Если в интеграции есть тайм-ауты, вы увидите ошибку «Выполнение не удалось из-за тайм-аута» после строки «Тело запроса конечной точки после преобразований:». Дополнительные сведения см. в статье Как найти ошибки REST API шлюза API в журналах CloudWatch?
7. Используйте следующий запрос CloudWatch Log Insights, чтобы отфильтровать ошибку и выбрать группу журналов выполнения шлюза API:
fields @timestamp, @message |отфильтровать @сообщение типа "Выполнение не выполнено из-за ошибки тайм-аута" |sort @timestamp desc
8. Чтобы определить источник ошибки, убедитесь, что была вызвана связанная конечная точка интеграции.
9. Подтвердите, сколько времени потребовалось интеграции для завершения обработки запроса и ответа шлюзу API.
10. Если интеграция не была запущена, выполните повторные попытки API на клиенте. (Ошибка могла возникнуть из-за временного сбоя сети в службе шлюза API.)
Примечание: Убедитесь, что ваше приложение является идемпотентным. Это позволяет избежать конфликтов данных при повторной попытке запроса API.
-или-
Если интеграция была запущена, но по-прежнему возвращает сообщение об ошибке 504, попробуйте сократить время выполнения интеграции.
Примечание: Максимальное время ожидания интеграции API REST шлюза API по умолчанию составляет 29 секунд. Для HTTP API время ожидания может быть настроено на максимальное значение 30 секунд. Пределы максимального значения не могут быть увеличены.
Чтобы сократить время выполнения вашей интеграции
- Убедитесь, что ваша серверная интеграция включает только логику, необходимую шлюзу API для отправки HTTP-ответа клиенту. Рассмотрите возможность переноса любой независимой логики или логики постобработки в другую службу, например Lambda.
- Если сетевые задержки вызывают ошибку 504, реализуйте логику повторных попыток в клиентском приложении.
- Повысьте производительность интеграции с серверной частью, следуя рекомендациям по оптимизации для вашей платформы.
- Рассмотрите возможность настройки асинхронного вызова внутренней функции Lambda.
Информация, связанная с данной
Настройка интеграции REST API
Настройка запроса на интеграцию WebSocket API в шлюзе API
Настройка интеграции для HTTP API
Квоты Amazon API Gateway и важные примечания
Устранение ошибок 504 из REST API шлюза API
Я получаю код состояния ошибки HTTP 504 при вызове REST API с помощью Amazon API Gateway с серверной частью AWS Lambda. Как устранить эту ошибку?
Решение
Когда ваши запросы REST API возвращают код состояния ошибки HTTP 504, вы должны выполнить различные проверки.
Проверить наличие скачков IntegrationLatency
Проверить наличие Всплеск IntegrationLatency в шлюзе API путем проверки продолжительности задержки интеграции. Чтобы увидеть время продолжительности IntegrationLatency , настройте переменную журнала доступа $context.integration.latency для ведения журнала HTTP API.
Дополнительные сведения см. в разделе Настройка ведения журналов API Amazon CloudWatch с помощью консоли API Gateway.
Всплеск IntegrationLatency в шлюзе API указывает, что запрос провел большую часть своего времени в Lambda. Проверьте показатель производительности функции Lambda Duration, чтобы убедиться в этом.
Дополнительные сведения см. в разделе Работа с метриками функции Lambda.
Просмотрите запросы с помощью CloudWatch Logs Insights
Используйте Amazon CloudWatch Logs Insights для просмотра запросов, которые привели к ошибке 504. Чтобы просмотреть запросы, в консоли CloudWatch на панели навигации выберите
parse @message '(*) *' as reqId, message | отфильтровать сообщение типа /Метод завершен со статусом: \d\d\d/ | анализировать сообщение «Метод завершен со статусом: *» как статус | статус фильтра = 504 | сортировать @timestamp desc | предел 20
-или-
поля @timestamp, @message | отфильтровать сообщение типа /Метод завершен со статусом: 504/ | сортировать @timestamp desc | limit 20
Рентгеновские кривые прибора
Если ошибки 504 происходят постоянно, определите, на что лямбда-функция тратит свое время.
Для Python:
из aws_xray_sdk.core import xray_recorder из aws_xray_sdk.core импортировать patch_all patch_all()
Для Node.js:
const AWSXRay = require('aws-xray-sdk-core') const AWS = AWSXRay.captureAWS(require('aws-sdk'))
Примечание. После инструментирования трассировок X-Ray в функции Lambda необходимо создать новый пакет развертывания.
Реализовать повторные попытки API
Когда возникает ошибка 504 и запрос не найден в Lambda, реализуйте повторные попытки API на клиенте. Ошибка могла возникнуть из-за временного сбоя сети в шлюзе API.
Проверьте конфигурацию функции Lambda
Убедитесь, что ваша функция Lambda имеет только логику обработки, специфичную для событий шлюза API. Таким образом, функция Lambda требует меньше времени для выполнения и может не отставать от входящих событий.