LoginSignup
4
5

More than 5 years have passed since last update.

Ruby で EC2インスタンスにつけた tag の値をサーバー内から取得する

Posted at

背景

  • AWS のタグを Ruby で取得したい
  • AWS のアクセス用クレデンシャルとかの面倒な設定はヤだ
  • カンタンに取得したい

やったこと

  • IAM ロールを使って、EC2 のアクセス権を設定
    • AWS クレデンシャルとかの環境変数は設定せず
    • AWS-CLI を内部的に利用する
  • タグの値を切り出すのは JMESPath を利用
  • 内部的に ec2-metadata コマンドを利用
  • リージョンは Availability Zone から最後の1文字を除去
  • describe-instancesdescribe-tags かは悩んだ
    • 結局エイヤと describe-instances を使うことに決めた。

実装の詳細

# module to retrive AWS EC2 tag
module AwsMetaData
  def self.availability_zone
    `ec2-metadata --availability-zone | sed 's/placement: //'`.chomp
  end

  def self.region
    availability_zone[0...-1]
  end

  def self.instance_id
    `ec2-metadata --instance-id | sed 's/instance-id: //'`.chomp
  end

  def self.ec2 command
    commandline = "aws --region #{region} --output text ec2 #{command}"
    `#{commandline}`.chomp
  end

  def self.tag key
    jamespath = "Reservations[].Instances[].Tags[?Key=='#{key}'].Value"
    instance = "--instance-ids #{instance_id}"
    ec2 %(describe-instances #{instance} --query #{jamespath})
  end
end

参考文献

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5