Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/@aws-cdk/aws-lambda/lib/code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,8 @@ export class AssetCode extends Code {
path: this.path,
...this.options,
});
} else if (cdk.Stack.of(this.asset) !== cdk.Stack.of(scope)) {
throw new Error(`Asset is already associated with another stack '${cdk.Stack.of(this.asset).stackName}'.`);
}

if (!this.asset.isZipArchive) {
Expand Down
20 changes: 20 additions & 0 deletions packages/@aws-cdk/aws-lambda/test/code.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,26 @@ describe('code', () => {
},
}, ResourcePart.CompleteDefinition);
});

test('fails if asset is bound with a second stack', () => {
// GIVEN
const asset = lambda.Code.fromAsset(path.join(__dirname, 'my-lambda-handler'));

const app = new cdk.App();
const stack1 = new cdk.Stack(app, 'Stack1');
new lambda.Function(stack1, 'Func', {
code: asset,
runtime: lambda.Runtime.NODEJS_10_X,
handler: 'foom',
});

const stack2 = new cdk.Stack(app, 'Stack2');
expect(() => new lambda.Function(stack2, 'Func', {
code: asset,
runtime: lambda.Runtime.NODEJS_10_X,
handler: 'foom',
})).toThrow(/already associated/);
});
});

describe('lambda.Code.fromCfnParameters', () => {
Expand Down