#amazon-web-services #aws-appsync
#amazon-веб-сервисы #aws-appsync
Вопрос:
Новое в AWS AppSync (и GraphQL в целом). Мы настраиваем ведение журнала из AppSync -> CloudWatch -> Kinesis -> Splunk и пытаемся вызвать ошибку, которая выдаст 500 из Appsync и, надеюсь, даст нам несколько журналов, на которые мы сможем записать предупреждение о сбоях.
Кто-нибудь знает, как вызвать ошибку 500 в AppSync? В настоящее время наш резервный источник данных является эластичным, вмешательство в шаблоны просто возвращает 200 с заполненным массивом ошибок, так что это не помогает создать журнал ошибок.
Комментарии:
1. У меня почти такая же проблема, я хочу настроить оповещение CloudWatch об ошибках внутреннего преобразователя GraphQL… но 5xx и 4xx не имеют отношения к делу, поскольку ошибка внутреннего преобразователя «перехвачена» реализацией GraphQL в «чистую» ошибку. Кто-нибудь знает, как настроить правильные журналы ошибок (доступные для CloudWatch alarm)
2. @YvesM. Я сталкиваюсь с той же проблемой. Вы нашли решение, пожалуйста?
Ответ №1:
AWS AppSync — это управляемый сервис GraphQL, и он полностью соответствует спецификации GraphQL. Согласно спецификации GraphQL, ответ может содержать как частичный ответ, так и обнаруженные ошибки в случае, если ошибка поля произошла в поле, которое было заменено на null, как описано здесь .
В вашем случае, если вы пытаетесь вызвать ошибку либо из источника данных, либо из шаблона сопоставления, это приведет к нулевому разрешению этого поля с заполненным полем «ошибки» в ответе.
Если у вас установлена настройка (AppSync -> CloudWatch -> Kinesis -> Splunk) и вы пытаетесь загрузить некоторые данные в Splunk для тестирования, вы можете попробовать следующий способ ее тестирования:
-
Включите журналы на странице настроек в консоли AppSync. Вам следует либо выбрать «ОШИБКА», либо «ВСЕ» в качестве параметра на уровне поля.
-
В вашем шаблоне сопоставления в любом из ваших преобразователей вы можете либо ввести синтаксическую ошибку, либо заставить ваш источник данных вызвать исключение.
-
Затем AppSync зарегистрирует разрешенные шаблоны сопоставления запроса / ответа для каждого поля, где будет содержаться полезная нагрузка JSON
{ "fieldInError": true }
для полей, разрешенных по ошибке. -
Вы можете использовать это как шаблон фильтра для загрузки в Splunk через Kinesis stream.
Ответ №2:
Это достигается с помощью комбинации пользовательских показателей Cloudwatch и фильтров группы журналов.
Примером конфигурации в terraform является:
resource "aws_cloudwatch_log_metric_filter" "appsync_errors" {
name = "Some Name"
pattern = "{ $.fieldInError IS TRUE }"
log_group_name = aws_cloudwatch_log_group.your.name
metric_transformation {
name = "your_metric_name"
namespace = "your_namespace"
value = "1"
default_value = "0"
unit = "Count"
}
}
Вы можете либо создать оповещение об этой пользовательской метрике, либо передать пользовательскую метрику в другое место.