AWS Elastic Beanstalk+WordPressで簡単にWebサイトを作る
(2015/5/12更新)管理用インスタンスをbeanstalkで作成すると逆にデプロイの手間が増える、AutoScaling Groupに自動的に入れられてしまう(停止した場合、元のAMIの状態に戻る)というご意見を頂きました。
管理用インスタンスについては手動でEC2にて作成するという方法に変更しました。
森永です。
今回は、サクッとWebサイトを立ち上げたいとお考えの人向けに、AWS Elastic Beanstalkを利用して、WordPressでWebサイトを立ち上げてみたいと思います。テクニカルなことは、当ブログでも過去に記事がありますので、そちらも参照してもらい、今回はこんな流れで簡単に作れますよ、というところをお見せできればと思います。
- AWS Elastic BeanstalkでWordPressを始める
- AWSにWordPress3.8をインストールしてみた – その1
- AWSにWordPress3.8をインストールしてみた – その2
はじめに
最終的なゴールの構成イメージはこんな感じです。
WEBサーバにおいて静的コンテンツの扱いは重要です。(コスト的にも、可用性的にも)
静的コンテンツだけであればS3とCloudFrontとELBとRoute53という横綱コンビを作れるのですが、WordPressを使う以上EC2が必要になってしまいます。
(横綱についてはこちらの記事を御覧ください。ベストプラクティスってかっこいい。)
ここで今回は、動的コンテンツはEC2、画像のような静的コンテンツはS3というハイブリッド式を目指します。
サクッととは言いましたが、結構AWSのあらゆるサービスを駆使します。ワクワクしますね(*^_^*)
Elastic Beanstalkの立ち上げ
アプリケーションと本番環境の作成
まずは、アプリケーションと、その中に公開用の本番環境を作成します。
作成の中でWordPressの初回デプロイも行うので、事前にWordPressをダウンロードしておきます。wordpress-4.2.2-ja.zipというような、zipファイルになっていますが、これをそのまま使用します。
以下の画面で、右上の[Create New Application]をクリックしてください。
ここで注意してもらいたいのは、今回は[Select a Platform]のプルダウン選択から[Launch Now]をしてはいけません。な ぜなら、ここで[Launch Now]をしてしまうと、RDSなしでアプリケーションサーバが立ち上がってしまい、後からRDSを追加することになるのですが、そうすると、RDSに紐 付くSecurity Groupの設定が自動ではアプリケーションサーバと疎通できるようになってくれないのです(Beanstalkを信頼しきっていた私は、ここで少しハマ りました・・・)。
あとは、画面に従って入力なり選択なりを進めていきます。
最初の画面で、作成するアプリケーションの名前を指定します。
WebサーバなのでCreate web serverを選択します。
S3にログを置いたり、CloudWatchの設定を行うためにIAM Roleが必要です。権限の細かい設定は大変なので、Create an IAM role and instance profile.を選択しておきましょう。
今回はWordPressを稼働させますので、PHPを選択します。ELB+AutoScalingはデフォルトのままにします。
ここで、先ほどダウンロードしておいたWordPressのzipファイルを選択します。
ちなみに、[Deployment Limits]のパラメータは、1回のデプロイで対象にするアプリケーションサーバの台数(割合)を指定するもののようです。
ここでは、デフォルトで、最初に指定した[Application Name]から値が生成されています。ただし、URLがすでに使用されている場合は、別の名前を指定する必要があります。
WordPressはMySQLを使用しますので、RDSを作成します。あと、環境はお決まりのVPC内に作成します。
この画面は、すべてデフォルトで進みます。ただし、いろいろと大切な内容ですので、出来ればちゃんと考えて設定したほうがよいです。
タグは、特に何も指定せずに進みます。一応、Beanstalk側でNameタグに環境名を付けてくれますので、それを見れば今回作成されたリソースが判別できます。
RDSの設定画面では、「mysql」を選択し、ユーザとパスワードを指定します。また、可用性を考慮してMulit-AZを選択します(ここは用途に合わせてシングルでも構いません)。
VPCの設定は、デフォルトで作られている設定をそのまま利用してしまいます。
実際構築する際には、Fronted(ELBを配置)、Application(EC2インスタンスを配置)、Datahouse(RDSを配置)とサブネットを分けたVPCを用意しましょう。
最後に、いままでの設定内容をさらっと確認し、環境を作成します。
ダッシュボードで十数分ほど待ち(RDS作成が結構かかります。。)、以下の画面になったら環境の出来上がりです。
ただし、このままhttp://wordpresstest-prd.elasticbeanstalk.com/にアクセスしてもエラーになりますので、以下の画面で[Document root]を「/wordpress」に変更します([Configuration] > [Software Configuration])。
これで、http://wordpresstest-prd.elasticbeanstalk.com/にアクセスして、スタートページが表示されれば成功です。
以上でBeanstalkの立ち上げは完了です。
管理インスタンスの構築
ここで焦ってWordPress環境の構築を行ってはいけません。
何故ならWordPressの設定を本番環境で変更してもローカルに書き込まれた設定値は、AutoScalingにより初期化されてしまうからです。
設定値を保持するために、管理用の環境を作成し、その環境で設定変更をしたら本番環境にデプロイするという運用にします。
なお管理用のインスタンスは、Beanstalkを使用せずに単純なEC2インスタンスで作成します。
理由としては、
- 管理インスタンスに変更を加えた際に、zip化してデプロイする必要がある。
- EBで作ったインスタンスはAutoScalingに設定されるため、強制終了される可能性がある。(その際更新していたデータは消えてしまう)
管理のみに使用する(エンドユーザのアクセスはない)インスタンスなので最小の構成で可用性も必要ありません。
t2.microのシングル構成で建ててしまいましょう。
インスタンス生成時に使用するAMIは本番環境のインスタンスのAMIを取得し、使用します。
AWSのサービスを使用するのでAdminのIAM Roleもつけておきましょう。(権限の修正は後から行えますが、IAM Roleを付け直すことは出来ないので、なんでもいいのでつけておいて下さい。)
また、セキュリティグループの設定は、管理者のIPのみSSH、HTTP(場合によってはHTTPS)を許可しておきます。
もし、管理会社が多くIPが頻繁に変更されるという場合には.htaccessを使ったアクセス制限でもいいかと思います。
(WP Htaccess EditorというWordPress上で.htaccessを編集できるプラグインもあります。)
管理サーバからRDSへアクセスする必要がありますので、インスタンスが出来たらRDS用のセキュリティグループに管理サーバからの穴を開けます。
最後に、必要であればEIPを付与して、インターネットからのアクセスが出来る状態にしておきましょう。
WordPressのセットアップ
ここまでで一通り環境ができたので、WordPressのセットアップに入ります。
初期設定
WordPressのパブリックIPにアクセスします。
[さあ、始めましょう!]をクリックし、以下の画面でRDSへの接続情報を指定します。
- データベース名:ebdb(Beanstalkで作成されるデフォルトDB名)
- ユーザ名:wpadmin(RDS設定画面で指定した名前)
- パスワード:********(RDS設定画面で指定したパスワード)
- データベースのホスト名:nantoka.kantoka.ap-northeast-1.rds.amazonaws.com:3306(※2)
- テーブル接頭辞:wp_(デフォルトのまま)
問題がなければ、[インストール実行]です。
サイトの必要情報(良い子はパスワードをちゃんと強固にしましょう!)を入力して、インストールを開始します。
以下の画面が表示されれば成功です。
管理画面にログインできることを確認しましょう。
まとめ
これでWordPress環境の構築はひとまず完了です。おめでとうございます。
少し記事が長くなってきたので二部構成とさせていただきます。
次回はWordPressの設定や、CloudFront、Route53などなどの設定を行います。AWSちゃんの本領発揮ですね!!
ワクワク(*^_^*)
続きはこちらからどうぞ!
補足
※1 以下の画面で確認できます([Configuration] > [Instances])。一つはデフォルトで、もう一つが自動作成されたものになります。
※2 本番環境の以下の画面で確認できます([Configuration] > [RDS])。