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(','), diff --git a/test/main.js b/test/main.js index 55c26aa9..586bd27c 100644 --- a/test/main.js +++ b/test/main.js @@ -65,21 +65,34 @@ describe('node-lambda', function () { }); describe('_params', function () { + // http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html#SSS-CreateFunction-request-FunctionName + const functionNamePattern = + /(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'); + 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 () { + 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() {