2016年11月22日火曜日

rubyのaws-sdkでALBのターゲットグループに紐付いているEC2インスタンスのIPを取得してみた

ELBからALBにリプレイスを行うにあたって、ALB配下のインスタンスのIPを取得する必要があったので調べました。
ALBはターゲットグループを割り当てる形になるので、指定したターゲットグループに紐づくインスタンスを取得すればIP取れました。

require 'aws-sdk'

alb = Aws::ElasticLoadBalancingV2::Client.new(
  region: 'ap-northeast-1',
  access_key_id: 'xxx',
  secret_access_key: 'xxx'
)

ec2 = Aws::EC2::Client.new(
  region: 'ap-northeast-1',
  access_key_id: 'xxx',
  secret_access_key: 'xxx'
)

instance_healths = alb.describe_target_health({ target_group_arn: 'xxx' })
instance_ids = instance_healths.target_health_descriptions.map {|t| t.target.id }

ec2_instances = ec2.describe_instances({ instance_ids: instance_ids })
instance_ips = ec2_instances.reservations.map { |e| p e.instances[0].public_ip_address }

2016年11月9日水曜日

aws-sdk v2でS3操作するとエラー出た

rubyのaws-sdkでS3の操作しようとしたら、エラー出たのでその時の対応。
sdkのバージョンは以下で指定
gem 'aws-sdk', "~>2.1"

出たエラーは以下のようなもの
F, [2016-11-08T11:23:44.711503 #21962] FATAL -- : 
Aws::Errors::MissingRegionError (missing region; use :region option or export region name to ENV['AWS_REGION']):
  app/xxx:12:in `new'
  app/xxx:12:in `update_s3_bucket_acl'
  app/xxx.rb:338:in `update_s3_bucket_acl'
  app/xxx.rb:323:in `block in update'
  app/xxx.rb:306:in `update'
  config/initializers/quiet_assets.rb:6:in `call_with_quiet_assets'

そのときのコードの一部がこれ
require 'aws-sdk'

s3 = Aws::S3::Resource.new(
  access_key_id: #{access_key_id},
  secret_access_key: #{secret_access_key}
)

bucket = s3.bucket(bucket_name)

対応内容はエラーにまんま書いてあるように、regionを追加しました
s3 = Aws::S3::Resource.new(
  region: 'ap-northeast-1',
  access_key_id: #{access_key_id},
  secret_access_key: #{secret_access_key}
)

S3ってregion関係ないと思うので指定いらなそうなのになと思うのは勉強不足なのでしょう...


参考URL
http://qiita.com/rikitoro@github/items/45f9c85c218343e69014
http://stackoverflow.com/questions/28825047/aws-sdk-v2-for-s3