aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
2 lines (1 loc) • 9.23 kB
JavaScript
"use strict";var __decorate=exports&&exports.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r},_a,_b,_c;Object.defineProperty(exports,"__esModule",{value:!0}),exports.ListenerPort=exports.InstanceTarget=exports.LoadBalancer=exports.LoadBalancingProtocol=void 0;var jsiiDeprecationWarnings=()=>{var tmp=require("../../.warnings.jsii.js");return jsiiDeprecationWarnings=()=>tmp,tmp};const JSII_RTTI_SYMBOL_1=Symbol.for("jsii.rtti");var elasticloadbalancing_generated_1=()=>{var tmp=require("./elasticloadbalancing.generated");return elasticloadbalancing_generated_1=()=>tmp,tmp},aws_ec2_1=()=>{var tmp=require("../../aws-ec2");return aws_ec2_1=()=>tmp,tmp},core_1=()=>{var tmp=require("../../core");return core_1=()=>tmp,tmp},errors_1=()=>{var tmp=require("../../core/lib/errors");return errors_1=()=>tmp,tmp},metadata_resource_1=()=>{var tmp=require("../../core/lib/metadata-resource");return metadata_resource_1=()=>tmp,tmp},prop_injectable_1=()=>{var tmp=require("../../core/lib/prop-injectable");return prop_injectable_1=()=>tmp,tmp},LoadBalancingProtocol;(function(LoadBalancingProtocol2){LoadBalancingProtocol2.TCP="tcp",LoadBalancingProtocol2.SSL="ssl",LoadBalancingProtocol2.HTTP="http",LoadBalancingProtocol2.HTTPS="https"})(LoadBalancingProtocol||(exports.LoadBalancingProtocol=LoadBalancingProtocol={}));let LoadBalancer=class LoadBalancer2 extends core_1().Resource{constructor(scope,id,props){super(scope,id),this.listenerPorts=[],this.listeners=[],this.instancePorts=[],this.targets=[],this.instanceIds=[];try{jsiiDeprecationWarnings().aws_cdk_lib_aws_elasticloadbalancing_LoadBalancerProps(props)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,LoadBalancer2),error}(0,metadata_resource_1().addConstructMetadata)(this,props),this.securityGroup=new(aws_ec2_1()).SecurityGroup(this,"SecurityGroup",{vpc:props.vpc,allowAllOutbound:!1}),this.connections=new(aws_ec2_1()).Connections({securityGroups:[this.securityGroup]});const selectedSubnets=loadBalancerSubnets(props);this.elb=new(elasticloadbalancing_generated_1()).CfnLoadBalancer(this,"Resource",{securityGroups:[this.securityGroup.securityGroupId],subnets:selectedSubnets.subnetIds,listeners:core_1().Lazy.any({produce:()=>this.listeners}),instances:core_1().Lazy.list({produce:()=>this.instanceIds},{omitEmpty:!0}),scheme:props.internetFacing?"internet-facing":"internal",healthCheck:props.healthCheck&&healthCheckToJSON(props.healthCheck),crossZone:props.crossZone??!0}),props.internetFacing&&this.elb.node.addDependency(selectedSubnets.internetConnectivityEstablished),props.accessLoggingPolicy!==void 0&&(this.elb.accessLoggingPolicy=props.accessLoggingPolicy),ifUndefined(props.listeners,[]).forEach(b=>this.addListener(b)),ifUndefined(props.targets,[]).forEach(t=>this.addTarget(t))}addListener(listener){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_elasticloadbalancing_LoadBalancerListener(listener)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addListener),error}if(listener.sslCertificateArn&&listener.sslCertificateId)throw new(errors_1()).ValidationError('"sslCertificateId" is deprecated, please use "sslCertificateArn" only.',this);const protocol=ifUndefinedLazy(listener.externalProtocol,()=>wellKnownProtocol(this,listener.externalPort)),instancePort=listener.internalPort||listener.externalPort,sslCertificateArn=listener.sslCertificateArn||listener.sslCertificateId,instanceProtocol=ifUndefined(listener.internalProtocol,ifUndefined(tryWellKnownProtocol(instancePort),isHttpProtocol(protocol)?LoadBalancingProtocol.HTTP:LoadBalancingProtocol.TCP));this.listeners.push({loadBalancerPort:listener.externalPort.toString(),protocol,instancePort:instancePort.toString(),instanceProtocol,sslCertificateId:sslCertificateArn,policyNames:listener.policyNames});const port=new ListenerPort(this.securityGroup,aws_ec2_1().Port.tcp(listener.externalPort));return ifUndefined(listener.allowConnectionsFrom,[aws_ec2_1().Peer.anyIpv4()]).forEach(peer=>{port.connections.allowDefaultPortFrom(peer,`Default rule allow on ${listener.externalPort}`)}),this.newInstancePort(instancePort),this.listenerPorts.push(port),port}addTarget(target){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_elasticloadbalancing_ILoadBalancerTarget(target)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.addTarget),error}target.attachToClassicLB(this),this.newTarget(target)}get loadBalancerName(){return this.elb.ref}get loadBalancerCanonicalHostedZoneNameId(){return this.elb.attrCanonicalHostedZoneNameId}get loadBalancerCanonicalHostedZoneName(){return this.elb.attrCanonicalHostedZoneName}get loadBalancerDnsName(){return this.elb.attrDnsName}get loadBalancerSourceSecurityGroupGroupName(){return this.elb.attrSourceSecurityGroupGroupName}get loadBalancerSourceSecurityGroupOwnerAlias(){return this.elb.attrSourceSecurityGroupOwnerAlias}newInstancePort(instancePort){this.targets.forEach(t=>this.allowTargetConnection(instancePort,t)),this.instancePorts.push(instancePort)}newTarget(target){this.instancePorts.forEach(p=>this.allowTargetConnection(p,target)),this.targets.push(target)}allowTargetConnection(instancePort,target){this.connections.allowTo(target,aws_ec2_1().Port.tcp(instancePort),`Port ${instancePort} LB to fleet`)}_addInstanceId(instanceId){this.instanceIds.push(instanceId)}};exports.LoadBalancer=LoadBalancer,_a=JSII_RTTI_SYMBOL_1,LoadBalancer[_a]={fqn:"aws-cdk-lib.aws_elasticloadbalancing.LoadBalancer",version:"2.202.0"},LoadBalancer.PROPERTY_INJECTION_ID="aws-cdk-lib.aws-elasticloadbalancing.LoadBalancer",__decorate([(0,metadata_resource_1().MethodMetadata)()],LoadBalancer.prototype,"addListener",null),__decorate([(0,metadata_resource_1().MethodMetadata)()],LoadBalancer.prototype,"addTarget",null),exports.LoadBalancer=LoadBalancer=__decorate([prop_injectable_1().propertyInjectable],LoadBalancer);class InstanceTarget{constructor(instance){this.instance=instance;try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_Instance(instance)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,InstanceTarget),error}this.connections=instance.connections}attachToClassicLB(loadBalancer){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_elasticloadbalancing_LoadBalancer(loadBalancer)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,this.attachToClassicLB),error}loadBalancer._addInstanceId(this.instance.instanceId)}}exports.InstanceTarget=InstanceTarget,_b=JSII_RTTI_SYMBOL_1,InstanceTarget[_b]={fqn:"aws-cdk-lib.aws_elasticloadbalancing.InstanceTarget",version:"2.202.0"};class ListenerPort{constructor(securityGroup,defaultPort){try{jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_ISecurityGroup(securityGroup),jsiiDeprecationWarnings().aws_cdk_lib_aws_ec2_Port(defaultPort)}catch(error){throw process.env.JSII_DEBUG!=="1"&&error.name==="DeprecationError"&&Error.captureStackTrace(error,ListenerPort),error}this.connections=new(aws_ec2_1()).Connections({securityGroups:[securityGroup],defaultPort})}}exports.ListenerPort=ListenerPort,_c=JSII_RTTI_SYMBOL_1,ListenerPort[_c]={fqn:"aws-cdk-lib.aws_elasticloadbalancing.ListenerPort",version:"2.202.0"};function wellKnownProtocol(scope,port){const proto=tryWellKnownProtocol(port);if(!proto)throw new(errors_1()).ValidationError(`Please supply protocol to go with port ${port}`,scope);return proto}function tryWellKnownProtocol(port){if(port===80)return LoadBalancingProtocol.HTTP;if(port===443)return LoadBalancingProtocol.HTTPS}function isHttpProtocol(proto){return proto===LoadBalancingProtocol.HTTPS||proto===LoadBalancingProtocol.HTTP}function ifUndefined(x,def){return x??def}function ifUndefinedLazy(x,def){return x??def()}function healthCheckToJSON(healthCheck){const protocol=ifUndefined(healthCheck.protocol,ifUndefined(tryWellKnownProtocol(healthCheck.port),LoadBalancingProtocol.TCP)),path=protocol===LoadBalancingProtocol.HTTP||protocol===LoadBalancingProtocol.HTTPS?ifUndefined(healthCheck.path,"/"):"",target=`${protocol.toUpperCase()}:${healthCheck.port}${path}`;return{healthyThreshold:ifUndefined(healthCheck.healthyThreshold,2).toString(),interval:(healthCheck.interval||core_1().Duration.seconds(30)).toSeconds().toString(),target,timeout:(healthCheck.timeout||core_1().Duration.seconds(5)).toSeconds().toString(),unhealthyThreshold:ifUndefined(healthCheck.unhealthyThreshold,5).toString()}}function loadBalancerSubnets(props){return props.subnetSelection!==void 0?props.vpc.selectSubnets(props.subnetSelection):props.internetFacing?props.vpc.selectSubnets({subnetType:aws_ec2_1().SubnetType.PUBLIC}):props.vpc.selectSubnets({subnetType:aws_ec2_1().SubnetType.PRIVATE_WITH_EGRESS})}