Packages
erlcloud
0.13.5
3.8.3
3.8.2
3.8.1
3.7.6
3.7.4
3.7.3
3.7.2
3.7.1
3.7.0
3.6.8
3.6.7
3.6.5
3.6.4
3.6.3
3.6.2
3.6.1
3.6.0
3.5.16
3.5.15
3.5.14
3.5.13
3.5.12
3.5.11
3.5.10
3.5.9
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.4.5
3.4.3
3.4.1
3.4.0
3.3.9
3.3.8
3.3.7
3.3.6
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.18
3.2.17
3.2.16
3.2.15
3.2.14
3.2.13
3.2.12
3.2.11
3.2.10
3.2.7
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.17
3.1.16
3.1.14
3.1.13
3.1.12
3.1.11
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.2
2.2.1
2.2.0
2.1.0
2.0.5
2.0.4
2.0.3
2.0.0
0.13.10
0.13.9
0.13.8
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.0
0.12.0
0.11.0
0.9.2
0.9.2-rc.1
0.9.1
0.9.0
AWS APIs library for Erlang
Current section
Files
Jump to
Current section
Files
src/erlcloud_elb.erl
-module(erlcloud_elb).
%% Library initialization.
-export([configure/2, configure/3, new/2, new/3]).
%% ELB API Functions
-export([create_load_balancer/3, create_load_balancer/4, create_load_balancer/5,
delete_load_balancer/1, delete_load_balancer/2,
register_instance/2, register_instance/3,
deregister_instance/2, deregister_instance/3,
describe_load_balancer/1, describe_load_balancer/2,
describe_load_balancers/1, describe_load_balancers/2,
configure_health_check/2, configure_health_check/3,
describe_load_balancer_attributes/1, describe_load_balancer_attributes/2]).
-include("erlcloud.hrl").
-include("erlcloud_aws.hrl").
-define(API_VERSION, "2012-06-01").
-import(erlcloud_xml, [get_text/2]).
%%%===================================================================
%%% API
%%%===================================================================
-spec new(string(), string()) -> aws_config().
new(AccessKeyID, SecretAccessKey) ->
#aws_config{access_key_id=AccessKeyID,
secret_access_key=SecretAccessKey}.
-spec new(string(), string(), string()) -> aws_config().
new(AccessKeyID, SecretAccessKey, Host) ->
#aws_config{access_key_id=AccessKeyID,
secret_access_key=SecretAccessKey,
elb_host=Host}.
-spec configure(string(), string()) -> ok.
configure(AccessKeyID, SecretAccessKey) ->
put(aws_config, new(AccessKeyID, SecretAccessKey)),
ok.
-spec configure(string(), string(), string()) -> ok.
configure(AccessKeyID, SecretAccessKey, Host) ->
put(aws_config, new(AccessKeyID, SecretAccessKey, Host)),
ok.
default_config() -> erlcloud_aws:default_config().
create_load_balancer(LB, Port, Protocol) when is_list(LB),
is_integer(Port),
is_atom(Protocol) ->
create_load_balancer(LB, Port, Protocol, default_config()).
create_load_balancer(LB, Port, Protocol, Config) when is_list(LB),
is_integer(Port),
is_atom(Protocol) ->
create_load_balancer(LB, Port, Protocol, "us-east-1d", Config).
create_load_balancer(LB, Port, Protocol, Zone, Config) when is_list(LB),
is_integer(Port),
is_atom(Protocol),
is_list(Zone) ->
XML = elb_request(Config,
"CreateLoadBalancer",
[{"AvailabilityZones.member.1", Zone},
{"LoadBalancerName", LB} |
erlcloud_aws:param_list([[{"LoadBalancerPort", Port},
{"InstancePort", Port},
{"Protocol", string:to_upper(atom_to_list(Protocol))}]],
"Listeners.member")]),
{ok, get_text("/CreateLoadBalancerResponse/CreateLoadBalancerResult/DNSName", XML)}.
delete_load_balancer(LB) when is_list(LB) ->
delete_load_balancer(LB, default_config()).
delete_load_balancer(LB, Config) when is_list(LB) ->
elb_simple_request(Config,
"DeleteLoadBalancer",
[{"LoadBalancerName", LB}]).
-spec register_instance(string(), string()) -> proplist().
register_instance(LB, InstanceId) ->
register_instance(LB, InstanceId, default_config()).
-spec register_instance(string(), string(), aws_config()) -> proplist().
register_instance(LB, InstanceId, Config) when is_list(LB) ->
elb_simple_request(Config,
"RegisterInstancesWithLoadBalancer",
[{"LoadBalancerName", LB} |
erlcloud_aws:param_list([[{"InstanceId", InstanceId}]], "Instances.member")]).
-spec deregister_instance(string(), string()) -> proplist().
deregister_instance(LB, InstanceId) ->
deregister_instance(LB, InstanceId, default_config()).
-spec deregister_instance(string(), string(), aws_config()) -> proplist().
deregister_instance(LB, InstanceId, Config) when is_list(LB) ->
elb_simple_request(Config,
"DeregisterInstancesFromLoadBalancer",
[{"LoadBalancerName", LB} |
erlcloud_aws:param_list([[{"InstanceId", InstanceId}]], "Instances.member")]).
-spec configure_health_check(string(), string()) -> proplist().
configure_health_check(LB, Target) when is_list(LB),
is_list(Target) ->
configure_health_check(LB, Target, default_config()).
-spec configure_health_check(string(), string(), aws_config()) -> proplist().
configure_health_check(LB, Target, Config) when is_list(LB) ->
elb_simple_request(Config,
"ConfigureHealthCheck",
[{"LoadBalancerName", [LB]},
{"HealthCheck.Target", Target}]).
-spec describe_load_balancer(string()) -> proplist().
describe_load_balancer(Name) ->
describe_load_balancer(Name, default_config()).
describe_load_balancer(Name, Config) ->
describe_load_balancers([Name], Config).
-spec describe_load_balancers([string()]) -> proplist().
describe_load_balancers(Names) ->
describe_load_balancers(Names, default_config()).
describe_load_balancers(Names, Config) ->
elb_request(Config,
"DescribeLoadBalancers",
[erlcloud_aws:param_list(Names, "LoadBalancerName.member")]).
-spec describe_load_balancer_attributes(string()) -> proplist().
describe_load_balancer_attributes(Name) ->
describe_load_balancer_attributes(Name, default_config()).
-spec describe_load_balancer_attributes(string(), aws_config()) -> proplist().
describe_load_balancer_attributes(Name, Config) ->
Node = elb_request(Config,
"DescribeLoadBalancerAttributes",
[{"LoadBalancerName", Name}]),
extract_elb_attribs(Node).
%%%===================================================================
%%% Internal functions
%%%===================================================================
-spec extract_elb_attribs(proplist()) -> proplist().
extract_elb_attribs(Node) ->
RootPath = "DescribeLoadBalancerAttributesResult/LoadBalancerAttributes",
erlcloud_xml:decode(
[
{access_log_enabled, RootPath ++ "/AccessLog/Enabled", boolean},
{access_log_s3_name, RootPath ++ "/AccessLog/S3BucketName", text},
{access_log_s3_prefix, RootPath ++ "/AccessLog/S3BucketPrefix", text},
{access_log_emit_interval, RootPath ++ "/AccessLog/EmitInterval", integer},
{connection_settings_idletimeout, RootPath ++ "/ConnectionSettings/IdleTimeout", integer},
{cross_zone_load_balancing_enabled, RootPath ++ "/CrossZoneLoadBalancing/Enabled", boolean},
{connection_draining_enabled, RootPath ++ "/ConnectionDraining/Enabled", boolean},
{connection_draining_timeout, RootPath ++ "/ConnectionDraining/Timeout", integer}
], Node).
elb_request(Config, Action, Params) ->
QParams = [{"Action", Action}, {"Version", ?API_VERSION} | Params],
erlcloud_aws:aws_request_xml(get, Config#aws_config.elb_host,
"/", QParams, Config).
elb_simple_request(Config, Action, Params) ->
_Doc = elb_request(Config, Action, Params),
ok.