AMAZON and serverless(5)Lambda Invoke and Log

AMAZON and serverless(5)Lambda Invoke and Log

Logging
There is a logging package called debug
> npm info debug version
3.1.0

https://github.com/visionmedia/debug#readme

import debug from 'debug';
const logger = debug('acknowledgehandler');
const record = JSON.parse(parameters);
logger(record);
logger('Meeting creation succeeded');

Then we can configure the DEBUG=* to show all the logging, or configure DEBUG=acknowldegehandler to show only some logging.

Lambda Directly Invoke
import { APIGatewayEvent, Callback, Context } from 'aws-lambda';
const aws_region = process.env.AWS_REGION;
const lambda = new AWS.Lambda({ region: aws_region });

export async function invokeLambda(functionName: string, request: any) {
const params = {
FunctionName: functionName,
InvocationType: 'RequestResponse',
LogType: 'None',
Payload: JSON.stringify(request)
};

try {
console.log('invoking lambda: ', params);
const response = await lambda.invoke(params).promise();
if(!response) {
console.error(`failure getting result from ${functionName} lambda`)
throw new Error(`failure getting result from ${functionName} lambda`);
}
console.log('lambda response: ', response);
const responseObj = JSON.parse(response.Payload as string);
const statusCode = idx(responseObj, _ => _.statusCode);
const statusMessage = idx(responseObj, _ => _.statusMessage);
if(statusCode < 200 || 202 < statusCode) {
throw new Error(`Bad statusCode returnd by ${functionName} lambda: ${statusCode} - ${statusMessage}`);
}
return idx(responseObj, _ => _.body) || {};
} catch(err) {
throw err;
}
}

export async function getExtension() {
return await invokeLambda(get_extension_lambda, {});
}

TypeScript Validation
> npm info joi version
13.2.0

https://github.com/hapijs/joi

import Joi = require('joi’);

const meetingCreateSchema = Joi.object().keys({
displayName: Joi.string()
.min(1)
.optional(),
description: Joi.string()
.min(1)
.optional(),
pin: Joi.number()
.min(1)
.optional(),
moderatorExtension: Joi.number()
.min(1)
.optional(),
ownerExtension: Joi.number()
.min(1)
.optional(),
lecturerExtension: Joi.number()
.min(1)
.optional(),
tempMeeting: Joi.boolean()
.optional(),
hiddenMeeting: Joi.boolean()
.optional()
});

const meetingUpdateSchema = Joi.object().keys({
uuid: Joi.string()
.uuid({version: ['uuidv4']})
.required(),
displayName: Joi.string()
.min(1)
.optional(),
description: Joi.string()
.min(1)
.optional(),
pin: Joi.number()
.min(1)
.optional(),
moderatorExtension: Joi.number()
.min(1)
.optional(),
ownerExtension: Joi.number()
.min(1)
.optional(),
lecturerExtension: Joi.number()
.min(1)
.optional(),
tempMeeting: Joi.boolean()
.optional(),
hiddenMeeting: Joi.boolean()
.optional()
});

const meetingDeleteSchema = Joi.object().keys({
uuid: Joi.string()
.uuid({version: ['uuidv4']})
.required(),
});

const validationMapByOperation = {
'/meeting/create': meetingCreateSchema,
'/meeting/update': meetingUpdateSchema,
'/meeting/delete': meetingDeleteSchema
};

const schema = validationMapByOperation[uriSuffix];
const validationResult = Joi.validate(parameters, schema, {convert: true, allowUnknown: false});
if (validationResult.error) {
console.log('validation error: ', validationResult );
const errorMessage = idx(validationResult, _ => _.error.details[0].message); // returns the first validation error
return errorResponse(cb, 401, `${uriSuffix} : ${errorMessage}`);
}

References:
https://github.com/visionmedia/debug#readme
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值