2016年10月24日月曜日

rubyのaws-sdkでELBに紐付いているEC2インスタンスのIPを取得しようとしたらバージョン2系で記法が変わってた件

ELBに紐付いているEC2インスタンスのIPを取得していたのですが、
aws-sdkのバージョンを1系から2系に変更したらけっこう記法が変わってたので調べました。

バージョン1系
require 'aws-sdk'

elb_name = 'aaa'

AWS.config({
  access_key_id: 'xxx',
  secret_access_key: 'xxx',
  ec2_endpoint: 'xxx',
  elb_endpoint: 'xxx'
})

elb = AWS::ELB.new
lb_instances = elb.load_balancers[elb_name].instances
instance_ips = lb_instances.map { |instance| instance.public_ip_address }

バージョン2系
require 'aws-sdk'

elb_name = 'aaa'

# ELBクライアント
elb = Aws::ElasticLoadBalancing::Client.new(
  region: 'xxx',
  access_key_id: 'xxx',
  secret_access_key: 'xxx'
)

# EC2クライアント
ec2 = Aws::EC2::Client.new(
  region: 'xxx',
  access_key_id: 'xxx',
  secret_access_key: 'xxx'
)

lb_instances = elb.describe_load_balancers({ load_balancer_names: [elb_name] })[:load_balancer_descriptions][0][:instances]
ec2_instances = ec2.describe_instances({ instance_ids: lb_instances.map { |instance| instance.instance_id } })
instance_ips = ec2_instances.reservations.map { |e| e.instances[0].public_ip_address }