List of usage examples for com.amazonaws.services.elasticloadbalancing.model CreateLoadBalancerRequest CreateLoadBalancerRequest
public CreateLoadBalancerRequest()
From source file:AwsAuto.java
License:Open Source License
public static void main(String[] args) throws Exception { // initialize/determine parameters String instanceType = "m3.medium"; String loadGeneratorAmi = "ami-8ac4e9e0"; String dataCenterAmi = "ami-349fbb5e"; String bidPrice = "0.1"; String loadGeneratorDns = null; // load generator DNS String dashboardUrl = null; // the URL where we check our performance String testId = null;/*from w ww. j a v a 2s .c om*/ // create project tag for instances ArrayList<com.amazonaws.services.ec2.model.Tag> loadGeneratorTags = new ArrayList<>(); com.amazonaws.services.ec2.model.Tag loadGeneratorTag = new com.amazonaws.services.ec2.model.Tag("Project", "2.1"); loadGeneratorTags.add(loadGeneratorTag); // create project tag for auto-scaling com.amazonaws.services.autoscaling.model.Tag asgTag = new com.amazonaws.services.autoscaling.model.Tag(); asgTag.setKey("Project"); asgTag.setValue("2.1"); // create project tag for load balancer ArrayList<com.amazonaws.services.elasticloadbalancing.model.Tag> loadBalancerTags = new ArrayList<>(); com.amazonaws.services.elasticloadbalancing.model.Tag loadBalancerTag = new com.amazonaws.services.elasticloadbalancing.model.Tag(); loadBalancerTag.setKey("Project"); loadBalancerTag.setValue("2.1"); loadBalancerTags.add(loadBalancerTag); /** * ========================================================================= * ================= Create security groups * ========================================================================= * ================= */ String loadGeneratorSecurityName = "LoadGeneratorSGP2"; String allPurposeSecurityName = "AllPurposeSGP2"; SecurityGroup loadGeneratorSecurityGroup = new SecurityGroup(loadGeneratorSecurityName); SecurityGroup allPurposeSecurityGroup = new SecurityGroup(allPurposeSecurityName); /** * ========================================================================= * ================= Grant permission and credentials * ========================================================================= * ================= */ AWSCredentials credentials = null; try { credentials = new ProfileCredentialsProvider("School").getCredentials(); } catch (Exception e) { throw new AmazonClientException("Cannot load the credentials from the credential profiles file. " + "Please make sure that your credentials file is at the correct " + "location (C:\\Users\\Jiabei\\.aws\\credentials), and is in valid format.", e); } // set region AmazonEC2 ec2 = new AmazonEC2Client(credentials); Region usEast1 = Region.getRegion(Regions.US_EAST_1); ec2.setRegion(usEast1); /** * ========================================================================= * ================= Create a load generator and submit password * ========================================================================= * ================= */ Requests requestsLg = new Requests(instanceType, loadGeneratorAmi, bidPrice, loadGeneratorSecurityName, loadGeneratorTags); loadGeneratorDns = requestsLg.submitRequests(); String submissionUrl = "http://" + loadGeneratorDns + "/password?passwd=0WSb4ufhYI7SkxfLWnnIWU0MC1NdcNKT&andrewId=jiabeip"; sendGET(submissionUrl); try { /** * ======================================================================= * =================== Create a load balancer * ======================================================================= * =================== */ String loadBalancerDns = null; String loadBalancerName = "LoadBalancerProj2"; String healthCheckPage = "/heartbeat?lg=" + loadGeneratorDns; AmazonElasticLoadBalancingClient loadBalancerClient = new AmazonElasticLoadBalancingClient(credentials); // configure a request CreateLoadBalancerRequest loadBalancerRequest = new CreateLoadBalancerRequest() .withAvailabilityZones("us-east-1b").withListeners(new Listener("HTTP", 80, 80)) .withLoadBalancerName(loadBalancerName).withSecurityGroups(allPurposeSecurityGroup.getGroupId()) .withTags(loadBalancerTags); CreateLoadBalancerResult loadBalancerResult = loadBalancerClient .createLoadBalancer(loadBalancerRequest); loadBalancerDns = loadBalancerResult.getDNSName(); // configure health check setting HealthCheck loadBalancerHealthCheck = new HealthCheck().withTarget("HTTP:80" + healthCheckPage) .withTimeout(5).withInterval(30).withUnhealthyThreshold(2).withHealthyThreshold(10); ConfigureHealthCheckRequest healthCheckRequest = new ConfigureHealthCheckRequest() .withLoadBalancerName(loadBalancerName).withHealthCheck(loadBalancerHealthCheck); // attach health check setting to load balancer ConfigureHealthCheckResult healthCheckResult = loadBalancerClient .configureHealthCheck(healthCheckRequest); System.out.println("Load balancer created!\nDNS: " + loadBalancerDns); /** * ======================================================================= * =================== Create launch configuration * ======================================================================= * =================== */ String launchConfigName = "LaunchConfigProj2"; String autoScalingGroupName = "AutoScalingGroupProj2"; AmazonAutoScalingClient autoScalingGroupClient = new AmazonAutoScalingClient(credentials); AmazonCloudWatchClient cloudWatchClient = new AmazonCloudWatchClient(credentials); System.out.println("Creating launch configuration..."); // configure the request CreateLaunchConfigurationRequest launchConfigRequest = new CreateLaunchConfigurationRequest() .withImageId(dataCenterAmi).withInstanceType(instanceType) .withLaunchConfigurationName(launchConfigName) .withSecurityGroups(allPurposeSecurityGroup.getGroupId()).withSpotPrice(bidPrice) .withKeyName("primary"); // enable detail monitoring InstanceMonitoring monitor = new InstanceMonitoring(); monitor.setEnabled(true); launchConfigRequest.setInstanceMonitoring(monitor); // attach the configuration to the ASG client autoScalingGroupClient.createLaunchConfiguration(launchConfigRequest); System.out.println("Configuration complete!\nCreating auto-scaling group..."); /** * ======================================================================= * =================== Create auto-scaling group * ======================================================================= * =================== */ // configure ASG request CreateAutoScalingGroupRequest asgRequest = new CreateAutoScalingGroupRequest() .withAutoScalingGroupName(autoScalingGroupName).withAvailabilityZones("us-east-1b") .withLoadBalancerNames(loadBalancerName).withNewInstancesProtectedFromScaleIn(false) .withTags(asgTag).withDefaultCooldown(120).withMinSize(1).withMaxSize(8).withDesiredCapacity(1) // Start // from // one .withHealthCheckGracePeriod(120).withHealthCheckType("ELB") .withLaunchConfigurationName(launchConfigName); // attach group configuration to ASG client autoScalingGroupClient.createAutoScalingGroup(asgRequest); /** * ======================================================================= * =================== Create scaling up policy for ASG * ======================================================================= * =================== */ StepAdjustment upRule1 = new StepAdjustment().withMetricIntervalLowerBound(0.0) .withMetricIntervalUpperBound(25.0).withScalingAdjustment(1); StepAdjustment upRule2 = new StepAdjustment().withMetricIntervalLowerBound(25.0) .withMetricIntervalUpperBound(30.0).withScalingAdjustment(2); StepAdjustment upRule3 = new StepAdjustment().withMetricIntervalLowerBound(30.0) .withMetricIntervalUpperBound(null).withScalingAdjustment(3); String upPolicyName = "Scaling Up"; PutScalingPolicyRequest scalingUpPolicy = new PutScalingPolicyRequest() .withAdjustmentType("ChangeInCapacity").withPolicyType("StepScaling") .withStepAdjustments(upRule1, upRule2, upRule3).withAutoScalingGroupName(autoScalingGroupName) .withPolicyName(upPolicyName).withEstimatedInstanceWarmup(120); StepAdjustment downRule1 = new StepAdjustment().withMetricIntervalLowerBound(-20.0) .withMetricIntervalUpperBound(-0.0).withScalingAdjustment(-1); StepAdjustment downRule2 = new StepAdjustment().withMetricIntervalLowerBound(-30.0) .withMetricIntervalUpperBound(-20.0).withScalingAdjustment(-2); StepAdjustment downRule3 = new StepAdjustment().withMetricIntervalLowerBound(null) .withMetricIntervalUpperBound(-30.0).withScalingAdjustment(-3); String downPolicyName = "Scaling Down"; PutScalingPolicyRequest scalingDownPolicy = new PutScalingPolicyRequest().withAdjustmentType("") .withPolicyType("ChangeInCapacity").withStepAdjustments(downRule1, downRule2, downRule3) .withAutoScalingGroupName(autoScalingGroupName).withPolicyName(downPolicyName) .withEstimatedInstanceWarmup(60); // attach policies to ASG and get ARN for setting alarm PutScalingPolicyResult scaleUpResult = autoScalingGroupClient.putScalingPolicy(scalingUpPolicy); String upArn = scaleUpResult.getPolicyARN(); PutScalingPolicyResult scaleDownResult = autoScalingGroupClient.putScalingPolicy(scalingDownPolicy); String downArn = scaleDownResult.getPolicyARN(); /** * ======================================================================= * =================== Create alarms for policies * ======================================================================= * =================== */ String upAlarmName = "UpAlarm_Mild"; String downAlarmName = "DownAlarm_Mild"; Dimension dimension = new Dimension(); dimension.setName("AutoScalingGroupName"); dimension.setValue(autoScalingGroupName); PutMetricAlarmRequest upAlarmRequest = new PutMetricAlarmRequest().withAlarmName(upAlarmName) .withMetricName("CPUUtilization").withNamespace("AWS/EC2").withDimensions(dimension) .withStatistic(Statistic.SampleCount) .withComparisonOperator(ComparisonOperator.GreaterThanOrEqualToThreshold).withThreshold(65.0) .withEvaluationPeriods(1).withPeriod(120).withAlarmActions(upArn); PutMetricAlarmRequest downAlarmRequest = new PutMetricAlarmRequest().withAlarmName(downAlarmName) .withNamespace("AWS/EC2").withDimensions(dimension).withMetricName("CPUUtilization") .withStatistic(Statistic.Average) .withComparisonOperator(ComparisonOperator.LessThanOrEqualToThreshold).withThreshold(60.0) .withEvaluationPeriods(1).withPeriod(120).withAlarmActions(downArn); cloudWatchClient.putMetricAlarm(upAlarmRequest); cloudWatchClient.putMetricAlarm(downAlarmRequest); System.out.println("All settings complete! \nReady for warmup..."); /** * ======================================================================= * =================== Warm up ELB * ======================================================================= * =================== */ String warmUpUrl = "http://" + loadGeneratorDns + "/warmup?dns=" + loadBalancerDns; sendGET(warmUpUrl); System.out.println("Warmup link: " + warmUpUrl); try { Thread.sleep(15 * 60 * 1000); } catch (Exception e) { e.printStackTrace(); } System.out.println("Warmup complete!\nReady for battle..."); /** * ======================================================================= * =================== Start the test * ======================================================================= * =================== */ String testUrl = "http://" + loadGeneratorDns + "/junior?dns=" + loadBalancerDns; testId = sendGET(testUrl); System.out.println("Test ID is: " + testId); System.out.println("Test link: " + testUrl); try { Thread.sleep(60 * 60 * 1000); } catch (Exception e) { e.printStackTrace(); } System.out.println("Test finished!"); /** * ======================================================================= * =================== Delete resources * ======================================================================= * =================== */ // clear ASG UpdateAutoScalingGroupRequest asgClearRequest = new UpdateAutoScalingGroupRequest() .withAutoScalingGroupName(autoScalingGroupName).withMaxSize(0).withMinSize(0); autoScalingGroupClient.updateAutoScalingGroup(asgClearRequest); // delete policies DeletePolicyRequest upPolicyDeleteRequest = new DeletePolicyRequest() .withAutoScalingGroupName(autoScalingGroupName).withPolicyName(upPolicyName); autoScalingGroupClient.deletePolicy(upPolicyDeleteRequest); DeletePolicyRequest downPolicyDeleteRequest = new DeletePolicyRequest() .withAutoScalingGroupName(autoScalingGroupName).withPolicyName(downPolicyName); autoScalingGroupClient.deletePolicy(downPolicyDeleteRequest); System.out.println("Policies deleted..."); // delete alarms DeleteAlarmsRequest alarmsDeleteRequest = new DeleteAlarmsRequest().withAlarmNames(upAlarmName, downAlarmName); cloudWatchClient.deleteAlarms(alarmsDeleteRequest); System.out.println("Alarms deleted..."); // delete load balancer DeleteLoadBalancerRequest lgDeleteRequest = new DeleteLoadBalancerRequest() .withLoadBalancerName(loadBalancerName); loadBalancerClient.deleteLoadBalancer(lgDeleteRequest); System.out.println("Load generator deleted..."); // delete ASG DeleteAutoScalingGroupRequest asgDeleteRequest = new DeleteAutoScalingGroupRequest() .withForceDelete(true).withAutoScalingGroupName(autoScalingGroupName); autoScalingGroupClient.deleteAutoScalingGroup(asgDeleteRequest); System.out.println("ASG deleted..."); // delete launch configuration DeleteLaunchConfigurationRequest launchConfigDeleteRequest = new DeleteLaunchConfigurationRequest() .withLaunchConfigurationName(launchConfigName); autoScalingGroupClient.deleteLaunchConfiguration(launchConfigDeleteRequest); System.out.println("Launch configuration deleted..."); // delete security group DeleteSecurityGroupRequest sgDeleteRequest = new DeleteSecurityGroupRequest() .withGroupName(allPurposeSecurityName); ec2.deleteSecurityGroup(sgDeleteRequest); System.out.println("Security group deleted..."); /** * ======================================================================= * =================== All done * ======================================================================= * =================== */ System.out.println("All done :)"); } catch (AmazonServiceException ase) { // Write out any exceptions that may have occurred. System.out.println("Caught Exception: " + ase.getMessage()); System.out.println("Reponse Status Code: " + ase.getStatusCode()); System.out.println("Error Code: " + ase.getErrorCode()); System.out.println("Request ID: " + ase.getRequestId()); } catch (Exception e) { System.out.println("Unexcepted error!"); System.out.println(e.getMessage()); } }
From source file:com.hazelcast.simulator.provisioner.AwsProvisioner.java
License:Open Source License
String createLoadBalancer(String name) { CreateLoadBalancerRequest request = new CreateLoadBalancerRequest(); request.setLoadBalancerName(name);// www .jav a2 s . c om request.withAvailabilityZones(elbAvailabilityZones.split(",")); List<Listener> listeners = new ArrayList<Listener>(); listeners.add(new Listener(elbProtocol, elbPortIn, elbPortOut)); request.setListeners(listeners); CreateLoadBalancerResult lbResult = elb.createLoadBalancer(request); appendText(lbResult.getDNSName() + NEW_LINE, elbFile); return request.getLoadBalancerName(); }
From source file:com.kpbird.aws.Main.java
public void createElasticLoadBalancing() { try {/*from w w w .j a va2 s . c o m*/ AmazonElasticLoadBalancingClient aebc = new AmazonElasticLoadBalancingClient(credentials); aebc.setEndpoint(endPoint); aebc.setRegion(region); String instanceid = Util.getInstanceId(InstanceName, credentials, endPoint, region); String azone = Util.getAvailabilityZone(instanceid, credentials, endPoint, region); CreateLoadBalancerRequest cbr = new CreateLoadBalancerRequest(); cbr.setLoadBalancerName(elbName); ArrayList<Listener> arrListener = new ArrayList<Listener>(); arrListener.add(new Listener().withInstancePort(ListenerInstancePort) .withInstanceProtocol(ListenerInstanceProtocol).withLoadBalancerPort(ListenerPort) .withProtocol(ListenerProtocol)); cbr.setListeners(arrListener); ArrayList<String> arrAvailabilityZone = new ArrayList<String>(); arrAvailabilityZone.add(azone); cbr.setAvailabilityZones(arrAvailabilityZone); CreateLoadBalancerResult cbresult = aebc.createLoadBalancer(cbr); log.Info("DNS Name " + cbresult.getDNSName()); // wait for process complete ConfigureHealthCheckRequest chcr = new ConfigureHealthCheckRequest(); chcr.setLoadBalancerName(elbName); HealthCheck healthCK = new HealthCheck(); healthCK.withHealthyThreshold(HealthyThreshold); healthCK.withInterval(HealthInterval); healthCK.withTarget(HealthTarget); healthCK.withTimeout(HealthTimeout); healthCK.withUnhealthyThreshold(HealthUnhealthyThreshold); chcr.setHealthCheck(healthCK); aebc.configureHealthCheck(chcr); // wait for process complete RegisterInstancesWithLoadBalancerRequest riwbr = new RegisterInstancesWithLoadBalancerRequest(); riwbr.setLoadBalancerName(elbName); ArrayList<com.amazonaws.services.elasticloadbalancing.model.Instance> arrInstances = new ArrayList<com.amazonaws.services.elasticloadbalancing.model.Instance>(); com.amazonaws.services.elasticloadbalancing.model.Instance i = new com.amazonaws.services.elasticloadbalancing.model.Instance( instanceid); arrInstances.add(i); riwbr.setInstances(arrInstances); RegisterInstancesWithLoadBalancerResult riwbresult = aebc.registerInstancesWithLoadBalancer(riwbr); } catch (Exception e) { e.printStackTrace(); } }
From source file:com.urbancode.terraform.tasks.aws.helpers.AWSHelper.java
License:Apache License
/** * Launches a load balancer with the given name, subnets, security groups, and listeners. * NOTE** if you have multiple subnets, each must be in a DIFFERENT availability zone! * you can only have 1 subnet per availability zone * * @param loadBalancerName - must be unique!! * @param subnets/* www. ja va2s . com*/ * @param secGroups * @param listeners - you can create these locally. holds info on ports/protocols * @param lbClient - AmazonElasticLoadBalancing * @return DNSName - the DNS name of the newly created load balancer * @throws EnvironmentCreationException if load balancer has neither zones nor subnets */ public String launchLoadBalancer(String loadBalancerName, List<String> subnets, List<String> secGroups, List<Listener> listeners, List<String> zones, AmazonElasticLoadBalancing lbClient) throws EnvironmentCreationException { CreateLoadBalancerRequest request = new CreateLoadBalancerRequest().withLoadBalancerName(loadBalancerName); if (subnets != null && !subnets.isEmpty()) { request = request.withSubnets(subnets); } else if (zones != null && !zones.isEmpty()) { request = request.withAvailabilityZones(zones); } else { throw new EnvironmentCreationException( "Must specify either zones or subnets for load balancer " + loadBalancerName); } if (listeners != null && !listeners.isEmpty()) { request = request.withListeners(listeners); } else { throw new EnvironmentCreationException("List of Listeners must not be null!"); } if (secGroups != null && !secGroups.isEmpty()) { request = request.withSecurityGroups(secGroups); } CreateLoadBalancerResult result = lbClient.createLoadBalancer(request); return result.getDNSName(); }
From source file:com.zotoh.cloudapi.aws.ElasticLoadBalancer.java
License:Open Source License
@Override public String create(String name, String desc, String addrIgnoredByAWS, String[] zones, LbListener[] lis, String[] servers) throws CloudException, InternalException { tstEStrArg("load-balancer-name", name); tstObjArg("listeners", lis); tstObjArg("zones", zones); List<Listener> lst = LT(); Listener ln;//from ww w.j a va2s .co m LbListener lb; for (int i = 0; i < lis.length; ++i) { ln = new Listener(); lb = lis[i]; ln.setProtocol(strProtocol(lb.getNetworkProtocol())); ln.setInstancePort(lb.getPrivatePort()); ln.setLoadBalancerPort(lb.getPublicPort()); lst.add(ln); } CreateLoadBalancerResult res = _svc.getCloud().getELB().createLoadBalancer(new CreateLoadBalancerRequest() .withLoadBalancerName(name).withListeners(lst).withAvailabilityZones(zones)); return res == null ? null : res.getDNSName(); }
From source file:fr.xebia.demo.amazon.aws.AmazonAwsInfrastructureMaker.java
License:Apache License
public CreateLoadBalancerResult createElasticLoadBalancer(List<Instance> ec2Instances) { Set<String> availabilityZones = Sets .newHashSet(Lists.transform(ec2Instances, new Function<Instance, String>() { @Override/* w ww. j av a2s.c o m*/ public String apply(Instance instance) { return instance.getPlacement().getAvailabilityZone(); } })); List<com.amazonaws.services.elasticloadbalancing.model.Instance> elbInstances = Lists.transform( ec2Instances, new Function<Instance, com.amazonaws.services.elasticloadbalancing.model.Instance>() { @Override public com.amazonaws.services.elasticloadbalancing.model.Instance apply(Instance ec2Instance) { return new com.amazonaws.services.elasticloadbalancing.model.Instance( ec2Instance.getInstanceId()); } }); CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest() // .withLoadBalancerName("travel-ecommerce") // .withListeners(new Listener("HTTP", 80, 8080)) // .withAvailabilityZones(availabilityZones) // ; CreateLoadBalancerResult createLoadBalancerResult = elb.createLoadBalancer(createLoadBalancerRequest); // HEALTH CHECK HealthCheck helsathCheck = new HealthCheck() // .withTarget("HTTP:8080/") // .withHealthyThreshold(2) // .withUnhealthyThreshold(2) // .withInterval(30) // .withTimeout(2); ConfigureHealthCheckRequest configureHealthCheckRequest = new ConfigureHealthCheckRequest( createLoadBalancerRequest.getLoadBalancerName(), // helsathCheck); elb.configureHealthCheck(configureHealthCheckRequest); // COOKIE STICKINESS CreateLBCookieStickinessPolicyRequest createLbCookieStickinessPolicy = new CreateLBCookieStickinessPolicyRequest() // .withLoadBalancerName(createLoadBalancerRequest.getLoadBalancerName())// .withPolicyName("travel-ecommerce-stickiness-policy"); elb.createLBCookieStickinessPolicy(createLbCookieStickinessPolicy); SetLoadBalancerPoliciesOfListenerRequest setLoadBalancerPoliciesOfListenerRequest = new SetLoadBalancerPoliciesOfListenerRequest() // .withLoadBalancerName(createLoadBalancerRequest.getLoadBalancerName()) // .withLoadBalancerPort(80) // .withPolicyNames(createLbCookieStickinessPolicy.getPolicyName())// ; elb.setLoadBalancerPoliciesOfListener(setLoadBalancerPoliciesOfListenerRequest); // INSTANCES RegisterInstancesWithLoadBalancerRequest registerInstancesWithLoadBalancerRequest = new RegisterInstancesWithLoadBalancerRequest( createLoadBalancerRequest.getLoadBalancerName(), elbInstances); elb.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest); logger.info("Created {}", createLoadBalancerResult); return createLoadBalancerResult; }
From source file:fr.xebia.demo.amazon.aws.PetclinicInfrastructureEnforcer.java
License:Apache License
/** * //from w w w.j a va2 s .c om * @param healthCheckUri * start with slash. E.g. "/myapp/healthcheck.jsp * @param applicationIdentifier * used to name the load balancer and to filter the instances on * their "Role" tag. * @return created load balancer description */ @Nonnull public LoadBalancerDescription createOrUpdateElasticLoadBalancer(@Nonnull String healthCheckUri, @Nonnull String applicationIdentifier) { LOGGER.info("ENFORCE LOAD BALANCER"); DescribeInstancesRequest describeInstancesWithRoleRequest = new DescribeInstancesRequest(). // withFilters(new Filter("tag:Role", Arrays.asList(applicationIdentifier))); DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesWithRoleRequest); Iterable<Instance> expectedEc2Instances = toEc2Instances(describeInstancesResult.getReservations()); Set<String> expectedAvailabilityZones = Sets .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_AVAILABILITY_ZONE)); Listener expectedListener = new Listener("HTTP", 80, 8080); String loadBalancerName = applicationIdentifier; LoadBalancerDescription actualLoadBalancerDescription; try { DescribeLoadBalancersResult describeLoadBalancers = elb .describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName))); if (describeLoadBalancers.getLoadBalancerDescriptions().isEmpty()) { // unexpected, this should have been a // LoadBalancerNotFoundException actualLoadBalancerDescription = null; } else { // re-query to get updated config actualLoadBalancerDescription = Iterables .getFirst(describeLoadBalancers.getLoadBalancerDescriptions(), null); } } catch (LoadBalancerNotFoundException e) { actualLoadBalancerDescription = null; } Set<String> actualAvailabilityZones; Set<String> actualInstanceIds; Policies actualPolicies; HealthCheck actualHealthCheck; ListenerDescription actualListenerDescription = null; if (actualLoadBalancerDescription == null) { CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest() // .withLoadBalancerName(loadBalancerName) // .withAvailabilityZones(expectedAvailabilityZones) // .withListeners(expectedListener); elb.createLoadBalancer(createLoadBalancerRequest); actualListenerDescription = new ListenerDescription().withListener(expectedListener); actualAvailabilityZones = expectedAvailabilityZones; actualInstanceIds = Collections.emptySet(); actualHealthCheck = new HealthCheck(); actualPolicies = new Policies(); } else { // check listeners List<ListenerDescription> actualListenerDescriptions = actualLoadBalancerDescription .getListenerDescriptions(); boolean loadBalancerMustBeRecreated; if (actualListenerDescriptions.size() == 1) { actualListenerDescription = Iterables.getOnlyElement(actualListenerDescriptions); Listener actualListener = actualListenerDescription.getListener(); if (ObjectUtils.equals(expectedListener.getProtocol(), actualListener.getProtocol()) && // ObjectUtils.equals(expectedListener.getLoadBalancerPort(), actualListener.getLoadBalancerPort()) && // ObjectUtils.equals(expectedListener.getInstancePort(), actualListener.getInstancePort())) { loadBalancerMustBeRecreated = false; } else { loadBalancerMustBeRecreated = true; } } else { loadBalancerMustBeRecreated = true; } if (loadBalancerMustBeRecreated) { LOGGER.info("Recreate miss configured load balancer actualListeners:{}, expectedListener:{}", actualListenerDescriptions, expectedListener); elb.deleteLoadBalancer(new DeleteLoadBalancerRequest(loadBalancerName)); return createOrUpdateElasticLoadBalancer(healthCheckUri, applicationIdentifier); } // actualAvailabilityZones = Sets.newHashSet(actualLoadBalancerDescription.getAvailabilityZones()); actualInstanceIds = Sets.newHashSet( Iterables.transform(actualLoadBalancerDescription.getInstances(), ELB_INSTANCE_TO_INSTANCE_ID)); actualHealthCheck = actualLoadBalancerDescription.getHealthCheck(); actualPolicies = actualLoadBalancerDescription.getPolicies(); } // HEALTH CHECK if (!healthCheckUri.startsWith("/")) { healthCheckUri = "/" + healthCheckUri; } HealthCheck expectedHealthCheck = new HealthCheck() // .withTarget("HTTP:8080" + healthCheckUri) // .withHealthyThreshold(2) // .withUnhealthyThreshold(2) // .withInterval(30) // .withTimeout(2); if (Objects.equal(expectedHealthCheck.getTarget(), actualHealthCheck.getTarget()) && // Objects.equal(expectedHealthCheck.getHealthyThreshold(), actualHealthCheck.getHealthyThreshold()) && // Objects.equal(expectedHealthCheck.getInterval(), actualHealthCheck.getInterval()) && // Objects.equal(expectedHealthCheck.getTimeout(), actualHealthCheck.getTimeout()) && // Objects.equal(expectedHealthCheck.getUnhealthyThreshold(), actualHealthCheck.getHealthyThreshold())) { // health check is ok } else { LOGGER.info("Set Healthcheck: {}", expectedHealthCheck); elb.configureHealthCheck(new ConfigureHealthCheckRequest(loadBalancerName, expectedHealthCheck)); } // AVAILABILITY ZONES // enable Iterable<String> availabilityZonesToEnable = Sets.difference(expectedAvailabilityZones, actualAvailabilityZones); LOGGER.info("Enable availability zones: {}", availabilityZonesToEnable); if (!Iterables.isEmpty(availabilityZonesToEnable)) { elb.enableAvailabilityZonesForLoadBalancer(new EnableAvailabilityZonesForLoadBalancerRequest( loadBalancerName, Lists.newArrayList(availabilityZonesToEnable))); } // disable Iterable<String> availabilityZonesToDisable = Sets.difference(actualAvailabilityZones, expectedAvailabilityZones); LOGGER.info("Disable availability zones: {}", availabilityZonesToDisable); if (!Iterables.isEmpty(availabilityZonesToDisable)) { elb.disableAvailabilityZonesForLoadBalancer(new DisableAvailabilityZonesForLoadBalancerRequest( loadBalancerName, Lists.newArrayList(availabilityZonesToDisable))); } // STICKINESS List<AppCookieStickinessPolicy> appCookieStickinessPoliciesToDelete = actualPolicies .getAppCookieStickinessPolicies(); LOGGER.info("Delete app cookie stickiness policies: {}", appCookieStickinessPoliciesToDelete); for (AppCookieStickinessPolicy appCookieStickinessPolicyToDelete : appCookieStickinessPoliciesToDelete) { elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName, appCookieStickinessPolicyToDelete.getPolicyName())); } final LBCookieStickinessPolicy expectedLbCookieStickinessPolicy = new LBCookieStickinessPolicy( applicationIdentifier + "-stickiness-policy", null); Predicate<LBCookieStickinessPolicy> isExpectedPolicyPredicate = new Predicate<LBCookieStickinessPolicy>() { @Override public boolean apply(LBCookieStickinessPolicy lbCookieStickinessPolicy) { return Objects.equal(expectedLbCookieStickinessPolicy.getPolicyName(), lbCookieStickinessPolicy.getPolicyName()) && // Objects.equal(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod(), lbCookieStickinessPolicy.getCookieExpirationPeriod()); } }; Collection<LBCookieStickinessPolicy> lbCookieStickinessPoliciesToDelete = Collections2 .filter(actualPolicies.getLBCookieStickinessPolicies(), Predicates.not(isExpectedPolicyPredicate)); LOGGER.info("Delete lb cookie stickiness policies: {}", lbCookieStickinessPoliciesToDelete); for (LBCookieStickinessPolicy lbCookieStickinessPolicy : lbCookieStickinessPoliciesToDelete) { elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName, lbCookieStickinessPolicy.getPolicyName())); } Collection<LBCookieStickinessPolicy> matchingLbCookieStyckinessPolicy = Collections2 .filter(actualPolicies.getLBCookieStickinessPolicies(), isExpectedPolicyPredicate); if (matchingLbCookieStyckinessPolicy.isEmpty()) { // COOKIE STICKINESS CreateLBCookieStickinessPolicyRequest createLbCookieStickinessPolicy = new CreateLBCookieStickinessPolicyRequest() // .withLoadBalancerName(loadBalancerName) // .withPolicyName(expectedLbCookieStickinessPolicy.getPolicyName()) // .withCookieExpirationPeriod(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod()); LOGGER.info("Create LBCookieStickinessPolicy: {}", createLbCookieStickinessPolicy); elb.createLBCookieStickinessPolicy(createLbCookieStickinessPolicy); } else { // what ? } // TODO verify load balancer policy is associated with the listener List<String> expectedListenerDescriptionPolicyNames = Lists .newArrayList(expectedLbCookieStickinessPolicy.getPolicyName()); boolean mustOverWriteListenerPolicy = !ObjectUtils.equals(expectedListenerDescriptionPolicyNames, actualListenerDescription.getPolicyNames()); if (mustOverWriteListenerPolicy) { SetLoadBalancerPoliciesOfListenerRequest setLoadBalancerPoliciesOfListenerRequest = new SetLoadBalancerPoliciesOfListenerRequest() // .withLoadBalancerName(loadBalancerName) // .withLoadBalancerPort(expectedListener.getLoadBalancerPort()) // .withPolicyNames(expectedLbCookieStickinessPolicy.getPolicyName()); LOGGER.debug("setLoadBalancerPoliciesOfListener: {}", setLoadBalancerPoliciesOfListenerRequest); elb.setLoadBalancerPoliciesOfListener(setLoadBalancerPoliciesOfListenerRequest); } // INSTANCES Set<String> expectedEc2InstanceIds = Sets .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_INSTANCE_ID)); // register Iterable<String> instanceIdsToRegister = Sets.difference(expectedEc2InstanceIds, actualInstanceIds); LOGGER.info("Register {} instances: {}", applicationIdentifier, instanceIdsToRegister); if (!Iterables.isEmpty(instanceIdsToRegister)) { elb.registerInstancesWithLoadBalancer(new RegisterInstancesWithLoadBalancerRequest(loadBalancerName, Lists.newArrayList(Iterables.transform(instanceIdsToRegister, INSTANCE_ID_TO_ELB_INSTANCE)))); } // deregister Iterable<String> instanceIdsToDeregister = Sets.difference(actualInstanceIds, expectedEc2InstanceIds); LOGGER.info("Deregister {} instances: {}", applicationIdentifier, instanceIdsToDeregister); if (!Iterables.isEmpty(instanceIdsToDeregister)) { elb.deregisterInstancesFromLoadBalancer(new DeregisterInstancesFromLoadBalancerRequest(loadBalancerName, Lists.newArrayList(Iterables.transform(instanceIdsToDeregister, INSTANCE_ID_TO_ELB_INSTANCE)))); } // QUERY TO GET UP TO DATE LOAD BALANCER DESCRIPTION LoadBalancerDescription elasticLoadBalancerDescription = Iterables.getOnlyElement( elb.describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName))) .getLoadBalancerDescriptions()); return elasticLoadBalancerDescription; }
From source file:fr.xebia.workshop.infrastructureascode.AmazonAwsPetclinicInfrastructureEnforcer.java
License:Apache License
/** * /*from w w w . j a v a 2 s . co m*/ * @param healthCheckUri * start with slash. E.g. "/myapp/healthcheck.jsp * @param applicationIdentifier * used to name the load balancer and to filter the instances on * their "Role" tag. * @return created load balancer description */ @Nonnull public LoadBalancerDescription createOrUpdateElasticLoadBalancer(@Nonnull String healthCheckUri, @Nonnull String applicationIdentifier) { logger.info("ENFORCE LOAD BALANCER"); DescribeInstancesRequest describeInstancesWithRoleRequest = new DescribeInstancesRequest(). // withFilters(new Filter("tag:Role", Arrays.asList(applicationIdentifier))); DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesWithRoleRequest); Iterable<Instance> expectedEc2Instances = toEc2Instances(describeInstancesResult.getReservations()); Set<String> expectedAvailabilityZones = Sets .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_AVAILABILITY_ZONE)); Listener expectedListener = new Listener("HTTP", 80, 8080); String loadBalancerName = applicationIdentifier; LoadBalancerDescription actualLoadBalancerDescription; try { DescribeLoadBalancersResult describeLoadBalancers = elb .describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName))); if (describeLoadBalancers.getLoadBalancerDescriptions().isEmpty()) { // unexpected, this should have been a // LoadBalancerNotFoundException actualLoadBalancerDescription = null; } else { // re-query to get updated config actualLoadBalancerDescription = Iterables .getFirst(describeLoadBalancers.getLoadBalancerDescriptions(), null); } } catch (LoadBalancerNotFoundException e) { actualLoadBalancerDescription = null; } Set<String> actualAvailabilityZones; Set<String> actualInstanceIds; Policies actualPolicies; HealthCheck actualHealthCheck; ListenerDescription actualListenerDescription = null; if (actualLoadBalancerDescription == null) { CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest() // .withLoadBalancerName(loadBalancerName) // .withAvailabilityZones(expectedAvailabilityZones) // .withListeners(expectedListener); elb.createLoadBalancer(createLoadBalancerRequest); actualListenerDescription = new ListenerDescription().withListener(expectedListener); actualAvailabilityZones = expectedAvailabilityZones; actualInstanceIds = Collections.emptySet(); actualHealthCheck = new HealthCheck(); actualPolicies = new Policies(); } else { // check listeners List<ListenerDescription> actualListenerDescriptions = actualLoadBalancerDescription .getListenerDescriptions(); boolean loadBalancerMustBeRecreated; if (actualListenerDescriptions.size() == 1) { actualListenerDescription = Iterables.getOnlyElement(actualListenerDescriptions); Listener actualListener = actualListenerDescription.getListener(); if (ObjectUtils.equals(expectedListener.getProtocol(), actualListener.getProtocol()) && // ObjectUtils.equals(expectedListener.getLoadBalancerPort(), actualListener.getLoadBalancerPort()) && // ObjectUtils.equals(expectedListener.getInstancePort(), actualListener.getInstancePort())) { loadBalancerMustBeRecreated = false; } else { loadBalancerMustBeRecreated = true; } } else { loadBalancerMustBeRecreated = true; } if (loadBalancerMustBeRecreated) { logger.info("Recreate miss configured load balancer actualListeners:{}, expectedListener:{}", actualListenerDescriptions, expectedListener); elb.deleteLoadBalancer(new DeleteLoadBalancerRequest(loadBalancerName)); return createOrUpdateElasticLoadBalancer(healthCheckUri, applicationIdentifier); } // actualAvailabilityZones = Sets.newHashSet(actualLoadBalancerDescription.getAvailabilityZones()); actualInstanceIds = Sets.newHashSet( Iterables.transform(actualLoadBalancerDescription.getInstances(), ELB_INSTANCE_TO_INSTANCE_ID)); actualHealthCheck = actualLoadBalancerDescription.getHealthCheck(); actualPolicies = actualLoadBalancerDescription.getPolicies(); } // HEALTH CHECK if (!healthCheckUri.startsWith("/")) { healthCheckUri = "/" + healthCheckUri; } HealthCheck expectedHealthCheck = new HealthCheck() // .withTarget("HTTP:8080" + healthCheckUri) // .withHealthyThreshold(2) // .withUnhealthyThreshold(2) // .withInterval(30) // .withTimeout(2); if (Objects.equal(expectedHealthCheck.getTarget(), actualHealthCheck.getTarget()) && // Objects.equal(expectedHealthCheck.getHealthyThreshold(), actualHealthCheck.getHealthyThreshold()) && // Objects.equal(expectedHealthCheck.getInterval(), actualHealthCheck.getInterval()) && // Objects.equal(expectedHealthCheck.getTimeout(), actualHealthCheck.getTimeout()) && // Objects.equal(expectedHealthCheck.getUnhealthyThreshold(), actualHealthCheck.getHealthyThreshold())) { // health check is ok } else { logger.info("Set Healthcheck: " + expectedHealthCheck); elb.configureHealthCheck(new ConfigureHealthCheckRequest(loadBalancerName, expectedHealthCheck)); } // AVAILABILITY ZONES // enable Iterable<String> availabilityZonesToEnable = Sets.difference(expectedAvailabilityZones, actualAvailabilityZones); logger.info("Enable availability zones: " + availabilityZonesToEnable); if (!Iterables.isEmpty(availabilityZonesToEnable)) { elb.enableAvailabilityZonesForLoadBalancer(new EnableAvailabilityZonesForLoadBalancerRequest( loadBalancerName, Lists.newArrayList(availabilityZonesToEnable))); } // disable Iterable<String> availabilityZonesToDisable = Sets.difference(actualAvailabilityZones, expectedAvailabilityZones); logger.info("Disable availability zones: " + availabilityZonesToDisable); if (!Iterables.isEmpty(availabilityZonesToDisable)) { elb.disableAvailabilityZonesForLoadBalancer(new DisableAvailabilityZonesForLoadBalancerRequest( loadBalancerName, Lists.newArrayList(availabilityZonesToDisable))); } // STICKINESS List<AppCookieStickinessPolicy> appCookieStickinessPoliciesToDelete = actualPolicies .getAppCookieStickinessPolicies(); logger.info("Delete app cookie stickiness policies:" + appCookieStickinessPoliciesToDelete); for (AppCookieStickinessPolicy appCookieStickinessPolicyToDelete : appCookieStickinessPoliciesToDelete) { elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName, appCookieStickinessPolicyToDelete.getPolicyName())); } final LBCookieStickinessPolicy expectedLbCookieStickinessPolicy = new LBCookieStickinessPolicy( applicationIdentifier + "-stickiness-policy", null); Predicate<LBCookieStickinessPolicy> isExpectedPolicyPredicate = new Predicate<LBCookieStickinessPolicy>() { @Override public boolean apply(LBCookieStickinessPolicy lbCookieStickinessPolicy) { return Objects.equal(expectedLbCookieStickinessPolicy.getPolicyName(), lbCookieStickinessPolicy.getPolicyName()) && // Objects.equal(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod(), lbCookieStickinessPolicy.getCookieExpirationPeriod()); } }; Collection<LBCookieStickinessPolicy> lbCookieStickinessPoliciesToDelete = Collections2 .filter(actualPolicies.getLBCookieStickinessPolicies(), Predicates.not(isExpectedPolicyPredicate)); logger.info("Delete lb cookie stickiness policies: " + lbCookieStickinessPoliciesToDelete); for (LBCookieStickinessPolicy lbCookieStickinessPolicy : lbCookieStickinessPoliciesToDelete) { elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName, lbCookieStickinessPolicy.getPolicyName())); } Collection<LBCookieStickinessPolicy> matchingLbCookieStyckinessPolicy = Collections2 .filter(actualPolicies.getLBCookieStickinessPolicies(), isExpectedPolicyPredicate); if (matchingLbCookieStyckinessPolicy.isEmpty()) { // COOKIE STICKINESS CreateLBCookieStickinessPolicyRequest createLbCookieStickinessPolicy = new CreateLBCookieStickinessPolicyRequest() // .withLoadBalancerName(loadBalancerName) // .withPolicyName(expectedLbCookieStickinessPolicy.getPolicyName()) // .withCookieExpirationPeriod(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod()); logger.info("Create LBCookieStickinessPolicy: " + createLbCookieStickinessPolicy); elb.createLBCookieStickinessPolicy(createLbCookieStickinessPolicy); } else { // what ? } // TODO verify load balancer policy is associated with the listener List<String> expectedListenerDescriptionPolicyNames = Lists .newArrayList(expectedLbCookieStickinessPolicy.getPolicyName()); boolean mustOverWriteListenerPolicy = !ObjectUtils.equals(expectedListenerDescriptionPolicyNames, actualListenerDescription.getPolicyNames()); if (mustOverWriteListenerPolicy) { SetLoadBalancerPoliciesOfListenerRequest setLoadBalancerPoliciesOfListenerRequest = new SetLoadBalancerPoliciesOfListenerRequest() // .withLoadBalancerName(loadBalancerName) // .withLoadBalancerPort(expectedListener.getLoadBalancerPort()) // .withPolicyNames(expectedLbCookieStickinessPolicy.getPolicyName()); logger.debug("setLoadBalancerPoliciesOfListener: {}", setLoadBalancerPoliciesOfListenerRequest); elb.setLoadBalancerPoliciesOfListener(setLoadBalancerPoliciesOfListenerRequest); } // INSTANCES Set<String> expectedEc2InstanceIds = Sets .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_INSTANCE_ID)); // register Iterable<String> instanceIdsToRegister = Sets.difference(expectedEc2InstanceIds, actualInstanceIds); logger.info("Register " + applicationIdentifier + " instances: " + instanceIdsToRegister); if (!Iterables.isEmpty(instanceIdsToRegister)) { elb.registerInstancesWithLoadBalancer(new RegisterInstancesWithLoadBalancerRequest(loadBalancerName, Lists.newArrayList(Iterables.transform(instanceIdsToRegister, INSTANCE_ID_TO_ELB_INSTANCE)))); } // deregister Iterable<String> instanceIdsToDeregister = Sets.difference(actualInstanceIds, expectedEc2InstanceIds); logger.info("Deregister " + applicationIdentifier + " instances: " + instanceIdsToDeregister); if (!Iterables.isEmpty(instanceIdsToDeregister)) { elb.deregisterInstancesFromLoadBalancer(new DeregisterInstancesFromLoadBalancerRequest(loadBalancerName, Lists.newArrayList(Iterables.transform(instanceIdsToDeregister, INSTANCE_ID_TO_ELB_INSTANCE)))); } // QUERY TO GET UP TO DATE LOAD BALANCER DESCRIPTION LoadBalancerDescription elasticLoadBalancerDescription = Iterables.getOnlyElement( elb.describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName))) .getLoadBalancerDescriptions()); return elasticLoadBalancerDescription; }
From source file:jp.primecloud.auto.process.aws.AwsLoadBalancerProcess.java
License:Open Source License
public String createLoadBalancer(AwsProcessClient awsProcessClient, Long loadBalancerNo) { AwsLoadBalancer awsLoadBalancer = awsLoadBalancerDao.read(loadBalancerNo); // ??/*from ww w. j a v a 2 s . c om*/ CreateLoadBalancerRequest request = new CreateLoadBalancerRequest(); request.withLoadBalancerName(awsLoadBalancer.getName()); // ? Listener listener = new Listener(); listener.withProtocol("TCP"); listener.withLoadBalancerPort(65535); listener.withInstancePort(65535); request.withListeners(listener); // ?PVC?? if (BooleanUtils.isNotTrue(awsProcessClient.getPlatformAws().getVpc())) { // AvailabilityZones List<AvailabilityZone> availabilityZones = awsCommonProcess.describeAvailabilityZones(awsProcessClient); for (AvailabilityZone availabilityZone : availabilityZones) { request.withAvailabilityZones(availabilityZone.getZoneName()); } } // VPC?? else { // Subnet List<Subnet> subnets = awsCommonProcess.describeSubnetsByVpcId(awsProcessClient, awsProcessClient.getPlatformAws().getVpcId()); if (StringUtils.isNotEmpty(awsLoadBalancer.getSubnetId())) { for (String subnetId : StringUtils.split(awsLoadBalancer.getSubnetId(), ",")) { subnetId = subnetId.trim(); for (Subnet subnet : subnets) { if (StringUtils.equals(subnetId, subnet.getSubnetId())) { request.withSubnets(subnetId); break; } } } } else { // Subnet??????????AvailabilityZone?Subnet? Map<String, String> subnetIdMap = new LinkedHashMap<String, String>(); for (Subnet subnet : subnets) { if (BooleanUtils.isTrue(subnet.getDefaultForAz())) { subnetIdMap.put(subnet.getAvailabilityZone(), subnet.getSubnetId()); continue; } if (!subnetIdMap.containsKey(subnet.getAvailabilityZone())) { subnetIdMap.put(subnet.getAvailabilityZone(), subnet.getSubnetId()); } } request.withSubnets(subnetIdMap.values()); } // SecurytiGroup List<SecurityGroup> securityGroups = awsCommonProcess.describeSecurityGroupsByVpcId(awsProcessClient, awsProcessClient.getPlatformAws().getVpcId()); for (String groupName : StringUtils.split(awsLoadBalancer.getSecurityGroups(), ",")) { groupName = groupName.trim(); for (SecurityGroup securityGroup : securityGroups) { if (StringUtils.equals(groupName, securityGroup.getGroupName())) { request.withSecurityGroups(securityGroup.getGroupId()); break; } } } // Internal if (BooleanUtils.isTrue(awsLoadBalancer.getInternal())) { request.withScheme("internal"); } } // ??? CreateLoadBalancerResult result = awsProcessClient.getElbClient().createLoadBalancer(request); String dnsName = result.getDNSName(); if (log.isInfoEnabled()) { log.info(MessageUtils.getMessage("IPROCESS-200111", awsLoadBalancer.getName())); } // processLogger.debug(null, null, "AwsElbCreate", new Object[] { awsProcessClient.getPlatform().getPlatformName(), awsLoadBalancer.getName() }); // ?? DeleteLoadBalancerListenersRequest request2 = new DeleteLoadBalancerListenersRequest(); request2.withLoadBalancerName(awsLoadBalancer.getName()); request2.withLoadBalancerPorts(65535); awsProcessClient.getElbClient().deleteLoadBalancerListeners(request2); // ? ModifyLoadBalancerAttributesRequest request3 = new ModifyLoadBalancerAttributesRequest(); request3.withLoadBalancerName(awsLoadBalancer.getName()); request3.withLoadBalancerAttributes(new LoadBalancerAttributes() .withCrossZoneLoadBalancing(new CrossZoneLoadBalancing().withEnabled(true))); awsProcessClient.getElbClient().modifyLoadBalancerAttributes(request3); // processLogger.debug(null, null, "AwsCrossZoneEnabled", new Object[] { awsProcessClient.getPlatform().getPlatformName(), awsLoadBalancer.getName() }); // awsLoadBalancer = awsLoadBalancerDao.read(loadBalancerNo); awsLoadBalancer.setDnsName(dnsName); awsLoadBalancerDao.update(awsLoadBalancer); return dnsName; }