From 25d5c654850158a7a74678860694f7e2e9c41152 Mon Sep 17 00:00:00 2001 From: Seoker Wang Date: Fri, 5 May 2017 00:55:05 +0800 Subject: [PATCH 1/4] escape disallowed characters --- lib/main.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/main.js b/lib/main.js index f8262d70..5464be8f 100644 --- a/lib/main.js +++ b/lib/main.js @@ -92,7 +92,9 @@ Lambda.prototype._runHandler = function (handler, event, program, context) { Lambda.prototype._params = function (program, buffer) { var params = { - FunctionName: program.functionName + (program.environment ? '-' + program.environment : ''), + FunctionName: program.functionName + + (program.environment ? '-' + program.environment : '') + + (program.lambdaVersion ? '-' + program.lambdaVersion : ''), Code: { ZipFile: buffer }, @@ -117,9 +119,10 @@ Lambda.prototype._params = function (program, buffer) { Mode: null } }; - if (program.lambdaVersion) { - params.FunctionName += ('-' + program.lambdaVersion); - } + + // Escape characters that is not allowed by AWS Lambda + params.FunctionName = params.FunctionName.replace(/[^a-zA-Z0-9-_]/g, '_'); + if (program.vpcSubnets && program.vpcSecurityGroups) { params.VpcConfig = { 'SubnetIds': program.vpcSubnets.split(','), From 02a01cb7a2875589cb955d87e8794beca14a81e6 Mon Sep 17 00:00:00 2001 From: abetomo Date: Fri, 5 May 2017 13:33:16 +0000 Subject: [PATCH 2/4] Add `FunctionName` test of unacceptable value in AWS --- test/main.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/main.js b/test/main.js index 55c26aa9..85fdc1a8 100644 --- a/test/main.js +++ b/test/main.js @@ -65,6 +65,9 @@ describe('node-lambda', function () { }); describe('_params', function () { + const functionNamePattern = + // http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-FunctionName + /(arn:aws:lambda:)?([a-z]{2}-[a-z]+-\d{1}:)?(\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\$LATEST|[a-zA-Z0-9-_]+))?/; it('appends environment to original functionName', function () { var params = lambda._params(program); assert.equal(params.FunctionName, '___node-lambda-development'); @@ -82,6 +85,13 @@ describe('node-lambda', function () { assert.equal(params.FunctionName, '___node-lambda-development-2015-02-01'); }); + it('appends version to original functionName (value not allowed by AWS)', function () { + program.lambdaVersion = '2015.02.01'; + var params = lambda._params(program); + assert.equal(params.FunctionName, '___node-lambda-development-2015_02_01'); + assert.match(params.FunctionName, functionNamePattern); + }); + it('appends VpcConfig to params when vpc params set', function() { program.vpcSubnets = 'subnet-00000000,subnet-00000001,subnet-00000002'; program.vpcSecurityGroups = 'sg-00000000,sg-00000001,sg-00000002'; From 5de7504939b15e89d6e80e0a3ed37aeda965f049 Mon Sep 17 00:00:00 2001 From: abetomo Date: Fri, 5 May 2017 13:34:06 +0000 Subject: [PATCH 3/4] Add test of whether `FunctionName` is pattern allowed by AWS --- test/main.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/main.js b/test/main.js index 85fdc1a8..16e0fbfe 100644 --- a/test/main.js +++ b/test/main.js @@ -71,18 +71,21 @@ describe('node-lambda', function () { it('appends environment to original functionName', function () { var params = lambda._params(program); assert.equal(params.FunctionName, '___node-lambda-development'); + assert.match(params.FunctionName, functionNamePattern); }); it('appends environment to original functionName (production)', function () { program.environment = 'production'; var params = lambda._params(program); assert.equal(params.FunctionName, '___node-lambda-production'); + assert.match(params.FunctionName, functionNamePattern); }); it('appends version to original functionName', function () { program.lambdaVersion = '2015-02-01'; var params = lambda._params(program); assert.equal(params.FunctionName, '___node-lambda-development-2015-02-01'); + assert.match(params.FunctionName, functionNamePattern); }); it('appends version to original functionName (value not allowed by AWS)', function () { From 0ea9822a345ac729483b8ec0f0085c89ce6521f3 Mon Sep 17 00:00:00 2001 From: abetomo Date: Fri, 5 May 2017 15:41:03 +0000 Subject: [PATCH 4/4] Modify comment's position --- test/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/main.js b/test/main.js index 16e0fbfe..586bd27c 100644 --- a/test/main.js +++ b/test/main.js @@ -65,8 +65,8 @@ describe('node-lambda', function () { }); describe('_params', function () { + // http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-FunctionName const functionNamePattern = - // http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-FunctionName /(arn:aws:lambda:)?([a-z]{2}-[a-z]+-\d{1}:)?(\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\$LATEST|[a-zA-Z0-9-_]+))?/; it('appends environment to original functionName', function () { var params = lambda._params(program);