Class: AWS::ELB::Base
- Defined in:
- lib/AWS/ELB.rb,
lib/AWS/ELB/load_balancers.rb
Instance Attribute Summary
Attributes inherited from Base
#port, #proxy_server, #server, #use_ssl
Instance Method Summary collapse
- #api_version ⇒ Object
-
#aws_error?(response) ⇒ Boolean
Raises the appropriate error if the specified Net::HTTPResponse object contains an Amazon EC2 error; returns
false
otherwise. -
#configure_health_check(options = {}) ⇒ Object
This API enables you to define an application healthcheck for the instances.
-
#create_load_balancer(options = {}) ⇒ Object
This API creates a new LoadBalancer.
- #default_host ⇒ Object
-
#delete_load_balancer(options = {}) ⇒ Object
This API deletes the specified LoadBalancer.
-
#deregister_instances_from_load_balancer(options = {}) ⇒ Object
This API deregisters instances from the LoadBalancer.
-
#describe_instance_health(options = {}) ⇒ Object
This API returns the current state of the instances of the specified LoadBalancer.
-
#describe_load_balancers(options = {}) ⇒ Object
This API returns detailed configuration information for the specified LoadBalancers, or if no LoadBalancers are specified, then the API returns configuration information for all LoadBalancers created by the caller.
-
#disable_availability_zones_for_load_balancer(options = {}) ⇒ Object
This API removes the specified EC2 Availability Zones from the set of configured Availability Zones for the LoadBalancer.
-
#enable_availability_zones_for_load_balancer(options = {}) ⇒ Object
This API is used to add one or more EC2 Availability Zones to the LoadBalancer.
-
#register_instances_with_load_balancer(options = {}) ⇒ Object
This API adds new instances to the LoadBalancer.
Methods inherited from Base
#extract_user_data, #initialize
Constructor Details
This class inherits a constructor from AWS::Base
Instance Method Details
#api_version ⇒ Object
20 21 22 |
# File 'lib/AWS/ELB.rb', line 20 def api_version API_VERSION end |
#aws_error?(response) ⇒ Boolean
Raises the appropriate error if the specified Net::HTTPResponse object contains an Amazon EC2 error; returns false
otherwise.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/AWS/ELB.rb', line 30 def aws_error?(response) # return false if we got a HTTP 200 code, # otherwise there is some type of error (40x,50x) and # we should try to raise an appropriate exception # from one of our exception classes defined in # exceptions.rb return false if response.is_a?(Net::HTTPSuccess) # parse the XML document so we can walk through it doc = REXML::Document.new(response.body) # Check that the Error element is in the place we would expect. # and if not raise a generic error exception unless doc.root.elements[1].name == "Error" raise Error, "Unexpected error format. response.body is: #{response.body}" end # An valid error response looks like this: # <?xml version="1.0"?><Response><Errors><Error><Code>InvalidParameterCombination</Code><Message>Unknown parameter: foo</Message></Error></Errors><RequestID>291cef62-3e86-414b-900e-17246eccfae8</RequestID></Response> # AWS EC2 throws some exception codes that look like Error.SubError. Since we can't name classes this way # we need to strip out the '.' in the error 'Code' and we name the error exceptions with this # non '.' name as well. error_code = doc.root.elements['//ErrorResponse/Error/Code'].text.gsub('.', '') = doc.root.elements['//ErrorResponse/Error/Message'].text # Raise one of our specific error classes if it exists. # otherwise, throw a generic EC2 Error with a few details. if AWS.const_defined?(error_code) raise AWS.const_get(error_code), else raise AWS::Error, end end |
#configure_health_check(options = {}) ⇒ Object
This API enables you to define an application healthcheck for the instances.
Note: Completion of this API does not guarantee that operation has completed. Rather, it means that the request has been registered and the changes will happen shortly.
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/AWS/ELB/load_balancers.rb', line 131 def configure_health_check( = {} ) raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? raise ArgumentError, "No :health_check Hash provided" if [:health_check].nil? || [:health_check].empty? params = {} params['LoadBalancerName'] = [:load_balancer_name] params['HealthCheck.Target'] = [:health_check][:target] unless [:health_check][:target].nil? params['HealthCheck.Timeout'] = [:health_check][:timeout].to_s unless [:health_check][:timeout].nil? params['HealthCheck.Interval'] = [:health_check][:interval].to_s unless [:health_check][:interval].nil? params['HealthCheck.UnhealthyThreshold'] = [:health_check][:unhealthy_threshold].to_s unless [:health_check][:unhealthy_threshold].nil? params['HealthCheck.HealthyThreshold'] = [:health_check][:healthy_threshold].to_s unless [:health_check][:healthy_threshold].nil? return response_generator(:action => "ConfigureHealthCheck", :params => params) end |
#create_load_balancer(options = {}) ⇒ Object
This API creates a new LoadBalancer. Once the call has completed successfully, a new LoadBalancer will be created, but it will not be usable until at least one instance has been registered. When the LoadBalancer creation is completed, you can check whether it is usable by using the DescribeInstanceHealth API. The LoadBalancer is usable as soon as any registered instance is InService.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/AWS/ELB/load_balancers.rb', line 17 def create_load_balancer( = {} ) raise ArgumentError, "No :availability_zones provided" if [:availability_zones].nil? || [:availability_zones].empty? raise ArgumentError, "No :listeners provided" if [:listeners].nil? || [:listeners].empty? raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? params = {} params.merge!(pathlist('AvailabilityZones.member', [[:availability_zones]].flatten)) params.merge!(pathhashlist('Listeners.member', [[:listeners]].flatten, { :protocol => 'Protocol', :load_balancer_port => 'LoadBalancerPort', :instance_port => 'InstancePort' })) params['LoadBalancerName'] = [:load_balancer_name] return response_generator(:action => "CreateLoadBalancer", :params => params) end |
#default_host ⇒ Object
24 25 26 |
# File 'lib/AWS/ELB.rb', line 24 def default_host DEFAULT_HOST end |
#delete_load_balancer(options = {}) ⇒ Object
This API deletes the specified LoadBalancer. On deletion, all of the configured properties of the LoadBalancer will be deleted. If you attempt to recreate the LoadBalancer, you need to reconfigure all the settings. The DNS name associated with a deleted LoadBalancer is no longer be usable. Once deleted, the name and associated DNS record of the LoadBalancer no longer exist and traffic sent to any of its IP addresses will no longer be delivered to your instances. You will not get the same DNS name even if you create a new LoadBalancer with same LoadBalancerName.
47 48 49 50 51 |
# File 'lib/AWS/ELB/load_balancers.rb', line 47 def delete_load_balancer( = {} ) raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? params = { 'LoadBalancerName' => [:load_balancer_name] } return response_generator(:action => "DeleteLoadBalancer", :params => params) end |
#deregister_instances_from_load_balancer(options = {}) ⇒ Object
This API deregisters instances from the LoadBalancer. Trying to deregister an instance that is not registered with the LoadBalancer does nothing.
In order to successfully call this API, you must provide the same account credentials as those that were used to create the LoadBalancer.
Once the instance is deregistered, it will stop receiving traffic from the LoadBalancer.
114 115 116 117 118 119 120 121 |
# File 'lib/AWS/ELB/load_balancers.rb', line 114 def deregister_instances_from_load_balancer( = {} ) raise ArgumentError, "No :instances provided" if [:instances].nil? || [:instances].empty? raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? params = {} params.merge!(pathhashlist('Instances.member', [:instances].flatten.collect{|e| {:instance_id => e}}, {:instance_id => 'InstanceId'})) params['LoadBalancerName'] = [:load_balancer_name] return response_generator(:action => "DeregisterInstancesFromLoadBalancer", :params => params) end |
#describe_instance_health(options = {}) ⇒ Object
This API returns the current state of the instances of the specified LoadBalancer. If no instances are specified, the state of all the instances for the LoadBalancer is returned.
You must have been the one who created in the LoadBalancer. In other words, in order to successfully call this API, you must provide the same account credentials as those that were used to create the LoadBalancer.
156 157 158 159 160 161 162 163 164 165 |
# File 'lib/AWS/ELB/load_balancers.rb', line 156 def describe_instance_health( = {} ) raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? params = {} params['LoadBalancerName'] = [:load_balancer_name] params.merge!(pathlist('Instances.member', [[:instances]].flatten)) if .has_key?(:instances) return response_generator(:action => "DescribeInstanceHealth", :params => params) end |
#describe_load_balancers(options = {}) ⇒ Object
This API returns detailed configuration information for the specified LoadBalancers, or if no LoadBalancers are specified, then the API returns configuration information for all LoadBalancers created by the caller. For more information, please see LoadBalancer.
You must have created the specified input LoadBalancers in order to retrieve this information. In other words, in order to successfully call this API, you must provide the same account credentials as those that were used to create the LoadBalancer.
65 66 67 68 69 |
# File 'lib/AWS/ELB/load_balancers.rb', line 65 def describe_load_balancers( = {} ) = { :load_balancer_names => [] }.merge() params = pathlist("LoadBalancerName.member", [:load_balancer_names]) return response_generator(:action => "DescribeLoadBalancers", :params => params) end |
#disable_availability_zones_for_load_balancer(options = {}) ⇒ Object
This API removes the specified EC2 Availability Zones from the set of configured Availability Zones for the LoadBalancer. Once an Availability Zone is removed, all the instances registered with the LoadBalancer that are in the removed Availability Zone go into the OutOfService state. Upon Availability Zone removal, the LoadBalancer attempts to equally balance the traffic among its remaining usable Availability Zones. Trying to remove an Availability Zone that was not associated with the LoadBalancer does nothing.
There must be at least one Availability Zone registered with a LoadBalancer at all times. You cannot remove all the Availability Zones from a LoadBalancer.
In order for this call to be successful, you must have created the LoadBalancer. In other words, in order to successfully call this API, you must provide the same account credentials as those that were used to create the LoadBalancer.
183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/AWS/ELB/load_balancers.rb', line 183 def disable_availability_zones_for_load_balancer( = {} ) raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? raise ArgumentError, "No :availability_zones provided" if [:availability_zones].nil? || [:availability_zones].empty? params = {} params['LoadBalancerName'] = [:load_balancer_name] params.merge!(pathlist('AvailabilityZones.member', [[:availability_zones]].flatten)) return response_generator(:action => "DisableAvailabilityZonesForLoadBalancer", :params => params) end |
#enable_availability_zones_for_load_balancer(options = {}) ⇒ Object
This API is used to add one or more EC2 Availability Zones to the LoadBalancer.
200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/AWS/ELB/load_balancers.rb', line 200 def enable_availability_zones_for_load_balancer( = {} ) raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? raise ArgumentError, "No :availability_zones provided" if [:availability_zones].nil? || [:availability_zones].empty? params = {} params['LoadBalancerName'] = [:load_balancer_name] params.merge!(pathlist('AvailabilityZones.member', [[:availability_zones]].flatten)) return response_generator(:action => "EnableAvailabilityZonesForLoadBalancer", :params => params) end |
#register_instances_with_load_balancer(options = {}) ⇒ Object
This API adds new instances to the LoadBalancer.
Once the instance is registered, it starts receiving traffic and requests from the LoadBalancer. Any instance that is not in any of the Availability Zones registered for the LoadBalancer will be moved to the OutOfService state. It will move to the InService state when the Availability Zone is added to the LoadBalancer.
You must have been the one who created the LoadBalancer. In other words, in order to successfully call this API, you must provide the same account credentials as those that were used to create the LoadBalancer.
NOTE: Completion of this API does not guarantee that operation has completed. Rather, it means that the request has been registered and the changes will happen shortly.
91 92 93 94 95 96 97 98 |
# File 'lib/AWS/ELB/load_balancers.rb', line 91 def register_instances_with_load_balancer( = {} ) raise ArgumentError, "No :instances provided" if [:instances].nil? || [:instances].empty? raise ArgumentError, "No :load_balancer_name provided" if [:load_balancer_name].nil? || [:load_balancer_name].empty? params = {} params.merge!(pathhashlist('Instances.member', [:instances].flatten.collect{|e| {:instance_id => e}}, {:instance_id => 'InstanceId'})) params['LoadBalancerName'] = [:load_balancer_name] return response_generator(:action => "RegisterInstancesWithLoadBalancer", :params => params) end |