Транспортный сервер Winston CloudWatch не создает журналы при работе на Lambda

У меня есть приложение expressjs, которое настроено для запуска из функции AWS Lambda. Когда я развертываю это приложение в лямбда-выражении, отображаются журналы консоли для журнала лямбда-облачных наблюдений (т.е. / aws / lambda / lambda-name), но оно не создает новую группу CloudWatch LogGroup, как указано в конфигурации.

Если я запустил лямбда-функцию локально и сгенерирую журналы, она создаст группу журналов CloudWatch для локальной среды.

Лямбда-функции подключаются к экземпляру RDS, поэтому они содержатся в VPC.

Лямбде назначена политика CloudWatchFullAccess, поэтому это не должно быть ошибкой разрешений.

Я просмотрел журналы Lambda и не заметил никаких ошибок, связанных с этим.

const env = process.env.NODE_ENV || 'local'
const config = require('../../config/env.json')[env]
const winston = require('winston')
const WinstonCloudwatch = require('winston-cloudwatch')
const crypto = require('crypto')

let startTime = new Date().toISOString()
const logger = winston.createLogger({
  exitOnError: false,
  level: 'info',
  transports: [
    new winston.transports.Console({
      json: true,
      colorize: true,
      level: 'info'
    }),
    new WinstonCloudwatch({
      awsAccessKeyId: config.aws.accessKeyId,
      awsSecretKey: config.aws.secretAccessKey,
      logGroupName: 'my-api-' + env,
      logStreamName: function () {
        // Spread log streams across dates as the server stays up
        let date = new Date().toISOString().split('T')[0]
        return 'my-requests-' + date + '-' +
          crypto.createHash('md5')
            .update(startTime)
            .digest('hex')
      },
      awsRegion: 'us-east-1',
      jsonMessage: true
    })
  ]
})

const winstonStream = {
  write: (message, encoding) => {
    // use the 'info' log level so the output will be picked up by both transports
    logger.info(message)
  }
}

module.exports.logger = logger
module.exports.winstonStream = winstonStream


Затем в моем экспресс-приложении.

const morgan = require('morgan')
const { winstonStream } = require('./providers/loggers')
app.use(morgan('combined', { stream: winstonStream }

person James Parker    schedule 20.09.2019    source источник


Ответы (2)


Подтверждение того, что проблема связана с тем, что лямбда-функция находится в VPC и не предоставляет общий доступ к Интернету через подсети, таблицы маршрутов, NAT и Интернет-шлюзы, как описано в этом сообщении. https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a

person James Parker    schedule 20.09.2019

Я считаю, что для доступа к внешним интернет-сервисам вам понадобится то, что вы описали. Но для доступа к сервису AWS за пределами VPC вы можете создать конечную точку VPC.

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html

person David Nickerson    schedule 20.09.2019