AWSでWordPress をつくる

WordPressのブログサイトをAWSさんのサービスのみでつくる手順のメモを記載しています 。

本格的にブログをしようとしている個人とスモールビジネスを想定して、アピールすることができ、セキュリティーを確保し、 管理が簡単で、 コストを抑えたブログをつくることがゴールです。そのため、WordPressをAWSさんのLightsail、CloudFront、Route53、Certificate Managerでつくります。LightsailのLoadBalancerや「AWS for WordPress」のプラグインは使用しません(ただし構成は同じようにしています)。長く、安全、安心、楽に情報発信ができる、やさしいやり方を選択してみました。

ゴール

  • ビジネスをアピールする
    • 独自のドメインで ブログをつくります
    • テーマに沿うように広告がむやみに表示されないブログをつくります
  • セキュリティーを確保する
    • HTTPSで通信を暗号化します
    • ブログのサービスを他のシステムからは独立してつくります
    • アクセスの地域制限をしてリスクを抑えます
  • 簡単に管理できるようにする
    • 初期設定やメンテナンスが少なくてすむサービスにします
    • 管理が一元化できるサービスをつくります
  • コストを抑える
    • 1,000円/月以内で運用できるブログにします

事前に必要なもの

  • AWS のアカウント
  • 特に事前の知識は必要ありません

システム構成

ブログで使うサービスは次のものになります

  • AWS Lightsail(以後Lightsail):VPS(サーバー)、DNS、WordPress
  • AWS Route53(以後Route53):ドメイン名
  • AWS CloudFront(以後CloudFront):CDN
  • AWS Certificate Manager(以後ACM):SSL

今回のブログの特徴は次のようになります。

  • Lightsailで独立したサーバーとなり、セキュリティーリスクがあった場合でも他のシステムに被害が及びません
  • サーバーとの接続はLightsailでSSHで行うため、サーバーとの接続は暗号化されています
  • Lightsailのためサーバーの設定や管理などのサーバーメンテナンスほぼ不要です
  • Route53で独自ドメインを取得しているためブログのアピールができます
  • DNSはLightsailを使用しているためブログのサービスの管理が一元化されます
  • CloudFrontとクライアントはhttpsのため安全な通信を確保できます
  • SSL証明書をACMで発行してCloudFrontにのせているため安全のための管理が一元化されます
  • CloudFrontとLightsailはWordPress内でhttpsで通信しているため安全が確保されます
  • LightsailのLoadBalancerを使わないでコストを抑えます
  • AWS for WordPressプラグインは使わないですが構成は同じにするので、AWS推奨と同じセキュリティーとスピードが確保できます
  • CloudFrontを使った場合WordPressのビジュアルエディターが使えなくなる問題を解消してブログをつくる効率性は確保できます

コスト

月次の想定コストは次の通りです。

Tier1Tier2ContentCost
AWS Route53ドメイン.com(年12USD)1USD
AWS Lightsailインスタンス512MB3.5USD
ストレージ20GB上に含まれる
データ転送1TB (>1TB、0.09USD/BG)上に含まれる
固定IPアタッチ0USD
DNSクエリ300万クエリ(>300万、0.4USD/100万クエリ)0USD
スナップショット(バックアップ)0.05USD/GB0.05USD
AWS CloudFrontデータ転送(Transfer out)10GB1.1USD
リクエスト(HTTPS)50KB/Object 0.27USD
AWS Certificate ManagerSSL証明書10USD
Total (USD)5.92USD/Month
Total (JPY: USD = 110JPY)652JPY/Month

AWS LightsailでWordPressを動かす

WordPressをLightsailをつかってセットアップします。

  • Lightsailのページで「インスタンスの作成」をおす
  • インスタンスをつくる場所と種類をえらぶ
    • 「ロケーション」:東京
    • 「プラットフォーム」:Ubuntu/Unix
    • 「設計図」:WordPress
  • インスタンスの料金プランをえらぶ
    • とにかく一番エコロジーなものでOK
  • リソース名をつける
    • Lightsailの中で他のインスタンスと区別するための名前をつけまる
    • 例:taberutable
  • 「インスタンスの作成」をおす
  • 「実行中」になるまで少しまつ
  • 「実行中」になったらインスタンス名をクリックする

WordPressを独自ドメインにする

WordPressを独自ドメインでアクセスできるようにセットアップします。セットアップと同時にクライアントとCloudFrontの間の通信をHTTPS化します。

AWS Route53で独自ドメインを取得する

独自ドメインを取得します。

  • Route53のコンソールページにいく
  • メニューの「登録済みドメイン」をえらぶ
  • 「ドメインの登録」をおす
  • ボックスにほしいドメイン名をいれる
  • 「com-$12.00」は好きなものを選ぶ
  • 「チェック」をおす
  • ほしいものがあったら「カートに入れる」をおす
  • 入力が必要なところを確認する(個人の場合はそのままで大丈夫)
  • 「続行」をおす
  • 「規約」の「AWSドメイン名の~」のチェックをいれる
  • 「注文を完了」をおす

AWS Lightsailで静的IPを取得する

独自ドメインとLightsail

  • Lightsailのコンソールにいく
  • インスタンス名をクリックする
  • 「静的IPの作成」をおす
  • 「静的IPアドレスの作成」の画面がでる
  • 「インスタンスへのアタッチ」から作成したインスタンスを選ぶ
  • 「静的IPの指定」で静的IPの名前をつける
    • 例:static-xxx-ip
  • 「作成」をおす
  • できあがり

AWS LightsailでDNSゾーンをつくる

  • Lightsailのコンソールにいく
  • 「ネットワーキング」をおす
  • 「DNSの作成」をおす
  • 「登録済みドメインの入力」でRoute53で取得したドメイン名をいれる
  • 「DNSゾーンの作成」をおす
  • 「レコードの追加」をおす
  • 「ドメインまたは~」で「Aのレコード」をえらぶ
  • 「サブドメイン」に静的IPに与えるサブドメイン名をつける
    • 例:blog
  • 「解決先」をクリックして、作成した静的IPをえらぶ
  • 緑のチェックをおす
  • ネームサーバーを4つともコピーしておく

AWS Lightsailのネームサーバーを設定する

  • Route53のコンソールをひらく
  • 「登録済みドメイン」をひらく
  • 「登録済みドメイン」のつくったドメイン名のリンクをひらく
  • 「ネームサーバーの追加/編集」をえらぶ
  • メモしたネームサーバーの情報にかきかえる
  • 「更新」をおす

AWS Certificate ManagerでSSL証明書を発行する

  • ACMのコンソールにいく
  • 「証明書のリクエスト」をおす
  • 「パブリック証明書のリクエスト」が押された状態で「証明書のリクエスト」をおす
  • 「ドメイン名の追加」でワイルドカード証明書をリクエストする
    • 例:*.taberutable-blog.com
  • 「次へ」をおす
  • 「DNSの検証」にチェックが入った状態で「次へ」をおす
  • 「ドメインのDNS設定に次のCNAM~」の「名前」と「値」をコピーする
  • Lightsailのコンソールをひらく
  • 「ネットワーキング」をひらく
  • 「DNSゾーン」をひらく
  • 「レコードの追加」で「CNAMEレコード」を追加する
    • サブドメイン:ACMでコピーした「名前」
      • コピーしたものは、xjadfuio.taberutable-blog.comてなってるから黄色の部分だけをはりつけ
    • マップ先: ACMでコピーした「値」
  • 緑のチェックをクリック
  • しばらくまつ
  • ACMで「成功」、「発行済み」となるのを確認する

AWS CloudFrontを設定する

  • Lightsailのコンソールにいく
  • 「インスタンス」のところから、ボタンをおしてSSH接続する
  • wp-configをviで書き換えるためのコードをうつ
    • sudo vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php
  • コードを所定の場所にいれて、CloudFrontの X-Forwarded-Proto のhttps対応をする
    • if (strpos($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';
  • 保存する
    • esc
    • :qx + enter
  • CloudFrontのコンソールにいく
  • 「create distribution」をおす
  • 「Web」のほうの「get started」をおす
  • 「Create Distribution」で各種設定をする
    • Origin setting
      • Origin Domain Name
        • LightsailのDNSゾーンで「Aのレコード」のサブドメインに指定した名前
    • Default Cache Behavior Settings
      • Viewer Protocol Policy
        • 「Redirect HTTP to HTTPS」
      • Allowed HTTP Methods
        • 「GET, HEAD, OPTIONS, PUT~」
      • Cache Based on Selected Request Headers
        • 「Whitelist」
      • Whitelist Headers:
        • 「CloudFront-Forwarded-Proto」
        • 「Host」
        • 「CloudFront-Is-Desktop-Viewer」
        • 「CloudFront-Is-Mobile-Viewer」
        • 「CloudFront-Is-Tablet-Viewer」
      • Forward Cookie
        • 「Whitelist」
      • Whitelist Cookies
        • 「comment_*」
        • 「wordpress_*」
        • 「wp-settings-*」
      • Query String Forwarding and Caching
        • 「Forward all, cach based on all」
    • Distribution Setting
      • Price Class
        • 「Use US. Canada, Europe, Asia, Middle East and Africa」
      • Alternate Domain Name
        • www.ドメイン名
      • SSL Certificate
        • AWS Certification Managerで作成したSSL
  • 「Create Distribution」をおす
  • 「Domain Name」をコピーしておく
  • 「Behavior」の「Create Behavior」で追加で2つのbehaviorをつくる
    • /wp-login.php
    • /wp-admin*
    • Default(*)
  • 追加2つのbehviorのDefaultと同じで以下だけ違うようにする
    • Cache Behavior Settings
      • Minimum TTL
        • ゼロ
      • Maximum TTL
        • セロ
      • Default TTL
        • ゼロ
      • Forward Cookie「All」
  • Lightsailのコンソールにいく
  • 「ネットワーキングにいく」
  • 「DNSゾーンをひらく」
  • 「レコードの追加」をおす
  • 「CNAMのレコード」をいれる
    • サブドメイン:www.ドメイン名
    • 値:CloudFrontのドメイン名(xxx.cloudfront.com)
  • 緑のチェックをおす

WordPressにプラグインをいれる

  • Https化のプラグインに次のプラグインをいれる
    • SSL Insecure Content Fixer
    • Really Simple SSL
  • CloudFrontでWordPressのビジュアルエディターがつかえるようにする
    • Enable Visual Mode in CloudFront

Hello World!

  • 「www.ドメイン名」でブラウザーからアクセスする
  • Hello World!
  • Httpsで接続できていたらOK!

参考