WordPressをAWSで構築する時にどうすればいいか考えてみた

最近プライベートでWordPressAWSで立ち上げることがあったが、

  • 「どんなサービスを使えばいいか」
  • 「どんな構成にすればいいか」
  • 「どんな感じで料金がかかるのか」

などわからないことが多かったのでここでまとめてみた。

大前提として抑えておくべき用語

このページのリージョンとアベイラリティゾーンだけでも抑えておいた方がよいなと。。。

docs.aws.amazon.com

リージョン

クラウドが提供される地域、日本でつかうなら、東京リージョンを選んだり、アメリカで使うならオレゴンバージニアのリージョンを選ぶとその地域の筐体が使える。

アベイラリティゾーン

よくAZと言われる。リージョン内のデータセンターを物理的に分けたもの。データセンターが一箇所しかないと、津波被害とかが起こった際に全てがパーになる。それを未然に防ぐためにリージョン内に何個も分けてAZを用意している。

 

WordPressを立ち上げる際に必要なサービス

マストで必要なサービス

・EC2 (t2micro)
・EBS(EC2用のストレージ)
VPC
・Route53

マストな各サービスの説明

EC2(今回はt2microを使用)

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com

ざっくりいうとスケーラブルなサーバー。インスタンスタイプという名称で自身の環境にあったスペックを選べる。いろんな文献を読んでいるとt2.microを使うみたいなので今回はそれを使用。

EBS

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com

EC2のストレージ、EC2用のストレージは他にもインスタンスストア
t2.microを選ぶと自動的にEBSになってしまうので、今回はこれを選ぶ。

VPC

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com


リージョン内の仮想的なネットワークぐらいにイメージを持っておくと良いかもしれません。VPCで抑えておくべきは、「サブネット」、ファイアーウォール機能である「セキュリティグループ」・「ネットワークACL」。

サブネット

VPC内をさらに小さなネットワークに分けられる機能です。ただし、サブネットはAZ内にのみ作れる。AZをまたいだサブネットを作れない。サブネットはその性質から、プライベートサブネット、パブリックサブネットに分けられる。

  • プライベートサブネット
    インターネットにアクセスできないネットワーク

  • パブリックサブネット
    インターネットにアクセスできるネットワーク。サブネットにインターネット接続ができる「インターネットゲートウェイ(IGW)」をアタッチし、ルートテーブル(ルーティングを決める機能)でデフォルトゲートウェイ送信先:0.0.0.0/0)にIGWを設定したもの。

  • セキュリティグループ
    インスタンスごとに設定できるファイアーウォール。インバウンドでは送信元のIPやアクセスを受け付けるポート番号を指定でき、アウトバンウンドでは送信先のIPやアクセス先のポート番号などを指定できる。
    ステートフルなので、たとえアウトバンドしか許可していないパケットの戻りも受け付ける。

  • ネットワークACL
    サブネット単位で設定できるファイアーウォール。インバウンドでは送信元のIPやアクセスを受け付けるポート番号を指定でき、アウトバンウンドでは送信先のIPやアクセス先のポート番号などを指定できる。
    ステートレスなので、たとえアウトバンドしか許可していないパケットの戻りも受け付けない。
Route53

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com


要はDNS、スケーラブルなDNSドメインの申請とかもできるらしい。

本格的にやるなら手をつけたいサービス

・RDS
・S3
・CloudFront

本格的にやるなら手をつけたいサービスの説明

RDS

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com


フルマネージドなデータベースサービス。物理層ミドルウェア層とかをあんまり気にしなくていい。
以下の項目が自動でやってくれる

  • 最新パッチの適用
  • バックアップ
  • ホストの交換

さらに、Multi-AZという機能を使うとスタンバイインスタンスを別のAZに用意してくれる。

S3

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com


99.999999999% の耐久性を持っているストレージ。URLベースでファイルを公開できる機能もある。多くのAWSがS3との連携機能を持っているので

CloudFront

↓正式な説明はここにあるのでよくご覧いただきたい

aws.amazon.com


AWSCDNコンテンツ配信に使われる。

注意

今回は・・・ELBを使わない理由

今回プライベートでやっているかつ本格っぽくいろんなサービスを使いたいという希望があったので、ELBは使っていません。ELB使うとEC2を何個か持たないといけなくなるのでそんな余裕がなかったということです。
本当はELBをつかって冗長構成をとった方がいいと思う。

WordPressの構築パターン

EC2・Route53のみの場合

f:id:fumishitan:20171126213326p:plain

メリット:

  • AWS MarketPlaceにあるソフトウェアを使って構築が楽
  • 安価で運用できる

デメリット:

  • インターネットから直接DBを叩けてしまう
  • バックアップとかの設定が若干めんどくさい
  • 本格的なAWSの活用ではない
  • MySQLのアプデなど面倒をみないといけない

いろんなサービスを使う場合

f:id:fumishitan:20171126213342p:plain

メリット:

  • 本格的なAWSの"活用感"ある
  • MySQLのアプデとか面倒をみなくて済む
  • DBに関してはバックアップも自動
  • DBがインターネットから直接さわれずセキュリティが良い
  • CDNを使うので静的ファイルの送信とかはやくなるんじゃないかな

デメリット:

  • 若干値がはる
  • AWSの勉強は現行のものより結構必要

どうやって料金はかかるのか?

基本的には一つずつ料金シュミレーターにぶっこんでやると料金がわかるので色々試した方がいい。料金算出は2017年11月26日時点

calculator.s3.amazonaws.com

各サービスにかかる料金の算出はこちら。

EC2

  • インスタンスを持っている代
    インスタンスタイプによって料金は変わる
    t2.microだと$0.0152 /時間
    ※OSはLinux

  • EBSの代金
    汎用 SSD (gp2) ボリュームだと想定して 月 $0.12/GB

  • EC2からインターネットへのデータ流量の代金
    データ受信:
     ・インターネットからのデータ受信は無料
     ・パブリックやElasticIPを使う場合は$0.01/GB
     ・別のアベイラリティゾーンやピア接続した場合も$0.01/GBかかるらしい
    データ送信:
     ・インターネットへの送信
      最初の1GBは無料
      10TBまで 月 $0.14/GB
     ・CloudFrontへの送信 
      $0

Route53

  • ホストゾーンごと 月$0.5
  • クエリ数 
    10億クエリまで 月$0.400/100万クエリ

RDS

  • インスタンス料金
    MySQLかつdb.t2.miroの場合 $0.026/時間

  • ストレージの容量汎用(SSD)ストレージの場合
    月 $0.138/GB

  • RDSからインターネットへのデータ流量の代金
    データ受信:
     ・インターネットからのデータ受信は無料
    データ送信:
     ・インターネットへの送信
      最初の1GBは無料
      9.999TBまで 月 $0.14/GB
     ・CloudFrontへの送信
      $0

S3

  • ストレージの容量
    50TBまで月 $0.025/GB

  • S3からインターネットへのデータ流量の代金
    データ受信:
     ・インターネットからのデータ受信は無料
    データ送信:
     ・インターネットへの送信
      最初の1GBまでは無料
      10TBまで月 $0.14/GB
     ・CloudFrontへの送信
      $0

  • リクエスト料金
    ・PUT、COPY、POST、または LIST リクエスト $0.0047/1,000 リクエス
    ・GET および他のすべてのリクエスト $0.0037/10,000 リクエス

CloudFront

  • CloudFrontからインターネットへのデータ流量の代金
    10TBまで月 $0.140/GB

想定している構成の料金は・・・

※はサイイン後12ヶ月無料

EC2・Route53のみの場合

  • EC2: 11.13$(t2.micro) ※
  • EC2(IP利用分)のデータIn: 0.1$(10GB想定)
  • EC2(IP利用分)のデータOut: 1.4$(10GB想定)
  • EBS:0.60$(5GB想定)

  • Route53:0.5$
  • Route53:0.4$(10万クエリ想定)

合計:月 14.13$

いろんなサービスを使う場合

  • EC2: 11.13$(t2.micro) ※
  • EBS:0.60$(5GB想定)

  • Route53:0.5$
  • Route53:0.4$(10万クエリ想定)

  • RDS:19.73$(db.t2.micro 5GB)※
  • S3:0.125$
    リクエスト料金は小さいので無視

  • CloudFront:$1.4(10GB想定)

合計:月 33.885$