如何在Ruby中获取AWS ELB的Hosted Zone ID?

时间:2011-12-02 02:08:26

标签: ruby amazon-ec2 amazon-web-services amazon-elb

我正在编写一些Ruby代码,使用Zone apex虚拟A记录功能自动更新Route53 DNS区域(域)。但是,要设置此类记录,除了FQDN之外,还需要Elastic Load-balancer Hosted Zone ID。

有谁知道最好的方法吗? (即任何可以做到的宝石等?) 我目前正在使用appoxy aws gem和pcorliss的route53 gem。

感谢。

2 个答案:

答案 0 :(得分:2)

在现代AWS Ruby SDK's ELB module中,我提出了这个解决方案(部分伪代码):

credentials_data = # something
config = AWS.config(credentials_data)

elb_name = 'your.elb.dns.name.elb.amazonaws.com.'
elb_client = config.elb_client
response = elb_client.describe_load_balancers()
elbs = response[:load_balancer_descriptions]
the_elb = elbs.select {|elb| elb[:dns_name] == elb_name}.first
the_hosted_id = the_elb[:canonical_hosted_zone_name_id]

然后,在执行Route53之后,您可以将此数据包括在内:

# ...
:alias_target => {
  :dns_name => elb_name,
  :hosted_zone_id => the_hosted_id,
  :evaluate_target_health => true, # or false, if you wish
},
# ...

我承认,我确实希望所有这一切都有一个很好的“ruby-ish”(更惯用)的前端(或许有,我只需要找到它),但上面的工作原理我使用股票aws-sdk宝石。希望在某些时候这对某人有帮助。

答案 1 :(得分:0)

Aws gem Aws::Elb代码正在使用AWS ELB API版本2009-05-15。亚马逊从那时起已经有几个API版本更新 - 最新的目前是2011-11-15。

DescribeLoadBalaners响应的格式在版本2009-05-15和版本2009-11-25之间进行了更改,这打破了当前的Aws::Elb代码(Listeners已更改为ListenerDescriptions )。此外,在版本2011-04-05之前,未添加响应中的托管区域元素。

可以通过黑客攻击Aws::Elb来获取托管区域信息,以使用最新的API并提取相关数据。

现在我们只需要让Aws维护者更新官方宝石。