Skip to content

Commit a40c015

Browse files
fix(elasticloadbalancingv2): revert NetworkLoadBalancer properties to getter pattern for JSII compatibility
Revert securityGroups and enforceSecurityGroupInboundRulesOnPrivateLinkTraffic from public readonly properties to private backing fields with getters. JSII5010 error occurred because public readonly properties are considered mutable when implementing an interface with getter-based properties. Using private backing fields with getters maintains true read-only semantics. Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
1 parent fe193c4 commit a40c015

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-load-balancer.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,18 @@ export class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoa
287287
public readonly metrics: INetworkLoadBalancerMetrics;
288288
public readonly ipAddressType?: IpAddressType;
289289
public readonly connections: ec2.Connections;
290-
public securityGroups?: string[];
291-
public readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: string;
290+
private _securityGroups?: string[];
291+
private _enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: string;
292292
private enablePrefixForIpv6SourceNat?: boolean;
293293

294+
public get securityGroups(): string[] | undefined {
295+
return this._securityGroups;
296+
}
297+
298+
public get enforceSecurityGroupInboundRulesOnPrivateLinkTraffic(): string | undefined {
299+
return this._enforceSecurityGroupInboundRulesOnPrivateLinkTraffic;
300+
}
301+
294302
constructor(scope: Construct, id: string, props: NetworkLoadBalancerProps) {
295303
const enforceSgInboundRules = props.enforceSecurityGroupInboundRulesOnPrivateLinkTraffic !== undefined
296304
? (props.enforceSecurityGroupInboundRulesOnPrivateLinkTraffic ? 'on' : 'off')
@@ -353,10 +361,10 @@ export class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoa
353361
if (props.zonalShift !== undefined) {
354362
this.setAttribute('zonal_shift.config.enabled', props.zonalShift ? 'true' : 'false');
355363
}
356-
this.enforceSecurityGroupInboundRulesOnPrivateLinkTraffic = props.enforceSecurityGroupInboundRulesOnPrivateLinkTraffic !== undefined
364+
this._enforceSecurityGroupInboundRulesOnPrivateLinkTraffic = props.enforceSecurityGroupInboundRulesOnPrivateLinkTraffic !== undefined
357365
? (props.enforceSecurityGroupInboundRulesOnPrivateLinkTraffic ? 'on' : 'off')
358366
: undefined;
359-
this.securityGroups = isSecurityGroupsPropertyDefined || this.connections.securityGroups.length
367+
this._securityGroups = isSecurityGroupsPropertyDefined || this.connections.securityGroups.length
360368
? this.connections.securityGroups.map(sg => sg.securityGroupId)
361369
: undefined;
362370
}
@@ -388,7 +396,7 @@ export class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoa
388396
@MethodMetadata()
389397
public addSecurityGroup(securityGroup: ec2.ISecurityGroup) {
390398
this.connections.addSecurityGroup(securityGroup);
391-
this.securityGroups = this.connections.securityGroups.map(sg => sg.securityGroupId);
399+
this._securityGroups = this.connections.securityGroups.map(sg => sg.securityGroupId);
392400
}
393401

394402
/**
@@ -642,10 +650,14 @@ class LookedUpNetworkLoadBalancer extends Resource implements INetworkLoadBalanc
642650
public readonly loadBalancerArn: string;
643651
public readonly vpc?: ec2.IVpc;
644652
public readonly metrics: INetworkLoadBalancerMetrics;
645-
public readonly securityGroups?: string[];
653+
private _securityGroups?: string[];
646654
public readonly ipAddressType?: IpAddressType;
647655
public readonly connections: ec2.Connections;
648656

657+
public get securityGroups(): string[] | undefined {
658+
return this._securityGroups;
659+
}
660+
649661
public get loadBalancerRef(): aws_elasticloadbalancingv2.LoadBalancerReference {
650662
return {
651663
loadBalancerArn: this.loadBalancerArn,
@@ -661,7 +673,7 @@ class LookedUpNetworkLoadBalancer extends Resource implements INetworkLoadBalanc
661673
this.loadBalancerCanonicalHostedZoneId = props.loadBalancerCanonicalHostedZoneId;
662674
this.loadBalancerDnsName = props.loadBalancerDnsName;
663675
this.metrics = new NetworkLoadBalancerMetrics(this, parseLoadBalancerFullName(props.loadBalancerArn));
664-
this.securityGroups = props.securityGroupIds;
676+
this._securityGroups = props.securityGroupIds;
665677
this.connections = new ec2.Connections({
666678
securityGroups: props.securityGroupIds.map(
667679
(securityGroupId, index) => ec2.SecurityGroup.fromLookupById(this, `SecurityGroup-${index}`, securityGroupId),

0 commit comments

Comments
 (0)