docs: function (options, cb) {
  		getElbMethod(options.params.elbType || 'classic', 'create', (elbResponse) => {
  			const aws = options.infra.api;
  			const elb = getConnector({
  				api: elbResponse.api,
  				region: options.params.region,
  				keyId: aws.keyId,
  				secretAccessKey: aws.secretAccessKey
  			});
  			let params = {
  				LoadBalancerName: options.params.name
  			};
  			params.Listeners = [];
  			if (options.params.rules && options.params.rules.length > 0) {
  				options.params.rules.forEach((port) => {
  					let listener = {
  						InstancePort: port.backendPort,
  						InstanceProtocol: port.backendProtocol.toUpperCase(),
  						LoadBalancerPort: port.frontendPort,
  						Protocol: port.frontendProtocol.toUpperCase()
  					};
  					if (port.certificate) {
  						listener.SSLCertificateId = port.certificate;
  					}
  					params.Listeners.push(listener);
  				});
  			}
  			if (options.params.securityGroups) {
  				params.SecurityGroups = options.params.securityGroups
  			}
  			if (options.params.subnets) {
  				params.Subnets = options.params.subnets
  			}
  			if (options.params.zones) {
  				params.AvailabilityZones = options.params.zones
  			}
  			if (options.params.type === 'internal') {
  				params.Scheme = options.params.type
  			}
  			if (options.params.tags) {
  				params.Tags = options.params.tags
  			}
  			if (params.Listeners.length === 0) {
  				return cb(new Error("A load balancer must have at least one port open. "))
  			}
  			if (!params.AvailabilityZones && !params.Subnets) {
  				return cb(new Error("Either Zones or Subnet must be specified."))
  			}
  			options.soajs.log.debug(params);
  			elb[elbResponse.method](params, (err, lbResponse) => {
  				if (err) {
  					return cb(err);
  				}
  				else {
  					if (options.params.healthProbe) {
  						params = {
  							HealthCheck: {},
  							LoadBalancerName: options.params.name
  						};
  						params.HealthCheck.Target = "";
  						if (options.params.healthProbe.healthProbeProtocol && options.params.healthProbe.healthProbePort) {
  							params.HealthCheck.Target += options.params.healthProbe.healthProbeProtocol.toUpperCase();
  							params.HealthCheck.Target += ":" + options.params.healthProbe.healthProbePort;
  							if (options.params.healthProbe.healthProbeProtocol.toUpperCase() === "HTTP" || options.params.healthProbe.healthProbePort.toUpperCase() === "HTTPS") {
  								if (options.params.healthProbe.healthProbePath) {
  									params.HealthCheck.Target += options.params.healthProbe.healthProbePath;
  								}
  								else {
  									return cb(new Error("A path must be specified for protocols HTTP/HTTPS, when creating a LoadBalancer Health Check."));
  								}
  							}
  						}
  						if (params.HealthCheck.Target === "") {
  							return cb(new Error("A Health Check Path must be specified!"));
  						}
  						if (options.params.healthProbe.healthProbeInterval) {
  							params.HealthCheck.Interval = options.params.healthProbe.healthProbeInterval;
  						}
  						if (options.params.healthProbe.healthProbeTimeout) {
  							params.HealthCheck.Timeout = options.params.healthProbe.healthProbeTimeout;
  						}
  						if (options.params.healthProbe.maxFailureAttempts) {
  							params.HealthCheck.UnhealthyThreshold = options.params.healthProbe.maxFailureAttempts;
  						}
  						if (options.params.healthProbe.maxSuccessAttempts) {
  							params.HealthCheck.HealthyThreshold = options.params.healthProbe.maxSuccessAttempts;
  						}
  						options.soajs.log.debug(params);
  						getElbMethod('classic', 'healthCheck', (elbResponse) => {
  							elb[elbResponse.method](params, (err) => {
  								return cb(err, lbResponse);
  							});
  						});
  					}
  					else {
  						return cb(null, lbResponse);
  					}
  				}
  			});
  		});
  	}