みんな大好きCentOSをEC2で使ってみます。
Amazon Linuxでおおよそのことは足りるのですが、たまにお客様のご指定やらでCentOSを使う機会があります。
少し前までは親切などこかの誰かが作ってくれたAMIやAMIの自作を試みるしかなかったのですが、今はオフィシャルなAMIが用意されていますので、これを使ってみることにしました。
EC2インスタンスを立てたことがある人でしたら、すぐできます。
罠っぽい箇所がいくつかありますので、後から続く人のために罠ポイントを記しておきます。参考になれば幸いです。 5分程度で読める文量です。「続きを読む」リンクをクリックしてぜひ読んでみてください。
Amazon Linuxでおおよそのことは足りるのですが、たまにお客様のご指定やらでCentOSを使う機会があります。
少し前までは親切などこかの誰かが作ってくれたAMIやAMIの自作を試みるしかなかったのですが、今はオフィシャルなAMIが用意されていますので、これを使ってみることにしました。
EC2インスタンスを立てたことがある人でしたら、すぐできます。
罠っぽい箇所がいくつかありますので、後から続く人のために罠ポイントを記しておきます。参考になれば幸いです。 5分程度で読める文量です。「続きを読む」リンクをクリックしてぜひ読んでみてください。
とりあえずEC2インスタンスを作る
※セキュリティグループやキーペアなど、なければあらかじめ作っておくことをおすすめします。
AWS Management ConsoleでEC2インスタンスを作るいつもの手順で、
AWS Marketplaceで「CentOS」を検索します。
CentOS6.3 x86_64のAMIを検索し、選択します。
CentOSの利用料そのものは無料に感謝しつつ、続けます。
インスタンスタイプ(グレード)やセキュリティグループ、キーペアなど
EC2インスタンスを作るのに必要な項目を選択してインスタンスを作ります。
(ここでセキュリティグループやキーペアなどが必要になります)
がんばってインスタンスを作ってくれます。
インスタンスができました。AWS Management Consoleを見るとちゃんとできてます。
CentOSを俺色に染める
このまま使っても良いのですが、必要都度ごとにAWS Marketplaceから作るのも面倒なので、俺色に染めたCentOSを作ります。
インスタンスを停止してAMIを作ります。停止しなくてもAMIは作れますが、停止するほうが確実なAMIを作ることができます。(AMIを作ったら不要になるインスタンスなので止めてしまいます)
AMIを作ったら、このAMIからインスタンスを作ります。
お好みのAZもしくはVPCに、 お好みのグレードで作ります。(ここではm1.small)
rootボリュームのディスクサイズもお好みで。
swap領域にするためのエフェメラルストレージを割り当てておきます。
m1.smallの場合、エフェメラルストレージは1つ(0番)で150GBを割り当てできます。
インスタンスタイプで割り当てられる数や容量が異なります。詳しくはお調べください。
インスタンスができたら、sshでログインします。
Amazon Linuxでは「ec2-user」ですが、CentOSでは「root」です。罠っぽいポイント
$ ssh -i ./(鍵ファイル) root@(インスタンス名)
増やしたボリュームを使えるようにします。
[root@ip-10-132-133-227 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvde 7.9G 621M 6.9G 9% / tmpfs 828M 0 828M 0% /dev/shm [root@ip-10-132-133-227 ~]# resize2fs /dev/xvde resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/xvde is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/xvde to 5242880 (4k) blocks. The filesystem on /dev/xvde is now 5242880 blocks long. [root@ip-10-132-133-227 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvde 20G 625M 19G 4% / tmpfs 828M 0 828M 0% /dev/shm
エフェメラルストレージをswap領域にします。
[root@ip-10-132-133-227 ~]# free total used free shared buffers cached Mem: 1695376 139208 1556168 0 9872 40972 -/+ buffers/cache: 88364 1607012 Swap: 0 0 0 [root@ip-10-132-133-227 ~]# mkswap -c /dev/xvdf mkswap: /dev/xvdf: warning: don't erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 156352508 KiB no label, UUID=646f6ff5-d08d-4330-9eb3-72b9381dfe17 [root@ip-10-132-133-227 ~]# mkswap -f /dev/xvdf Setting up swapspace version 1, size = 156352508 KiB no label, UUID=d5ee486a-34e4-46eb-aa94-1ead1de3d907 [root@ip-10-132-133-227 ~]# swapon /dev/xvdf [root@ip-10-132-133-227 ~]# free total used free shared buffers cached Mem: 1695376 219524 1475852 0 4260 12424 -/+ buffers/cache: 202840 1492536 Swap: 156352504 0 156352504 [root@ip-10-132-133-227 ~]# vi /etc/fstab /dev/xvde / ext4 defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 /dev/xvdf swap swap defaults 0 0 ←追加
タイムゾーンを日本にします。(お好みで)
[root@ip-10-132-133-227 ~]# date 2013年 2月 20日 水曜日 13:54:01 UTC [root@ip-10-132-133-227 ~]# cp -p /usr/share/zoneinfo/Japan /etc/localtime cp: overwrite `/etc/localtime'? y [root@ip-10-132-133-227 ~]# date 2013年 2月 20日 水曜日 22:56:04 JST
SELinuxが有効になっているので、謝りながら無効にします。ごめんなさい。(お好みで)罠っぽいポイント
[root@ip-10-132-133-227 ~]# getenforce Enforcing [root@ip-10-132-133-227 ~]# setenforce 0 [root@ip-10-132-133-227 ~]# getenforce Permissive [root@ip-10-132-133-227 ~]# vi /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled ←「disabled」に変更 # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
iptablesが動いています。
セキュリティグループでフィルタリングを行うなら二重設定になってしまい、忘れた頃に思わぬ罠になるので止めてしまいます。(お好みで)罠っぽいポイント
[root@ip-10-132-133-227 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@ip-10-132-133-227 ~]# /etc/rc.d/init.d/iptables stop iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] [root@ip-10-132-133-227 ~]# chkconfig iptables off [root@ip-10-132-133-227 ~]# chkconfig --list iptables iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ひととおり調整したとなりましたら、AMIを作っておきましょう。俺色に染めたCentOSができました。
gccなど開発ツールが導入されていないので「yum groupinstall "Development Tools"」を実行し導入しておくのもよいでしょう。
まとめ
- インスタンスを立てるだけならAmazon Linuxとさして違いはありませんでした。
- オフィシャルがAMIを提供しているというのはやはり強みです。お客様は産地にこだわりをお持ちです。
- どうやるのかをとりあえずググったところ、こちらのブログ CentOS公式AMIの起動とServerProtectのインストール を見つけて、とても参考になりました。と、いう『青い鳥』みたいなまさかの展開に。
- インスタンスを立てた後、バージョン指定で各パッケージをインストールする作業があり、RPMの依存性にだいぶ苦しめられるのですが、それはまた別のお話。