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

ECS Fargate + EFSで WordPressのスケールアウト

ECS Fargate + EFSで WordPressのスケールアウト

2021/3/25に行われたオンライン勉強会
https://spacemarket.connpass.com/event/206463/
で発表した資料です。

AWSでWordPressのスケールアウト
https://speakerdeck.com/ykanazawa/awsdewordpressfalsesukeruauto
の続編になります。

652359244199b2b5108a5e09c027e0da?s=128

Kanazawa Yuki

March 25, 2021
Tweet

Transcript

  1. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup ECS Fargate + EFSで

    WordPressのスケールアウト https://www.lancers.jp/ 「テクノロジーで、個をエンパワーメントする」 ランサーズ株式会社 SRE 金澤 裕毅 [Kanazawa Yuki]
  2. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 自己紹介 2 氏名:金澤 裕毅

    出身:宮城県仙台市 Lancers, Inc. / Site Reliability Engineer (2013/11 -) 趣味: 将棋(ウォーズ初段、将棋倶楽部24で1000点くらい) Github:yKanazawa Twitter: @yakitori009 Language: C++, Java, PHP, Go
  3. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 3 ランサーズを支える技術

  4. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 4 ランサーズの提供サービス APIシステム コーポレートサイト

    ランサーズ お知らせ 認証システム 広告システム メールシステム 管理画面 電話確認システム 分析システム クラウドソーシング
  5. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のWordPressサーバー構成 •Appサーバー ◦Amazon Linux

    1 ◦Nginx ◦PHP-FPM ◦PHP 7.3 •DBサーバー ◦AWS Aurora ▪MySQL5.7 •ソースコード管理 ◦Github ◦自前のdeployシステムで更新 Route 53 ALB WordPress deploy S3 Aurora Nginx PHP-FPM WorPress ソース
  6. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup Fargate + EFSのWordPressサーバー構成 •Appコンテナ

    ◦Alphine Linux ◦Nginx ◦PHP-FPM ◦PHP 7.3 •DBサーバー ◦AWS Aurora ▪MySQL5.7 •ソースコード管理 ◦Github ◦CodeBuildで更新 ▪EFS内でgit pullするだけ WordPress Containar S3 Aurora EFS Fargate Route 53 ALB CodeBuild Nginx PHP-FPM WordPress ソース
  7. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup AWS(EC2)で WordPressのスケールアウト

  8. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 復習 •※PHPカンファレンス仙台で発表した内容をおさらい ◦https://bit.ly/3c9NABR

  9. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup スケールアウトの課題

  10. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup DBの問題 •DBが2つ以上のサーバーに分散してしまう DB DB

    ALB
  11. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup ファイルアップロード問題 •ファイルのアップロードができない ◦どれか1つのインスタンス内ディレクトリしか格納されない wp-content/uploads/

    こちら側にしか 格納されない ALB
  12. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup プラグインのアップデート問題 •管理画面からプラグインをアップデートできない ◦どれか1つのインスタンスしかアップデートされない wp-content/plugins/

    こちら側しか アップデートされない ALB
  13. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup wp-cronの問題 •サーバーの数だけ実行されてしまう wp-cron wp-cron

    ALB
  14. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup スケールアウトの準備

  15. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2の一台構成 Route 53 WordPress

  16. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup データベースの分離 Route 53 WordPress

    Aurora •RDS (Aurora)に分離
  17. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup アップロードディレクトリの分離(S3) Route 53 WordPress

    S3 Aurora •Webサイトホスティングを設定したS3バケットを構築 ◦wp-contents/uploads 以下のファイルをここに格納 Webサイト ホスティングを設定した S3バケットを構築 wp-contents/uploads
  18. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup プラグインごとコード管理する Route 53 WordPress

    deploy S3 Aurora •Githubの場合 ◦自前で構築したDeployシステムからAppサーバーにsync 独自の デプロイシステム プラグインごと コード管理
  19. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup ALB(Application Load Balancer)の追加 Route

    53 ALB WordPress deploy S3 Aurora Sessionは wp_optionsテーブルに 格納される
  20. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 独自のデプロイシステム •全てのWordPressサーバー(EC2)のソースを更新 ◦デプロイ時間は1分以内

  21. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のリリースフロー Route 53 ALB

    WordPress deploy WordPress Developer 1. ローカルPCでupdate 2.git push •デプロイサーバーでgit pull ◦全WordPressサーバーにrsync 4. git pull 5. rsync 3. デプロイシステム からリリース
  22. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup オートスケーリングの構築

  23. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy

  24. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy

    WordPress •AMIからWordPressサーバーを起動 AMI
  25. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy

    WordPress •Deployサーバーから最新のソースを取得
  26. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のオートスケーリング ALB WordPress deploy

    WordPress •ALBにアタッチ
  27. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2オートスケーリングの課題 ALB WordPress deploy

    WordPress •デプロイシステムへの依存 ◦デプロイサーバーが単一障害点に •定期的にAMIの取り直しが必要 ◦ソースの差分が多くなると時間がかかる ◦サーバー構成変更時にも取り直しが必要 •スケールアウトに時間がかかる ◦1分以上 デプロイシステムのメンテナンスも大変 DockerベースにしてDeployサーバーを廃止したい
  28. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup AWS(ECS Fargate + EFS)

    でWordPressのスケールアウト
  29. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 一般的なDockerによるリリースフロー WordPress Containar S3

    Aurora Fargate Route 53 ALB Nginx PHP-FPM ソース User ECR WordPress Containar Dockerfile WordPress ソース リリース時間:約10分 WordPress Containar
  30. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 一般的なDockerによるリリースフロー WordPress Containar S3

    Aurora Fargate Route 53 ALB Nginx PHP-FPM ソース User ECR WordPress Containar Dockerfile WordPress ソース WordPressの リポジトリが 10個以上 (約7.5GB) 全て入れる 必要がある WordPress Containar
  31. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup ソースコードをEFS側に配置する WordPress Containar S3

    Aurora Fargate Route 53 ALB Nginx PHP-FPM User ECR WordPress Containar EFS WordPress ソース Dockerfile リリース時間:約7分 リリース時間:約1分 CodeBuild ソース WordPress Containar
  32. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup CircleCI → Codebuildを経由する理由 •GitHub

    → CodeBuild で直接起動も可能 ◦しかし、リポジトリの数だけCodeBuildを作る必要がある EFS CodeBuild
  33. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup CircleCI → Codebuildを経由する理由 •CircleCI

    からAWS CLIで CodeBuild を起動 ◦引数にリポジトリパスを指定 EFS CodeBuild aws --region ap-northeast-1 codebuild start-build --project-name wordpress_ release --environment-variables-override name=RELEASE_PATH,value=engineerblog name=BRANCH,value=BRANCH_NAME
  34. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EFSの検証

  35. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup ECS FargateのEFS対応バージョン •バージョン1.4.0以上で対応 ◦※現在はlatestが1.4.0以上になっている

  36. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup サーバーレスポンス •EC2サーバー ◦平均1秒未満(最大約5秒) •ECS

    + Fargate ◦平均約5秒(最大約10秒) •Amazon Elastic File System の読み取りスループットが3倍に ◦ https://aws.amazon.com/jp/about-aws/whats-new/2021/01/amazon-elastic-file-system-triples-read-throughput/ ◦レスポンスが改善 ▪平均約5秒→平均約2秒 ▪EC2よりは遅いが、実用上問題ないレベルに
  37. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EFSのバーストクレジットを使い切る。。 •本番リリース後、約1週間でパフォーマンスが急激に低下

  38. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EFSのバーストクレジットを使い切る。。 •プロビジョニングIOPSを設定 ◦EFSのサイズ:約7.5GB ◦100MB/sに設定(実際は300MB/s出る)

    費用がバカ高い
  39. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup バッチの実行

  40. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2時代のバッチの実行 •wp-cronは使わずcrontabで制御 ◦管理画面用の小さいインスタンス上で実行していた ALB

    WordPress WordPress Admin WordPress Auto Scaling Group Aurora ここでバッチを実行
  41. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup Docker移行後のバッチ実行 •ECS Taskで制御 ◦AZ障害の対策にもなる

    ALB WordPress ECS Task WordPress Auto Scaling Group Aurora EFS ここでバッチを実行
  42. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup まとめと今後の課題

  43. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup まとめ(EC2サーバーとの比較) デプロイ バッチ レスポンス

    サーバー費用 EC2 自前の デプロイサーバー デプロイ時間:1分 管理画面 サーバーで cron 平均約1秒 t3.medium x 平均2台 + 管理画面 (月額約10000円) Docker CIで処理 デプロイ時間:7分 +リポジトリ数 x 3分 ECS Task 平均約2秒 vCPU:2 メモリ:2048MB x 平均4台 + ECS Task (月額約20000円) Docker + EFS CIで処理 デプロイ時間:1分 (Dockerfileは7分) ECS Task 平均約3秒 vCPU:2 メモリ:2048MB x 平均4台 + ECS Task (月額約20000円) + EFS IOPS(100MB/s) (月額約60000円)
  44. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 今後の課題(サーバー費用を抑えるために) •CloudFrontの導入 ◦クレジットを使い切らないレベルまでキャッシュさせる ◦動的コンテンツ(PHP)をキャッシュさせる

    ▪キャッシュ間隔の設定が課題 •ランキング等は動的に変更される ▪セキュリティ面の配慮が必要 •例えば管理画面はキャッシュできない •Fargate Spotの導入
  45. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup ご清聴ありがとうございました!