From 43a3ffd2ea8ad0e13c7c44658234e5d5fb871ebe Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Wed, 6 Feb 2019 16:11:53 +0100 Subject: [PATCH 1/2] fix(lambda): add a synth-time check for environment variables In some regions Lambda environment variables don't work. Add a check for that so that there is quicker feedback on this missing feature. --- packages/@aws-cdk/aws-lambda/lib/function.ts | 6 ++++++ .../@aws-cdk/aws-lambda/test/test.lambda.ts | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/packages/@aws-cdk/aws-lambda/lib/function.ts b/packages/@aws-cdk/aws-lambda/lib/function.ts index 9d5188a4d726a..324cd197432f2 100644 --- a/packages/@aws-cdk/aws-lambda/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda/lib/function.ts @@ -347,6 +347,12 @@ export class Function extends FunctionBase { this.role.addToPolicy(statement); } + const stack = cdk.Stack.find(this); + const isChina = stack.env.region && stack.env.region.startsWith('cn-'); + if (isChina && props.environment && Object.keys(props.environment).length > 0) { + throw new Error(`Environment variables are not supported in this region (${stack.env.region}); please use tags or SSM parameters instead`); + } + const resource = new CfnFunction(this, 'Resource', { functionName: props.functionName, description: props.description, diff --git a/packages/@aws-cdk/aws-lambda/test/test.lambda.ts b/packages/@aws-cdk/aws-lambda/test/test.lambda.ts index 83350ce1aad4d..6bcd2a1f93651 100644 --- a/packages/@aws-cdk/aws-lambda/test/test.lambda.ts +++ b/packages/@aws-cdk/aws-lambda/test/test.lambda.ts @@ -1178,6 +1178,25 @@ export = { test.done(); }, + 'environment variables are prohibited in China'(test: Test) { + // GIVEN + const stack = new cdk.Stack(undefined, undefined, { env: { region: 'cn-north-1' }}); + + // WHEN + test.throws(() => { + new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.NodeJS, + environment: { + SOME: 'Variable' + } + }); + }, /Environment variables are not supported/); + + test.done(); + }, + 'support reserved concurrent executions'(test: Test) { const stack = new cdk.Stack(); From 42db2432dec0377b67659e40fdebac6f2234b110 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 8 Feb 2019 10:46:23 +0100 Subject: [PATCH 2/2] Review comments --- packages/@aws-cdk/aws-lambda/lib/function.ts | 2 +- .../@aws-cdk/aws-lambda/test/test.lambda.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-lambda/lib/function.ts b/packages/@aws-cdk/aws-lambda/lib/function.ts index 324cd197432f2..590fca681d4a6 100644 --- a/packages/@aws-cdk/aws-lambda/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda/lib/function.ts @@ -350,7 +350,7 @@ export class Function extends FunctionBase { const stack = cdk.Stack.find(this); const isChina = stack.env.region && stack.env.region.startsWith('cn-'); if (isChina && props.environment && Object.keys(props.environment).length > 0) { - throw new Error(`Environment variables are not supported in this region (${stack.env.region}); please use tags or SSM parameters instead`); + throw new Error(`Environment variables are not supported in this region (${stack.env.region}); consider using tags or SSM parameters instead`); } const resource = new CfnFunction(this, 'Resource', { diff --git a/packages/@aws-cdk/aws-lambda/test/test.lambda.ts b/packages/@aws-cdk/aws-lambda/test/test.lambda.ts index 6bcd2a1f93651..030a44d15a78c 100644 --- a/packages/@aws-cdk/aws-lambda/test/test.lambda.ts +++ b/packages/@aws-cdk/aws-lambda/test/test.lambda.ts @@ -1197,6 +1197,33 @@ export = { test.done(); }, + 'environment variables work in an unspecified region'(test: Test) { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.NodeJS, + environment: { + SOME: 'Variable' + } + }); + + // THEN + expect(stack).to(haveResource('AWS::Lambda::Function', { + Environment: { + Variables: { + SOME: "Variable" + } + } + })); + + test.done(); + + }, + 'support reserved concurrent executions'(test: Test) { const stack = new cdk.Stack();