狠狠撸

狠狠撸Share a Scribd company logo
AWSで構築したのだよ 
「ec2起動時にホスト名を変更したい」
お品書き 
? ユーザのコンソール操作をログに残したい 
? ec2で自分のインスタンスIDが知りたい 
? ec2で自分についているタグを読み取りたい 
? ec2起動時にホスト名を変更したい 
? ec2起動時にクラウドウォッチに追加したい 
? Amazon LinuxのsshをユーザID/PWに変更し 
たい。 
? VPNのプライベートネットワークでNTPを使いたい 
? プライベートネットワークのRDSにssh経由で接続したい 
? 夜間にec2を落としたい 
? サーバーのシャットダウン時にログを退避したい 
? プロセス監視、メモリ残、ディスク使用率をCloudwatc 
hに追加したい 
? nginxで名前解決を都度行いたい
ec2起動時にホスト名を 
変更したい(1/3) 
? デフォルトのホスト名を確認する 
$ hostname -a 
localhost.localdomain ip-10-0-0-41 
$ cat /etc/hosts 
127.0.0.1 localhost localhost.localdomain ip-10-0-0-41
ec2起動時にホスト名を 
変更したい(2/3) 
? ホスト名を変更するためのスクリプトをコーディ 
ングします。ホスト名はタグに書いた名前を使い 
ます。 
①変更対象のインスタンスIDを取得する。 
②タグの名前の取得 
③/etc/hostsと/etc/sysconfig/networkの書き換え 
④hostnameコマンドの実行
$ vi setHostName.rb 
#!/usr/bin/env ruby 
# encoding: utf-8 
# 1.hostsファイルを書き換える 
# 2.networkファイルを書き換える 
# 3.hostnameを書き換える 
require 'rubygems' 
require 'aws-sdk' 
def get_tag_set(ec2, instance_id) 
tag_set = ec2.describe_instances(:instance_ids =>  
[instance_id])[:instance_index][instance_id][:tag_set] 
return tag_set 
end 
AWS.config(YAML.load(File.read("./aws.yml"))) 
@instanceID = `wget --no-proxy -q -O  
- http://169.254.169.254/latest/meta-data/instance-id` 
@ec2 = AWS::EC2.new().client
tag_set = get_tag_set(@ec2, @instanceID) 
tag_set.each do |tag| 
p tag[:key] 
if /name/i =~ tag[:key] 
@name = tag[:value] 
if @name.length > 0 
`sed -i -e "/^127.0.0.1/d" /etc/hosts` 
`echo "127.0.0.1 localhost localhost.localdomain #{@name}" >> /etc/hosts` 
`sed -i -e "/^HOSTNAME/d" /etc/sysconfig/network` 
`echo "HOSTNAME=#{@name}" >> /etc/sysconfig/network` 
`hostname #{@name}` 
end 
end 
end
作成したスクリプトを実行します。 
# ruby setHostName.rb 
# cat /etc/hosts 
127.0.0.1 localhost localhost.localdomain LogicApp01 
起動時に作成したスクリプトが毎回実行されるように、/etc/rc.d/rc.localに記載 
します。 
# vi /etc/rc.d/rc.local 
#!/bin/sh 
# 
# This script will be executed *after* all the other init scripts. 
# You can put your own initialization stuff in here if you don't 
# want to do the full Sys V style init stuff. 
touch /var/lock/subsys/local 
/usr/bin/ruby /opt/aws/setHostName.rb
CloudInit でもできますよ….

More Related Content

Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更

  • 2. お品書き ? ユーザのコンソール操作をログに残したい ? ec2で自分のインスタンスIDが知りたい ? ec2で自分についているタグを読み取りたい ? ec2起動時にホスト名を変更したい ? ec2起動時にクラウドウォッチに追加したい ? Amazon LinuxのsshをユーザID/PWに変更し たい。 ? VPNのプライベートネットワークでNTPを使いたい ? プライベートネットワークのRDSにssh経由で接続したい ? 夜間にec2を落としたい ? サーバーのシャットダウン時にログを退避したい ? プロセス監視、メモリ残、ディスク使用率をCloudwatc hに追加したい ? nginxで名前解決を都度行いたい
  • 3. ec2起動時にホスト名を 変更したい(1/3) ? デフォルトのホスト名を確認する $ hostname -a localhost.localdomain ip-10-0-0-41 $ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain ip-10-0-0-41
  • 4. ec2起動時にホスト名を 変更したい(2/3) ? ホスト名を変更するためのスクリプトをコーディ ングします。ホスト名はタグに書いた名前を使い ます。 ①変更対象のインスタンスIDを取得する。 ②タグの名前の取得 ③/etc/hostsと/etc/sysconfig/networkの書き換え ④hostnameコマンドの実行
  • 5. $ vi setHostName.rb #!/usr/bin/env ruby # encoding: utf-8 # 1.hostsファイルを書き換える # 2.networkファイルを書き換える # 3.hostnameを書き換える require 'rubygems' require 'aws-sdk' def get_tag_set(ec2, instance_id) tag_set = ec2.describe_instances(:instance_ids => [instance_id])[:instance_index][instance_id][:tag_set] return tag_set end AWS.config(YAML.load(File.read("./aws.yml"))) @instanceID = `wget --no-proxy -q -O - http://169.254.169.254/latest/meta-data/instance-id` @ec2 = AWS::EC2.new().client
  • 6. tag_set = get_tag_set(@ec2, @instanceID) tag_set.each do |tag| p tag[:key] if /name/i =~ tag[:key] @name = tag[:value] if @name.length > 0 `sed -i -e "/^127.0.0.1/d" /etc/hosts` `echo "127.0.0.1 localhost localhost.localdomain #{@name}" >> /etc/hosts` `sed -i -e "/^HOSTNAME/d" /etc/sysconfig/network` `echo "HOSTNAME=#{@name}" >> /etc/sysconfig/network` `hostname #{@name}` end end end
  • 7. 作成したスクリプトを実行します。 # ruby setHostName.rb # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain LogicApp01 起動時に作成したスクリプトが毎回実行されるように、/etc/rc.d/rc.localに記載 します。 # vi /etc/rc.d/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/bin/ruby /opt/aws/setHostName.rb