diff --git a/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts b/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts index 646cf08f488dc..0953ba81ce872 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts @@ -866,12 +866,15 @@ class LatestVersion extends FunctionBase implements IVersion { public get versionRef(): VersionReference { return { - functionArn: this.functionRef.functionArn, + functionArn: this.functionArn, }; } - public get functionRef() { - return this.lambda.functionRef; + public get functionRef(): FunctionReference { + return { + functionArn: this.functionArn, + functionName: this.functionName, + }; } public get functionArn() { diff --git a/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts b/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts index 34ee5d33c52bd..6bd99e9648b51 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts @@ -657,4 +657,24 @@ describe('alias', () => { Qualifier: aliasName, }); }); + + test('alias\' implementation of IFunctionRef should point to the alias', () => { + // GIVEN + const stack = new Stack(); + const fn = new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('hello()'), + handler: 'index.hello', + runtime: lambda.Runtime.NODEJS_LATEST, + }); + const aliasName = 'prod'; + + // WHEN + const alias = new lambda.Alias(stack, 'Alias', { + aliasName, + version: fn.currentVersion, + }); + + // THEN + expect(alias.functionRef.functionArn).toEqual(alias.functionArn); + }); }); diff --git a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts index 6f8dc3c09255e..8f1ea33be5585 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts @@ -2764,6 +2764,21 @@ describe('function', () => { expect(stack.resolve(version2.functionArn)).toEqual(expectedArn); }); + test('latestVersion functionRef ARN is the version ARN, not the plain ARN', () => { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const fn = new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('hello()'), + handler: 'index.hello', + runtime: lambda.Runtime.NODEJS_LATEST, + }); + + // THEN + expect(fn.latestVersion.functionRef.functionArn).toEqual(fn.latestVersion.functionArn); + }); + test('default function with kmsKeyArn, environmentEncryption passed as props', () => { // GIVEN const stack = new cdk.Stack(); diff --git a/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts b/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts index 5b7743379f6ed..edc8b01465487 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts @@ -229,4 +229,22 @@ describe('lambda version', () => { version.addFunctionUrl(); }).toThrow(/FunctionUrl cannot be used with a Version/); }); + + test('version\'s implementation of IFunctionRef should point to the version', () => { + // GIVEN + const stack = new cdk.Stack(); + const fn = new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('hello()'), + handler: 'index.hello', + runtime: lambda.Runtime.NODEJS_LATEST, + }); + + // WHEN + const ver = new lambda.Version(stack, 'Version', { + lambda: fn, + }); + + // THEN + expect(ver.functionRef.functionArn).toEqual(ver.functionArn); + }); });