From ad877aca14b2b11295603112b8f99a8def42aebb Mon Sep 17 00:00:00 2001 From: go-to-k <24818752+go-to-k@users.noreply.github.com> Date: Wed, 24 Jan 2024 12:53:57 +0900 Subject: [PATCH] fix by the review change test name fix trailing-spaces --- .../aws-cloudwatch-actions/lib/lambda.ts | 8 ++--- .../test/lambda.test.ts | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/aws-cdk-lib/aws-cloudwatch-actions/lib/lambda.ts b/packages/aws-cdk-lib/aws-cloudwatch-actions/lib/lambda.ts index 2d895d33f827b..13312dc51caa9 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch-actions/lib/lambda.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch-actions/lib/lambda.ts @@ -21,12 +21,12 @@ export class LambdaAction implements cloudwatch.IAlarmAction { * * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html */ - bind(_scope: Construct, _alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { - const idPrefix = FeatureFlags.of(_scope).isEnabled(LAMBDA_PERMISSION_LOGICAL_ID_FOR_LAMBDA_ACTION) ? _alarm.node.id : ''; + bind(scope: Construct, alarm: cloudwatch.IAlarm): cloudwatch.AlarmActionConfig { + const idPrefix = FeatureFlags.of(scope).isEnabled(LAMBDA_PERMISSION_LOGICAL_ID_FOR_LAMBDA_ACTION) ? alarm.node.id : ''; this.lambdaFunction.addPermission(`${idPrefix}AlarmPermission`, { - sourceAccount: Stack.of(_scope).account, + sourceAccount: Stack.of(scope).account, action: 'lambda:InvokeFunction', - sourceArn: _alarm.alarmArn, + sourceArn: alarm.alarmArn, principal: new iam.ServicePrincipal('lambda.alarms.cloudwatch.amazonaws.com'), }); diff --git a/packages/aws-cdk-lib/aws-cloudwatch-actions/test/lambda.test.ts b/packages/aws-cdk-lib/aws-cloudwatch-actions/test/lambda.test.ts index 54c227d41619d..027dfcd3f17f6 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch-actions/test/lambda.test.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch-actions/test/lambda.test.ts @@ -144,4 +144,38 @@ def handler(event, context): // THEN Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 2); Template.fromStack(stack).resourceCountIs('AWS::Lambda::Permission', 2); +}); + +test('throws when multiple alarms are created for the same lambda if feature flag is set to false', () => { + // GIVEN + const stack = new Stack(); + stack.node.setContext(LAMBDA_PERMISSION_LOGICAL_ID_FOR_LAMBDA_ACTION, false); // Default, but explicit just in case. + const alarm1 = new cloudwatch.Alarm(stack, 'Alarm1', { + metric: new cloudwatch.Metric({ namespace: 'AWS', metricName: 'Test' }), + evaluationPeriods: 3, + threshold: 100, + }); + const alarm2 = new cloudwatch.Alarm(stack, 'Alarm2', { + metric: new cloudwatch.Metric({ namespace: 'AWS', metricName: 'Test2' }), + evaluationPeriods: 3, + threshold: 100, + }); + + // WHEN + const alarmLambda = new lambda.Function(stack, 'alarmLambda', { + runtime: lambda.Runtime.PYTHON_3_12, + functionName: 'alarmLambda', + code: lambda.Code.fromInline(` +def handler(event, context): + print('event:', event) + print('.............................................') + print('context:', context)`), + handler: 'index.handler', + }); + alarm1.addAlarmAction(new actions.LambdaAction(alarmLambda)); + + // THEN + expect(() => { + alarm2.addAlarmAction(new actions.LambdaAction(alarmLambda)); + }).toThrow(/There is already a Construct with name 'AlarmPermission' in Function \[alarmLambda\]/); }); \ No newline at end of file