EC2上でCentOSを使う 〜 AWS Marketplaceを利用してみる

※ このエントリは通常のEC2利用経験があり、Security GroupやKey Pairのような概念を理解している方を対象としています。

EC2でCentOS

EC2で利用するLinuxディストリビューションのうち、気軽に利用するデファクトと言えばAmazon Linuxです。その他にもUbuntu等いくつかのディストリビューションがEC2のQuick Startのウィザードから利用できるようになっています。

ec2-quickstart

しかし、やむなき理由で敢えてCentOSを利用したい、という場面も稀に存在します。そういった時、Community AMIからCentOSを検索しても、世界中のAWSユーザが公開する様々な目的のAMIが大量に表示されてしまい、自分の目的に合ったAMIや、最もシンプルな構成のプレーンなAMIを見つけ出すのはかなり困難と言って良いでしょう。

many-options

AWS Marketplace

そこで、AWS Marketplaceです。

AWS Marketplaceは、各ベンダがソフトウェアプロダクトをインストール済みのAMIを提供し、利用者は自身のEC2インスタンスとしてソフトウェアを利用できる、という仕組みです。そして、EC2の利用料+ソフトウェアの利用料を、AWSアカウントの利用料金として支払えるのです。

Marketplaceという名前の印象もあり、個人的に「なるほど、有償のソフトウェアを販売する場なんだな」という理解をしていたのですが、Marketplaceで提供されている様々なAMIを見てみると、意外にも「ソフトウェア利用料は無料」、つまりEC2等利用料のみで利用できるソフトウェアも多く登録されていました。

Marketplaceでは、本家CentOS.orgが提供する純正のAMIが提供されています。もちろん、無料で。前述のような場面ではこれを利用するのが一番でしょう。

EC2でCentOSを起動する

ここからは、単純にCentOS 6のEC2インスタンスを起動する手順をご紹介します。まず、上記のようにMarketplaceでCentOSを検索します。ここでは「CentOS 6 x86_64 with Updates」を選択します。何となく、検索で先に出てくる「Release Media」の方を選択してしまいがちですが、こちらはリリース時点のインストールDVDに基づいたAMIであり、セキュリティアップデート等が適用されていないことに注意が必要な、特殊用途・上級者向けのものです。

genuine-centos

ソフトウェアを選択すると、詳細画面となります。ページの右カラムにはこのソフトウェアを利用するにあたっての料金表が表示されています。CentOSでは、ソフトウェア利用料が0.00/hrとなっているのが分かると思います。(注:表の下の注釈にもある通り、EBS料金及びデータ転送料は別途必要です)

aws-marketplace-instance-detail

料金表の上にある Continue ボタンをクリックすると、起動画面に遷移します。起動の方法は「1-Click Launch」と「Launch with EC2 Console」の2種類があります。ここはお手軽に1-Clickで起動してみましょう。Version(ここでは6しか選択できません)やRegion(ここではUS Eastとしてみます)、Instance Type(ここではt1.micro)、Firewall settings(いわゆるSecurity Group)等、EC2を起動するにあたって必要な設定をし、右上の Accept Terms & Launch with 1-Click をクリックします。

marketplace-detail

User Data 等詳細な起動設定をする必要がある場合は、「Launch with EC2 Console」の方から進んでください。Accept Termsボタンをクリックすると、左カラムの「Launch with EC2 Console」ボタンが有効になります。その後は、通常のEC2起動手順とほぼ同様です。

ちなみに、Marketplace上のソフトウェアを利用する際は、AWSの規約の他に、利用するソフトウェアのEULA(利用許諾契約)に同意が必要です。ボタンにある Accept Terms とは、このEULAに対する同意を表します。

ボタンをクリックすると、起動が始まります。Stage 1 と 2 が両方とも完了するまで、お待ち下さい。

aws-marketplace-launching

起動が完了すると、以下のような画面に遷移します。

aws-marketplace-launched

EC2のAWS Management Consoleでインスタンスが起動していることを確認します。

ec2-instance-launched

SSHでサーバに接続

次に、SSHでサーバに接続しましょう。Amazon Linuxの時と同じようにKey Pairを利用して接続します。EC2の利用に慣れている方は、思わず ec2-user というユーザで繋ごうとしてしまうかと思いますが、CentOSにはこのようなユーザが用意されていません。危なっかしいな…と思いながらも、ひとまず root で接続し、下記の手順で ec2-user を作成してセキュリティを確保すると良いでしょう。

ユーザの作成と鍵のコピー

ssh -i ********.pem root@********.amazonaws.com
adduser ec2-user
cp -r ~/.ssh /home/ec2-user/
chown -R ec2-user:ec2-user /home/ec2-user

ec2-userにsudoの権限を与え

visudoで、以下の2行についてのコメント(行頭#)を外します。

usermod -G wheel ec2-user
visudo
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: ALL

sshdでrootのログインを拒否、パスワード認証も拒否する

/etc/ssh/sshd_configで、以下の3項目の設定を確認・変更します。

vi /etc/ssh/sshd_config
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

sshdを再起動し、設定を反映します。

/etc/init.d/sshd restart

これで、rootユーザでのSSHが禁止され、ec2-userで鍵認証SSH接続ができ、さらにsudoが利用できるようになりました。つまり、Amazon Linuxライクな環境ができあがったことになります。さらなるセキュリティの確保は、別のエントリに譲りますが、サーバ運用にあたって適切な設定を行うようにしましょう。

おまけ:httpdをインストールする

yumを利用してhttpdを普通にインストールします。また、それに伴いEC2のSecurity Groupで80番ポートを開けておきましょう。

sudo yum -y install httpd
sudo /etc/init.d/httpd start

しかし、これだけではHTTPサーバを公開できません。インストールしたての最小構成CentOSでは、iptablesの80番のポートが空いていないのです。httpdをインストール/起動しつつ、Security Groupの設定にも問題がないのに、なぜか80番ポートにアクセスできない場合、iptablesの設定を疑ってみてください。

以下のコマンドで、HTTP及びHTTPSのポートを開けることができます。

sudo /sbin/iptables -I INPUT 5 -p tcp --dport https -j ACCEPT
sudo /sbin/iptables -I INPUT 5 -p tcp --dport http -j ACCEPT
sudo /sbin/service iptables save

テストページを確認してみましょう。

test-page

まとめ

Amazon Linuxは、ほぼCentOSと同じようなものと考えて差し支えないディストリビューションと言えますが、当然細かい違いがあり、その違いが問題となってしまうこともあります。そういった時は、MarketplaceのCentOSを利用するのも一つの選択肢として考えてみると良いでしょう。