У меня есть приложение expressjs, которое настроено для запуска из функции AWS Lambda.Когда я развертываю это приложение в lambda, отображаются журналы консоли для lambda cloudwatch log (т.е. / aws / lambda / lambda-name), но оно не создает новую CloudWatch LogGroup, как указано в конфигурации.
Если я запускаю лямбда-функцию локально и генерирую логи, она создаст группу логов CloudWatch для локальной среды.
Лямбда-функции подключаются к экземпляру RDS, поэтому они содержатся в VPC.
Lambda была назначена политика CloudWatchFullAccess, поэтому она не должна быть ошибкой разрешений.
Я просмотрел лямбда-логи и не вижу никаких ошибок, связанных с этим.
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 }