AWS:云服务编程

356 阅读1分钟

1. Amazon SQS

1.1 安装aws-sdk

npm install aws-sdk --save

1.2 导入相应包

const aws    = require('aws-sdk');
const sqs    = new aws.SQS({region: process.env.AWS_REGION});

1.3 获取消息长度

sqs.getQueueAttributes(
    {
        QueueUrl: process.env.QUEUE_URL,
        AttributeNames: ['ApproximateNumberOfMessages']
    },
    function (err,data){
        if(err){
            throw err;
        }else{
            const numEvents = data.Attributes.ApproximateNumberOfMessages;
            // TODO success  process
        }

    }
);

1.4 抓取消息

sqs.receiveMessage({
        QueueUrl: process.env.QUEUE_URL,
        MaxNumberOfMessages: 1,
        VisibilityTimeout: 60,
        WaitTimeSeconds: 10
    },
    function (err,data){
        if(err){
            throw err;
        }else if(data && data.Messages){
            // TODO success  process
        }else{
            //TODO null process
        }
    });

1.5 删除消息

sqs.deleteMessage({
    QueueUrl: process.env.QUEUE_URL,
    ReceiptHandle: message.ReceiptHandle
}, function (err, data) {
    if (err) {
        throw err;
    } else {
        // TODO success  process
    }
});

2. AWS CloudWatch

2.1 安装中间件

npm install winston-cloudwatch --save

2.2 核心代码

const cloudwatchConfig = new WinstonCloudWatch({
    logGroupName: process.env.LOG_CLOUDWATCH_GROUP_NAME,//REQUIRED
    logStreamName: process.env.LOG_CLOUDWATCH_IMPORT_STREAM_NAME,//REQUIRED
    awsAccessKeyId: process.env.LOG_CLOUDWATCH_ACCESS_KEY,
    awsSecretKey: process.env.LOG_CLOUDWATCH_SECRET_ACCESS_KEY,
    awsRegion: process.env.LOG_CLOUDWATCH_REGION,
    messageFormatter:(item) =>{
        let meta = item.metadata;
        let message = item.message;
        let label = item.label;
        let level = 'info';
        if(item.level.includes('debug')){
            item = 'debug';
        }
        if(item.level.includes('warn')){
            level = 'warn';
        }
        if(item.level.includes('error')){
            level = 'error';
        }
        if(meta !=undefined && meta != null){
            let out = ``;
            Object.keys(meta).forEach(function (key){
                out += `[` + meta[key] + `]`;
            });
            return `[${label}]` + out + `${level}:${message}`;
        }else{
            return `[${label}]${level}:${message}`;
        }
    }
});
logger.add(cloudwatchConfig);
详细代码
const winston = require('winston');
const AWS = require('aws-sdk');
const WinstonCloudWatch = require('winston-cloudwatch');
AWS.config.update({
    region: process.env.LOG_RIGION_NAME,
});
const consoleTransport = new winston.transports.Console({
    level: 'debug',
    silent: false
});
let logger = winston.createLogger({
        level: 'info',
        exitOnError: false,
        format: winston.format.combine(
            winston.format.label({ label: 'test' }),
            winston.format.timestamp({
                format: 'YYYY-MM-DD HH:mm:ss'
            }),
            winston.format.colorize(),
            winston.format.splat(),
            winston.format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }),
            winston.format.printf((info) => {
                let out = ``;
                if (Object.keys(info.metadata).length > 0) {
                    Object.keys(info.metadata).forEach(function (key){
                        out += `[` + info.metadata[key] + `]`;
                    });
                    return `${info.timestamp}[${info.label}]` + out + `${info.level}:${info.message}`;
                } else {
                    return `${info.timestamp}[${info.label}]${info.level}:${info.message}`;
                }
            }),
        ),
        transports: [consoleTransport]
    });

const cloudwatchConfig = new WinstonCloudWatch({
    logGroupName: process.env.LOG_CLOUDWATCH_GROUP_NAME,//REQUIRED
    logStreamName: process.env.LOG_CLOUDWATCH_IMPORT_STREAM_NAME,//REQUIRED
    awsAccessKeyId: process.env.LOG_CLOUDWATCH_ACCESS_KEY,
    awsSecretKey: process.env.LOG_CLOUDWATCH_SECRET_ACCESS_KEY,
    awsRegion: process.env.LOG_CLOUDWATCH_REGION,
    messageFormatter:(item) =>{
        let meta = item.metadata;
        let message = item.message;
        let label = item.label;
        let level = 'info';
        if(item.level.includes('debug')){
            item = 'debug';
        }
        if(item.level.includes('warn')){
            level = 'warn';
        }
        if(item.level.includes('error')){
            level = 'error';
        }
        if(meta !=undefined && meta != null){
            let out = ``;
            Object.keys(meta).forEach(function (key){
                out += `[` + meta[key] + `]`;
            });
            return `[${label}]` + out + `${level}:${message}`;
        }else{
            return `[${label}]${level}:${message}`;
        }
    }
});
logger.add(cloudwatchConfig);
module.exports = logger;