Amazon LinuxのmotdにEC2のName Tagを表示する
こんにちは。望月です。
今日はEC2をちょっと便利に使うための小ネタです。
Message of the Day(motd)
message of the day(motd)とは、Linuxサーバにログインした時に表示されるバナーのことです。
Amazon Linuxだと、↓のような画面が表示されることでおなじみですね。
このmotdに、「今どのサーバにログインしたのか」を表示するのは結構一般的なのではないでしょうか。サーバ名を表示するために/etc/motd直接編集したことがある方もいると思います。
ですが、Amazon Linuxではmotdに関する落とし穴があります。cron.dailyにてupdate-motdというプログラムが実行され、日次で/etc/motdの内容が書き換わります。Amazon Linuxの最新パッケージの情報などが常に表示されているのは、このupdate-motdの働きによるものです。
ですので、/etc/motdを直接編集しても翌日には内容が書き換わってしまいます。 *1
ですが、update-motdを有効にしつつ、自前のメッセージをmotdに表示させたい場合もあると思います。
その場合は、/etc/update-motd.d/にスクリプトファイルを配置しておくことで、update-motdのプログラム内で実行され、motdにメッセージを加える事が出来ます。
[ec2-user@ip-172-31-22-121 ~]$ ls -al /etc/update-motd.d/ 合計 24 drwxr-xr-x 2 root root 4096 8月 6 04:48 . drwxr-xr-x 72 root root 4096 8月 6 04:43 .. -rwxr-xr-x 1 root root 220 3月 12 03:30 30-banner -rwxr-xr-x 1 root root 441 3月 12 03:30 70-available-updates -rwxr-xr-x 1 root root 2103 3月 12 03:30 75-system-update [ec2-user@ip-172-31-22-121 ~]$
ファイル名の先頭にSysVinitのような形式で数字が振られています。想像できるかと思いますが、この番号が小さい方から、motdに順番に追加されていくようです。
今回は、EC2のNameタグを取得して、motdに追加するスクリプトを書いてみました。
EC2のDescribeInstancesを利用するので、IAM Roleが必要になります。Read権限のあるIAM Roleを付与したインスタンスで実行してください。
#!/bin/bash region=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//') myInstanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) tagName=$(aws ec2 describe-instances --region ${region} --query "Reservations[].Instances[?InstanceId==\`${myInstanceId}\`].[Tags[?Key==\`Name\`].Value]" --output text) cat << EOF ****************************** This Server is "${tagName}" ****************************** EOF [/bash] <p>スクリプトの標準出力が、そのままmotdに記載されます。メッセージの部分はお好みで変えてみてください。figlet等のAA作成コマンドを利用してもいいかもしれません。(<a href="http://netbuffalo.doorblog.jp/archives/4540527.html" target="_blank" rel="noopener noreferrer">参考</a>)</p> <p>上のスクリプトを<tt>/etc/update-motd.d/99-server-name</tt>として、実行権限をつけて保存し、update-motdをroot権限で実行します。</p> [ec2-user@ip-172-31-22-121 ~]$ ls -al /etc/update-motd.d/ 合計 24 drwxr-xr-x 2 root root 4096 8月 6 04:48 . drwxr-xr-x 72 root root 4096 8月 6 04:43 .. -rwxr-xr-x 1 root root 220 3月 12 03:30 30-banner -rwxr-xr-x 1 root root 441 3月 12 03:30 70-available-updates -rwxr-xr-x 1 root root 2103 3月 12 03:30 75-system-update -rwxrwxr-x 1 root root 479 8月 6 04:49 99-server-name [ec2-user@ip-172-31-22-121 ~]$ sudo update-motd [ec2-user@ip-172-31-22-121 ~]$
再度ログインして、motdが書き換わっているか確認しましょう。
Nameタグにつけておいた「Postfix」が、motdの最後尾に加わりました。
余談
日次で実行されるupdate-motdを無効化したい場合は、以下のコマンドで無効化/有効化できます。
$ sudo update-motd --disable $ sudo update-motd --enable
まとめ
motdを使ってサーバ名を表示させることで、意図せぬサーバでの操作などオペレーションミスを未然に防ぐ可能性を高めることができると思います。活用方法は他にもあると思いますので、ぜひご活用下さい。
脚注
- やったことがあるのは私だけではないはず... ↩