$30 off During Our Annual Pro Sale. View Details »

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

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

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

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

Kanazawa Yuki

March 25, 2021
Tweet

More Decks by Kanazawa Yuki

Other Decks in Technology

Transcript

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

    View Slide

  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

    View Slide

  3. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    3
    ランサーズを支える技術

    View Slide

  4. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    4
    ランサーズの提供サービス
    APIシステム
    コーポレートサイト
    ランサーズ
    お知らせ
    認証システム
    広告システム
    メールシステム
    管理画面
    電話確認システム
    分析システム
    クラウドソーシング

    View Slide

  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
    ソース

    View Slide

  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
    ソース

    View Slide

  7. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    AWS(EC2)で
    WordPressのスケールアウト

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    wp-cronの問題
    ●サーバーの数だけ実行されてしまう
    wp-cron
    wp-cron
    ALB

    View Slide

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

    View Slide

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

    View Slide

  16. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    データベースの分離
    Route 53
    WordPress
    Aurora
    ●RDS (Aurora)に分離

    View Slide

  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

    View Slide

  18. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    プラグインごとコード管理する
    Route 53
    WordPress
    deploy S3
    Aurora
    ●Githubの場合
    ○自前で構築したDeployシステムからAppサーバーにsync
    独自の
    デプロイシステム
    プラグインごと
    コード管理

    View Slide

  19. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    ALB(Application Load Balancer)の追加
    Route 53
    ALB
    WordPress
    deploy S3
    Aurora
    Sessionは
    wp_optionsテーブルに
    格納される

    View Slide

  20. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    独自のデプロイシステム
    ●全てのWordPressサーバー(EC2)のソースを更新
    ○デプロイ時間は1分以内

    View Slide

  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. デプロイシステム
    からリリース

    View Slide

  22. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    オートスケーリングの構築

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    EC2時代のオートスケーリング
    ALB
    WordPress
    deploy WordPress
    ●ALBにアタッチ

    View Slide

  27. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    EC2オートスケーリングの課題
    ALB
    WordPress
    deploy WordPress
    ●デプロイシステムへの依存
    ○デプロイサーバーが単一障害点に
    ●定期的にAMIの取り直しが必要
    ○ソースの差分が多くなると時間がかかる
    ○サーバー構成変更時にも取り直しが必要
    ●スケールアウトに時間がかかる
    ○1分以上
    デプロイシステムのメンテナンスも大変
    DockerベースにしてDeployサーバーを廃止したい

    View Slide

  28. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    AWS(ECS Fargate + EFS)
    でWordPressのスケールアウト

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  34. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    EFSの検証

    View Slide

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

    View Slide

  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よりは遅いが、実用上問題ないレベルに

    View Slide

  37. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    EFSのバーストクレジットを使い切る。。
    ●本番リリース後、約1週間でパフォーマンスが急激に低下

    View Slide

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

    View Slide

  39. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    バッチの実行

    View Slide

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

    View Slide

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

    View Slide

  42. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    まとめと今後の課題

    View Slide

  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円)

    View Slide

  44. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    今後の課題(サーバー費用を抑えるために)
    ●CloudFrontの導入
    ○クレジットを使い切らないレベルまでキャッシュさせる
    ○動的コンテンツ(PHP)をキャッシュさせる
    ■キャッシュ間隔の設定が課題
    ●ランキング等は動的に変更される
    ■セキュリティ面の配慮が必要
    ●例えば管理画面はキャッシュできない
    ●Fargate Spotの導入

    View Slide

  45. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup
    ご清聴ありがとうございました!

    View Slide