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を一斉配信する方法も書きました。