Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VPS運用のWordPressブログをAWSフル活用したモダン構成にする全過程

 VPS運用のWordPressブログをAWSフル活用したモダン構成にする全過程

7年ほど前にインフラを勉強するためにVPSに構築したWordPressのブログ。時は移り変わり、アプリケーションもインフラもパブリッククラウドは様変わりしました。このセッションでは、一台のVPSだけで運用していたWordPressのブログを、AWSの各種マネージドサービスとNext.jsをフル活用した構成に移行するまでの全過程をお届けします。

濱田孝治

July 26, 2022
Tweet

More Decks by 濱田孝治

Other Decks in Technology

Transcript

  1. 2 自己紹介 濱⽥孝治(ハマコー) • CX事業本部 (元)MAD事業部⻑ • Japan APN Ambassador

    2020 • JAWS-UG コンテナ⽀部運営 • 好きなサービス︓ECS, EKS, CloudFormation • 好きな⾔葉「わっしょい」 • @hamako9999 • 最近ハマってるもの︓Vampire Survivors、プロ セカ(推しもいますが、30分全て⾷い潰すので今 ⽇は控えます)
  2. 7 作業始める前のハマコーが持っていた前提知識 • React︓今回始めて触りました • Next.js︓今回始めて触りました • Amplify︓ほぼ始めて触りました • App

    Runner︓好きです • Aurora Serverless v2︓今回始めて触りました 途中泣きそうなぐらいつらかったけど、森茂先生 の協力の元なんとかなりました。この場を借りて お礼申し上げます!!
  3. 11 Agenda • 移⾏前後の構成解説 • 移⾏⼿順①︓Route 53とEC2の導⼊ • 移⾏⼿順②︓Next.jsとAmplifyの導⼊ •

    移⾏⼿順③︓Aurora Serverless v2の導⼊ • 移⾏⼿順④︓App Runnerの導⼊ • 振り返りとまとめ
  4. 13 Agenda • 移⾏前後の構成解説 • 移⾏⼿順①︓Route 53とEC2の導⼊ • 移⾏⼿順②︓Next.jsとAmplifyの導⼊ •

    移⾏⼿順③︓Aurora Serverless v2の導⼊ • 移⾏⼿順④︓App Runnerの導⼊ • 振り返りとまとめ
  5. 16 さくらのVPSとは︖ • SAKURA internetが運営するVPS • VPSとは︖ • Virtual Private

    Server • ざっくり⾔うとサーバー⼀つを丸々利⽤できるサービス • 契約するとアクセス情報が払い出されて、SSHアクセスに必 要な鍵の設定やミドルウェアの導⼊などなんでも好きにでき る • AWSではLightsailがVPS相当 • 価格とスペックのバランスが良く、⾮常にナイスなサービ ス
  6. 22 Agenda • 移⾏前後の構成解説 • 移⾏⼿順①︓Route 53とEC2の導⼊ • 移⾏⼿順②︓Next.jsとAmplifyの導⼊ •

    移⾏⼿順③︓Aurora Serverless v2の導⼊ • 移⾏⼿順④︓App Runnerの導⼊ • 振り返りとまとめ
  7. 24 ここでやりたいことの考え⽅ 今後の作業をスムーズに進めるため、環境を全てAWS に持ってくる • Route 53の導⼊ • ドメイン全て移⾏(ネームサーバーの移譲ではなく) •

    AmplifyやApp Runnerはカスタムドメインが設定できる ため、Route 53で管理したほうが何かと便利 • EC2の導⼊ • 各種AWSサービスを増やしながら動作確認するベースと して構築
  8. 27 移⾏作業︓Route 53の導⼊ センシティブな作業だけれど、AWSの公式ドキュメン トが⾮常に丁寧に作られているので、それに基づいて慎 重にやれば⼤丈夫 • 公式︓ドメイン登録の Amazon Route

    53 への移管 • VALUE-DOMAINやお名前.comなどからの移⾏であ れば、情報はいろいろ出てくる • EC2の導⼊前に独⽴して先にやるのが良い(VPSを運 ⽤している間は、Route 53のAレコードはVPSのIP アドレスにしておく)
  9. 30 移⾏作業︓EC2の導⼊ 実際やるとき、以下の2つで迷う • 案①︓VPSをまるまるEC2移⾏ • CloudEndure Migrationなどを利⽤してごっそり移⾏ • 案②︓新規でEC2構築

    • EC2を新規で構築し、そこにイチからミドルウェアをイ ンストールし、DBをインポートする ⼀⾒⾯倒くさそうだけれ どこちらを採⽤
  10. 32 案②︓新規でEC2構築 公式の下記⼿順通りにやれば、1時間ぐらいで終了 • チュートリアル: Amazon Linux 2 に LAMP

    ウェブ サーバーをインストールする • チュートリアル: Amazon Linux 2 での WordPress ブログのホスト 後は、VPSからmysqldumpとかで 抜き出したデータをEC2のMySQLに インポートして管理画⾯が起動する ところまで確認
  11. 37 Agenda • 移⾏前後の構成解説 • 移⾏⼿順①︓Route 53とEC2の導⼊ • 移⾏⼿順②︓Next.jsとAmplifyの導⼊ •

    移⾏⼿順③︓Aurora Serverless v2の導⼊ • 移⾏⼿順④︓App Runnerの導⼊ • 振り返りとまとめ 個⼈的に⼀番 楽しかったやつ
  12. 45 WordPressのヘッドレスCMS化に必要なもの WordPressでのAPIの提供⽅法は⼤きく2つ 1. WordPress REST API • 以前はプラグインとして提供されていたが2016年12⽉ にリリースされたWordPress4.7から正式に採⽤された

    • デフォルトで有効化されている 2. WPGraphQL • GraphQLのエンドポイントをWordPressに作成するプラ グイン • オープンソースだがドキュメントも⾮常に充実していて 良い
  13. 46 WordPressのヘッドレスCMS化に必要なもの WordPressでのAPIの提供⽅法は⼤きく2つ 1. WordPress REST API • 以前はプラグインとして提供されていたが2016年12⽉ にリリースされたWordPress4.7から正式に採⽤された

    • デフォルトで有効化されている 2. WPGraphQL • GraphQLのエンドポイントをWordPressに作成するプラ グイン • オープンソースだがドキュメントも⾮常に充実していて 良い こちらを採⽤
  14. 47 WPGraphQL • https://www.wpgraphql.com/ • メインスポンサーはWP Engine社 • WordPressのマネージドホスティング サービスのパイオニア

    • インストールするだけでGraphQL エンドポイントが⽣える https://example.com/graphql • GraphQL実⾏専⽤IDEが付属 • ドキュメントが⾮常に充実 • Getting StartedやGuideが完璧 • 単なるプラグインのページの域を超え ている
  15. 56 しばしお勉強タイム 「公式のStart Learning」 • 英語 • めちゃくちゃ良い • ReactからNext.jsまで全ての

    解説が網羅的になされている • DeepL使ってもなんでも良い ので特に解説書とかもってな ければ、確実にオススメ
  16. 58 Next.jsのexamplesにあるサンプルを利⽤ cms-wordpress • A statically generated blog example using

    Next.js and WordPress • Vercel社作成のNext.jsとWordpressでSSGするサン プルリポジトリ • 背景として、これがGraphQLを使ってるから GraphQLのエンドポイントを⽤意してみた • npx create-next-app --example cms-wordpress cms- wordpress-app
  17. 59 利⽤⽅法 • プロジェクト作成 • .env.localファイルの⽤意 • モジュールインストールとローカルテスト • http://localhost:3000/にアクセス

    WORDPRESS_API_URL=https://example.com/graphql npx create-next-app --example cms-wordpress cms-wordpress-app npm install npm run dev 先程作ったGraphQLの エンドポイント
  18. 61 ハマコー環境ででたエラー next/image Un-configured Host • next.config.jsに画像で利⽤するドメインが設定され ていないために出るエラー • 以下の要領で、エラー⾒ながら利⽤ドメインを追加

    module.exports = { images: { domains: [ process.env.WORDPRESS_API_URL.match(/(http(?:s)?:¥/¥/)(.*)/)[2], // Valid WP Image '2.gravatar.com’, 'secure.gravatar.com’, 'hamako9999.net’, // added domain '1.gravatar.com’ // added domain ], }, }
  19. 69 AWS Amplifyでできること 以下の機能を組み合わせながら利⽤する • Amplify Studio • フルスタックアプリケーションの視覚的デプロイ •

    Amplify ライブラリ • 既存のAWSサービスへの接続 • Amplify CLI • CLIワークフローでバックエンドを構成 • Amplify ホスティング • コンテンツ配信ネットワークを介して、信頼性の⾼いウェブ アプリをホスト
  20. 70 AWS Amplifyでできること 以下の機能を組み合わせながら利⽤する • Amplify Studio • フルスタックアプリケーションの視覚的デプロイ •

    Amplify ライブラリ • 既存のAWSサービスへの接続 • Amplify CLI • CLIワークフローでバックエンドを構成 • Amplify ホスティング • コンテンツ配信ネットワークを介して、信頼性の⾼いウェブ アプリをホスト これを利⽤ そしてこれが、異常に簡単 で便利
  21. 85 Agenda • 移⾏前後の構成解説 • 移⾏⼿順①︓Route 53とEC2の導⼊ • 移⾏⼿順②︓Next.jsとAmplifyの導⼊ •

    移⾏⼿順③︓Aurora Serverless v2の導⼊ • 移⾏⼿順④︓App Runnerの導⼊ • 振り返りとまとめ
  22. 90 Aurora Serverless v2とは AuroraのオンデマンドAuto Scaling設定 • Auroraを事前のインスタンスタイプのプロビジョニ ングをせずに利⽤可能 •

    アプリケーションニーズに基づいて⾃動的に起動、 シャットダウン、スケールアップ・ダウン • 標準のAuroraとServerlessの設定変更は、インスタ ンスタイプの変更ぐらいの感覚で可能 EC2とLambdaは完全に別物だけれど、AuroraとAurora Serverlessは使い勝⼿はほぼ同じなので、気軽に使っち ゃいましょう︕
  23. 91 Aurora Serverless v2を使いたい理由 Next.jsがSSG設定のため • Static Site Generationの略(静的サイト⽣成) •

    ビルド時にサーバ側でデータを取得しHTMLを⽣成 • Amplifyであれば、CDN(CloudFront)にHTMLを 格納
  24. 92 Aurora Serverless v2を使いたい理由 Next.jsがSSG設定のため • Static Site Generationの略(静的サイト⽣成) •

    ビルド時にサーバ側でデータを取得しHTMLを⽣成 • Amplifyであれば、CDN(CloudFront)にHTMLを 格納 つまりは、アプリケーションサーバ 経由のDBアクセスをビルド時のみ に限定できるのでは︕︕︖︖
  25. 103 Agenda • 移⾏前後の構成解説 • 移⾏⼿順①︓Route 53とEC2の導⼊ • 移⾏⼿順②︓Next.jsとAmplifyの導⼊ •

    移⾏⼿順③︓Aurora Serverless v2の導⼊ • 移⾏⼿順④︓App Runnerの導⼊ • 振り返りとまとめ
  26. 112 利⽤するDocker Image WordPress Official Image • WordPressを利⽤するとき頻出の設定が環境変数で設定 可能 •

    -e WORDPRESS_DB_HOST • -e WORDPRESS_DB_USER • -e WORDPRESS_DB_PASSWORD • テーマやプラグインを設定する専⽤ディレクトリも有 • /var/www/html/wp-content/themes/ • /var/www/html/wp-content/plugins/ • 基本的にEC2にインストールしたWordPressと同じバー ジョンを使う
  27. 113 Dockerfile例 FROM wordpress:6.0.1 COPY stinger3ver20130925/ /var/www/html/wp-content/themes/stinger3ver20130925/ COPY wp-graphql/ /var/www/html/wp-content/plugins/wp-graphql/

    COPY uploads/ /var/www/html/wp-content/uploads/ Dockefileは超シンプル EC2に新規でWordPressをインストールしヘッ ドレスCMSとして最⼩構成で構築したのは、 WordPressをコンテナ化しやすくする背景もあ りました
  28. 114 イメージビルドしてECRにプッシュ docker build -t hamako9999-blog:1.3 . docker tag hamako9999-blog:1.3

    123456789012.dkr.ecr.ap-northeast- 1.amazonaws.com/hamako9999-blog:1.3 docker push 123456789012.dkr.ecr.ap-northeast- 1.amazonaws.com/hamako9999-blog:1.3 今回GitHubからECRへのイメージ ビルドとプッシュは⾃動化してない ですが、GitHub Actionsとか使って サクッとやれば、ソースコードから の⾃動デプロイも簡単に構築可能
  29. 128 まとめ WordPressをヘッドレスCMS前提の構成とし、Next.js のSSGを活⽤することで、モダンな構成を検討可能︕ • Amplify ホスティング︓関連リソースを隠蔽し、Webサ イトのホスティングに特化 • Aurora

    Serverless v2︓驚異のオンデマンドRDB。普段 利⽤しなければコスト効率は⾮常に⾼い • App Runner︓フルマネージドコンテナサービス。普段 利⽤しなければコスト効率は良い