Amazon EC2でCentOS6を使用するときのハマリポイント

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

森永です。
弊社はリモートワークが可能なので、私は休みを取らずに帰省し地元のゆめタウン内でこの記事を書いております。
テーマソングが頭に残るのでどうにかして欲しいです。

さて、先日CentOS6の公式AMI(Amazon公式ではなくCentOS公式)を使って構築を行いました。
その時ハマるポイントがいくつかあったので、まとめておきます。
CentOS7が出た今でも未だに6を使う案件が多いので役立つ方がいれば幸いです。

AMIの選択

MarketplaceでAMIを選択しようとした私に一つ目の関門が現れます。
CentOS6の公式AMIがなんだかいっぱい現れるのです。もうてんやわんやです。

centos6_01

どれを選ぶかはバージョンの要件などでまちまちなのですが、CentOS6をというだけであれば「CentOS 6 (x86_64) - with Updates HVM」をオススメします。

  • CentOS 6.* (x86_64) - Release Media → マイナーバージョン指定ならこれです。PVしかない模様。
  • CentOS 6 (x86_64) - with Updates → 最新版を使用可能だがPVなので旧インスタンスタイプしか選択できない。
  • CentOS 6 (x86_64) - with Updates HVM → 最新版使用可能でHVM。オススメ

最初は「CentOS 6.5 (x86_64)」を選択して、t2系のインスタンスタイプが選べず焦りました。

cloud-init

user-dataを指定して、ミドルウェアやらをインストールしたい!そういう方も多いかと思います。
Amazon Linuxに慣れ親しんでしまうと当たり前になっていますが、こちらcloud-initがインストールされていることが前提なのです。

CentOS6にはcloud-initがインストールされていないので、当然user-dataも使用できません。 使いたい場合にはcloud-initをインストールしましょう。

# yum install cloud-init

デフォルトユーザ

現在(2018/04/12)はデフォルトユーザは「centos」になっています。

無事関門を乗り越え、インスタンスが立ち上がったのでSSHへログインしようとしました。

$ ssh -i .ssh/hogehoge.pem ec2-user@xx.xx.xx.xx
ec2-user@xx.xx.xx.xx's password:

おや?パスフレーズなしの公開鍵のはずなのに何故かパスワードを聞かれます。
実はCentOS6のデフォルトユーザはrootなのです!

$ ssh -i .ssh/cm-morinaga.pem root@xx.xx.xx.xx
[root@ip-10-0-0-0 ~]#

rootでログインするとログインすることが出来ました。
ただ、ちょっとrootログインは怖いので別ユーザを作成しておいたほうが良さそうです。

割り当てディスク

無事rootユーザでSSHログイン出来たので、すかさずディスク容量を確認します。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  797M  6.7G  11% /
tmpfs           498M     0  498M   0% /dev/shm

おんやぁ?EBSボリュームを10GBも割り当てたのに8GBしか認識していないようです。
CentOS6にはcloud-initやdracut-modules-growrootがインストールされていない事が原因です。 このままだとどんなに割り当ててもデフォルトの8GBしか使用できません。

こちらを参考にパーテーションを本来のサイズへ拡張しましょう。
resize2fsだけではうまくいかないので注意が必要です。

SELinux / iptables

ディスクの拡張も終わり、ミドルをインストールしました。
よーし、疎通確認するぞー、と意気込んでみたもののHTTPすら通りません。

セキュリティグループにもNetworkACLにも問題はなさそうです。 おもむろに以下のコマンドを実行してみました。

# getenforce
Enforcing

# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

そう、SELinuxとiptablesが生きているのです。

SELinuxは停止することに賛否両論あるかと思いますが、セキュリティグループがある今、iptablesも使うと2重管理で大変なことになるのは目に見えています。 (もちろん細かい設定をしたいときにお世話になることはあるかと思います。)

今までありがとう、と感謝の念を込めながら停止しましょう。
(SELinuxについての判断は現場次第です。)

# setenforce 0
# vi /etc/selinux/config
~
SELINUX=disabled
~

# service iptables stop
# chkconfig iptables off

AWS CLI

Amazon Linuxばかり使っている私は、おもむろにAWS CLIのコマンドを使い出します。
Tab補完が効かない時点で気づくべきだったのですが。。。

# aws ec2 describe-instances
-bash: aws: コマンドが見つかりません

AWS CLIはデフォルトでは入っていないのです!天地がひっくり返る衝撃!
というほどではないですが、踏み台サーバあたりにはインストールしておきたいところです。

pipのインストールもされていないのでそこからです。

# easy_install pip
~
# pip install awscli
~
# type aws_completer
aws_completer is /usr/bin/aws_completer
# complete -C '/usr/bin/aws_completer' aws
# echo "complete -C '/usr/bin/aws_completer' aws" >> $HOME/.bashrc

これで補完まで出来るようになりました。(bashの場合)

NTP

サーバでは正確な時刻というのが非常に重要です。
こちらもAmazon LinuxではNTPが最初から設定されているので忘れがちです。

# ntpq -p
-bash: ntpq: コマンドが見つかりません

CentOS6のデフォルトではntpdがインストールされていません。 インストールして、お好きなNTPサーバを設定しましょう。

# yum install ntp
~
# vi /etc/ntp.conf
~
server <お好きなNTPサーバ1>
server <お好きなNTPサーバ2>
~
# service ntpd start
Starting ntpd:                                             [  OK  ]
# chkconfig ntpd on
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+s97.GchibaFL4.v 133.243.238.244  2 u   38   64    1    6.468   -0.459   0.227
*x.ns.gin.ntt.ne 103.1.106.69     2 u   40   64    1    9.504    3.962   0.185
 chobi.paina.jp  .STEP.          16 u    -   64    0    0.000    0.000   0.000
+108.61.223.189. 103.1.106.69     2 u   38   64    1    4.052   -0.863   0.145

出来ました!

最後に

CentOS7への移行が進み、CentOS6を使うことがなくなってきたかと思いますが、未だに使われ続けているという印象です。
先人の残した知恵で何とか乗り切ることが出来ました。御礼申し上げます。

参考文献