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
の続編になります。

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]
  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 4 ランサーズの提供サービス APIシステム コーポレートサイト

    ランサーズ お知らせ 認証システム 広告システム メールシステム 管理画面 電話確認システム 分析システム クラウドソーシング
  4. 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 ソース
  5. 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 ソース
  6. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup アップロードディレクトリの分離(S3) Route 53 WordPress

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

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

    53 ALB WordPress deploy S3 Aurora Sessionは wp_optionsテーブルに 格納される
  9. 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. デプロイシステム からリリース
  10. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup EC2オートスケーリングの課題 ALB WordPress deploy

    WordPress •デプロイシステムへの依存 ◦デプロイサーバーが単一障害点に •定期的にAMIの取り直しが必要 ◦ソースの差分が多くなると時間がかかる ◦サーバー構成変更時にも取り直しが必要 •スケールアウトに時間がかかる ◦1分以上 デプロイシステムのメンテナンスも大変 DockerベースにしてDeployサーバーを廃止したい
  11. 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
  12. 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
  13. 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
  14. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup CircleCI → Codebuildを経由する理由 •GitHub

    → CodeBuild で直接起動も可能 ◦しかし、リポジトリの数だけCodeBuildを作る必要がある EFS CodeBuild
  15. 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
  16. 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よりは遅いが、実用上問題ないレベルに
  17. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup Docker移行後のバッチ実行 •ECS Taskで制御 ◦AZ障害の対策にもなる

    ALB WordPress ECS Task WordPress Auto Scaling Group Aurora EFS ここでバッチを実行
  18. 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円)
  19. 2021/3/25 SPACEMARKET x Lancers Engineer Meetup 今後の課題(サーバー費用を抑えるために) •CloudFrontの導入 ◦クレジットを使い切らないレベルまでキャッシュさせる ◦動的コンテンツ(PHP)をキャッシュさせる

    ▪キャッシュ間隔の設定が課題 •ランキング等は動的に変更される ▪セキュリティ面の配慮が必要 •例えば管理画面はキャッシュできない •Fargate Spotの導入