private void AssignListenerToNetworkLoadBalancer(INetworkLoadBalancer networkLoadBalancer, NetworkLoadBalancerListenerOptions listenerOptions) { if (listenerOptions.DefaultAction != null && listenerOptions.DefaultTargetGroups?.Any() == true) { throw new ArgumentException($"The Listener {listenerOptions.Id} can only have DefaultAction or DefaultTargerGroups but not both"); } if (listenerOptions.DefaultAction is null && listenerOptions.DefaultTargetGroups?.Any() == false) { throw new ArgumentException($"The Listener {listenerOptions.Id} must have one DefaultAction or DefaultTargerGroups"); } if (listenerOptions.DefaultAction != null) { networkLoadBalancer.AddListener(listenerOptions.Id, new BaseNetworkListenerProps { DefaultAction = new NetworkListenerAction(new ActionProperty { Type = listenerOptions.DefaultAction.Type }), Port = listenerOptions.Port, Protocol = listenerOptions.Protocol }); } else { var networkTargetGroups = listenerOptions.DefaultTargetGroups.Select(x => LocateNetworkTargetGroup(x, $"The NetworkTargetGroup name {x} in Listener {listenerOptions.Id} does not exist")).ToArray(); networkLoadBalancer.AddListener(listenerOptions.Id, new BaseNetworkListenerProps { DefaultTargetGroups = networkTargetGroups, Port = listenerOptions.Port, Protocol = listenerOptions.Protocol }); } }
public void CreateNetworkLoadBalancers() { if (CdkOptions.NetworkLoadBalancers == null || CdkOptions.NetworkLoadBalancers?.Any() != true) { return; } foreach (var networkLoadBalancerOptions in CdkOptions.NetworkLoadBalancers) { if (networkLoadBalancerOptions.Subnets?.Any() == false && networkLoadBalancerOptions.SubnetMappings?.Any() == false) { throw new ArgumentException($"Subnets or SubnetMappings are missing in NetworkLoadBalancer {networkLoadBalancerOptions.Id}, define one of them."); } if (networkLoadBalancerOptions.Subnets?.Any() == true && networkLoadBalancerOptions.SubnetMappings?.Any() == true) { throw new ArgumentException($"Subnets and SubnetMappings are incompatible in NetworkLoadBalancer {networkLoadBalancerOptions.Id}, define only one of them."); } var vpc = LocateVpc(networkLoadBalancerOptions.VpcId, $"The VPC name {networkLoadBalancerOptions.VpcId} in Network Load Balancer {networkLoadBalancerOptions.LoadBalancerName} does not exist"); INetworkLoadBalancer networkLoadBalancer = default; if (networkLoadBalancerOptions.Subnets?.Any() == true) { var subnets = networkLoadBalancerOptions.Subnets.Select(x => LocateSubnet(x, $"The Subnet name {x} in Network Load Balancer {networkLoadBalancerOptions.LoadBalancerName} does not exist")).ToArray(); networkLoadBalancer = AwsCdkHandler.CreateNetworkLoadBalancer(networkLoadBalancerOptions.Id, networkLoadBalancerOptions.CrossZoneEnabled, networkLoadBalancerOptions.DeletionProtection, networkLoadBalancerOptions.InternetFacing, networkLoadBalancerOptions.LoadBalancerName, vpc, subnets); } else { var subnetMappingProperties = networkLoadBalancerOptions.SubnetMappings.Select(x => CreateSubnetMappingProperty(x.AllocationId, x.IPv6Address, x.PrivateIPv4Address, x.SubnetId)).ToArray(); networkLoadBalancer = AwsCdkHandler.CreateNetworkLoadBalancer(networkLoadBalancerOptions.Id, networkLoadBalancerOptions.CrossZoneEnabled, networkLoadBalancerOptions.DeletionProtection, networkLoadBalancerOptions.InternetFacing, networkLoadBalancerOptions.LoadBalancerName, vpc, subnetMappingProperties: subnetMappingProperties); } networkLoadBalancerOptions.Listeners.ForEach(x => AssignListenerToNetworkLoadBalancer(networkLoadBalancer, x)); StackResources.NetworkLoadBalancers.Add(networkLoadBalancerOptions.Id, networkLoadBalancer); } }