Как проверить, был ли настроен AWS X-Ray - PullRequest
0 голосов
/ 02 марта 2020

У нас есть AWS Lambda, работающий в Go, и при инициализации запускает следующее для инициализации AWS X-Ray

err := xray.Configure(xray.Config{
  LogLevel:       "info",
  ServiceVersion: "1.2.3",
})

В отдельном хранилище у нас есть хранилище утилит, которое предоставляет библиотеку HTTP для наших внутренних вещей. Это импортируется как субмодуль git ко всем остальным лямбдам. Код выглядит следующим образом:

ctx, subseg := xray.BeginSubsegment(incomingContext, "Outbound HTTP call")
client := xray.Client(&http.Client{Transport: tr})
// further down
client.Do(req)
// finally
subseg.Close(resp)

Это работает, как ожидается, при развертывании на AWS, создавая хороший график.

Проблема в запуске модульных тестов в хранилище утилит. В контексте только этого хранилища X-Ray не был настроен, поэтому при вызове BeginSubsegment я получаю pani c:

panic: failed to begin subsegment named 'Outbound HTTP call': segment cannot be found.

Я хочу изящно обработать случай, когда X- Ray не был настроен, зарегистрируйте его и продолжайте выполнение независимо.

Как я могу обеспечить правильную обработку ошибок при вызове BeginSubsegment, когда он не возвращает объект ошибки?

1 Ответ

0 голосов
/ 04 марта 2020

В случае лямбда-кода этот код выполняется без каких-либо затруднений c, потому что лямбда создает сегмент фасада, а затем ваш код будет создавать подсегменты. В не лямбда-среде вам необходимо сначала создать сегмент, прежде чем создавать подсегмент. Если вы этого не сделаете, то сгенерирует пани c. Теперь, если вы хотите зарегистрировать этот pani c и продолжить выполнение своих модульных тестов, я бы порекомендовал вам установить переменную среды AWS_XRAY_CONTEXT_MISSING в значение LOG_ERROR. Он в основном будет регистрировать вашу пани c и продолжать выполнение ваших модульных тестов.

...