docs: public void bindEIP() {
          InstanceInfo myInfo = applicationInfoManager.getInfo();
          String myInstanceId = ((AmazonInfo) myInfo.getDataCenterInfo()).get(MetaDataKey.instanceId);
          String myZone = ((AmazonInfo) myInfo.getDataCenterInfo()).get(MetaDataKey.availabilityZone);
  
          Collection<String> candidateEIPs = getCandidateEIPs(myInstanceId, myZone);
  
          AmazonEC2 ec2Service = getEC2Service();
          boolean isMyinstanceAssociatedWithEIP = false;
          Address selectedEIP = null;
  
          for (String eipEntry : candidateEIPs) {
              try {
                  String associatedInstanceId;
  
                  // Check with AWS, if this EIP is already been used by another instance
                  DescribeAddressesRequest describeAddressRequest = new DescribeAddressesRequest().withPublicIps(eipEntry);
                  DescribeAddressesResult result = ec2Service.describeAddresses(describeAddressRequest);
                  if ((result.getAddresses() != null) && (!result.getAddresses().isEmpty())) {
                      Address eipAddress = result.getAddresses().get(0);
                      associatedInstanceId = eipAddress.getInstanceId();
                      // This EIP is not used by any other instance, hence mark it for selection if it is not
                      // already marked.
                      if (((associatedInstanceId == null) || (associatedInstanceId.isEmpty()))) {
                          if (selectedEIP == null) {
                              selectedEIP = eipAddress;
                          }
                      } else if (isMyinstanceAssociatedWithEIP = (associatedInstanceId.equals(myInstanceId))) {
                          // This EIP is associated with an instance, check if this is the same as the current instance.
                          // If it is the same, stop searching for an EIP as this instance is already associated with an
                          // EIP
                          selectedEIP = eipAddress;
                          break;
                      } else {
                          // The EIP is used by some other instance, hence skip it
                          logger.warn("The selected EIP {} is associated with another instance {} according to AWS," +
                                  " hence skipping this", eipEntry, associatedInstanceId);
                      }
                  }
              } catch (Throwable t) {
                  logger.error("Failed to bind elastic IP: {} to {}", eipEntry, myInstanceId, t);
              }
          }
          if (null != selectedEIP) {
              String publicIp = selectedEIP.getPublicIp();
              // Only bind if the EIP is not already associated
              if (!isMyinstanceAssociatedWithEIP) {
  
                  AssociateAddressRequest associateAddressRequest = new AssociateAddressRequest()
                          .withInstanceId(myInstanceId);
  
                  String domain = selectedEIP.getDomain();
                  if ("vpc".equals(domain)) {
                      associateAddressRequest.setAllocationId(selectedEIP.getAllocationId());
                  } else {
                      associateAddressRequest.setPublicIp(publicIp);
                  }
  
                  ec2Service.associateAddress(associateAddressRequest);
                  logger.info("\n\n\nAssociated {} running in zone: {} to elastic IP: {}", myInstanceId, myZone, publicIp);
              }
              logger.info("My instance {} seems to be already associated with the EIP {}", myInstanceId, publicIp);
          } else {
              logger.info("No EIP is free to be associated with this instance. Candidate EIPs are: {}", candidateEIPs);
          }
      }