Amazon LinuxのmotdにEC2のName Tagを表示する

2014.08.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。望月です。
今日はEC2をちょっと便利に使うための小ネタです。

Message of the Day(motd)

message of the day(motd)とは、Linuxサーバにログインした時に表示されるバナーのことです。
Amazon Linuxだと、↓のような画面が表示されることでおなじみですね。


motd_1

この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が書き換わっているか確認しましょう。


motd_2

Nameタグにつけておいた「Postfix」が、motdの最後尾に加わりました。

余談

日次で実行されるupdate-motdを無効化したい場合は、以下のコマンドで無効化/有効化できます。

$ sudo update-motd --disable
$ sudo update-motd --enable

まとめ

motdを使ってサーバ名を表示させることで、意図せぬサーバでの操作などオペレーションミスを未然に防ぐ可能性を高めることができると思います。活用方法は他にもあると思いますので、ぜひご活用下さい。

脚注

  1. やったことがあるのは私だけではないはず...