Как настроить приложение AWS X-Ray для приложения node.js без промежуточного программного обеспечения Express? - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь интегрировать AWS X-Ray с моим API-интерфейсом nodejs, размещенным на AWS Lambda (без сервера). X-Ray работает так, как предназначено для API, использующего промежуточное программное обеспечение Express, и может видеть следы на консоли AWS. Для асинхронных функций без экспресс-фреймов при интеграции возникают проблемы.

Попытка включения ручного режима, но при обращении - Лямбда не поддерживает ручной режим ошибка.

Упомянутый это - Разработка пользовательских решений для автоматического режима раздел, но не повезло.

Может кто-нибудь помочь мне с этим?

'use strict';
const AWSXRay = require('aws-xray-sdk-core');
const Aws = AWSXRay.captureAWS(require('aws-sdk'))
const capturePostgres = require('aws-xray-sdk-postgres');
const { Client } = capturePostgres(require('pg'));

module.exports.test = async (event, context) => {
         var ns = AWSXRay.getNamespace();
         const segment = newAWSXRay.Segment('Notifications_push');
         ns.enter(ns.createContext());
         AWSXRay.setSegment(segment_push);
         .... };

1 Ответ

0 голосов
/ 12 июля 2019

Итак, когда в Lambda, SDK автоматически создает сегмент-заполнитель (фасад). Более подробное объяснение здесь: https://github.com/aws/aws-xray-sdk-node/issues/148

Все, что вам нужно, это:

const AWSXRay = require('aws-xray-sdk-core');
//lets patch the AWS SDK
const Aws = AWSXRay.captureAWS(require('aws-sdk'));

module.exports.test = async (event, context) => {
  //All capturing will work out of box

  var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
  var params = {...}

  //no need to add code, just regular SQS call
  sqs.sendMessage(params, function(err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      console.log("Success", data.MessageId);
    }
  });

  //if you want to create subsegments manually simply do
  const seg = AWSXRay.getSegment();
  const subseg = seg.addSubsegment('mynewsubsegment');
  subseg.close();
  //no need to close the Lambda segment
};

Дополнительная документация здесь: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-tracing.html

...