Попытка вызвать ошибку 500 в AWS AppSync

#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"
  }
}

  

Вы можете либо создать оповещение об этой пользовательской метрике, либо передать пользовательскую метрику в другое место.