EC2インスタンス一覧のhostsファイルを自動で作成する方法

EC2インスタンス一覧のhostsファイルを自動で作成する方法メモ。



EC2インスタンス一覧のhostsファイルを自動で作成する方法


最初に「sudo yum install -y jq」でjqコマンドをインストールすること。jqはJSONパーサー。awsコマンドは最近のamazon linuxなら最初から入っている。


ホスト名にはインスタンス名を使っている。インスタンス名の値は、{Key: 'Name', Value: 'インスタンス名'}というJSONに入っている。インスタンス名には重複しない値を付けること。


最終的なrubyスクリプトは下記の通り。「ruby create_hosts.rb >hosts.tmp」を実行した後、hosts.tmpを/etc/hostsにコピーすればよい。


# create_hosts.rb
require 'json'

json = `aws ec2 describe-instances | jq '[.Reservations[].Instances[]]'`
instances = JSON.parse(json)

hosts = [
  "127.0.0.1\tlocalhost localhost.localdomain"
]

instances.each do |i|
  next if !i.has_key?('Tags')
  next if !i.has_key?('State')
  next if i['State']['Name'] != 'running'
  i['Tags'].each do |tag|
    next if !tag.has_key?('Key') || !tag.has_key?('Value')
    next if tag['Key'] != 'Name'
    host = "#{i['PrivateIpAddress']}\t#{tag['Value']}"
    hosts.push(host)
  end
end

puts hosts

上記のrubyスクリプトの実行前に、AWSの設定を環境変数に入れておく必要がある。アクセスキーとシークレットキーはAWSのSecurity Credentialsの値を入れること。


/etc/profile.d/に置けば、aws_conf.shはログイン時に自動で読み込まれる。


# /etc/profile.d/aws_conf.sh
export AWS_ACCESS_KEY="aws-access-key"
export AWS_SECRET_KEY="aws-secret-key"
export AWS_DEFAULT_REGION="ap-northeast-1" # 東京リージョンの場合

# aws_conf.shを明示的に読み込む場合
source aws_conf.sh

上記のスクリプトの利用例として、EC2サーバーへhostsを一斉配信する方法も書きました。


EC2サーバーへhostsを一斉配信する方法


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール