2021/3/25に行われたオンライン勉強会 https://spacemarket.connpass.com/event/206463/ で発表した資料です。
AWSでWordPressのスケールアウト https://speakerdeck.com/ykanazawa/awsdewordpressfalsesukeruauto の続編になります。
2021/3/25 SPACEMARKET x Lancers Engineer MeetupECS Fargate + EFSでWordPressのスケールアウトhttps://www.lancers.jp/「テクノロジーで、個をエンパワーメントする」ランサーズ株式会社 SRE金澤 裕毅 [Kanazawa Yuki]
View Slide
2021/3/25 SPACEMARKET x Lancers Engineer Meetup自己紹介 2氏名:金澤 裕毅出身:宮城県仙台市Lancers, Inc. / Site Reliability Engineer (2013/11 -)趣味: 将棋(ウォーズ初段、将棋倶楽部24で1000点くらい)Github:yKanazawaTwitter: @yakitori009Language: C++, Java, PHP, Go
2021/3/25 SPACEMARKET x Lancers Engineer Meetup3ランサーズを支える技術
2021/3/25 SPACEMARKET x Lancers Engineer Meetup4ランサーズの提供サービスAPIシステムコーポレートサイトランサーズお知らせ認証システム広告システムメールシステム管理画面電話確認システム分析システムクラウドソーシング
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のWordPressサーバー構成●Appサーバー○Amazon Linux 1○Nginx○PHP-FPM○PHP 7.3●DBサーバー○AWS Aurora■MySQL5.7●ソースコード管理○Github○自前のdeployシステムで更新Route 53ALBWordPressdeploy S3AuroraNginxPHP-FPMWorPressソース
2021/3/25 SPACEMARKET x Lancers Engineer MeetupFargate + EFSのWordPressサーバー構成●Appコンテナ○Alphine Linux○Nginx○PHP-FPM○PHP 7.3●DBサーバー○AWS Aurora■MySQL5.7●ソースコード管理○Github○CodeBuildで更新■EFS内でgit pullするだけ WordPressContainar S3AuroraEFSFargateRoute 53ALBCodeBuildNginxPHP-FPMWordPressソース
2021/3/25 SPACEMARKET x Lancers Engineer MeetupAWS(EC2)でWordPressのスケールアウト
2021/3/25 SPACEMARKET x Lancers Engineer Meetup復習●※PHPカンファレンス仙台で発表した内容をおさらい○https://bit.ly/3c9NABR
2021/3/25 SPACEMARKET x Lancers Engineer Meetupスケールアウトの課題
2021/3/25 SPACEMARKET x Lancers Engineer MeetupDBの問題●DBが2つ以上のサーバーに分散してしまうDBDBALB
2021/3/25 SPACEMARKET x Lancers Engineer Meetupファイルアップロード問題●ファイルのアップロードができない○どれか1つのインスタンス内ディレクトリしか格納されないwp-content/uploads/こちら側にしか格納されないALB
2021/3/25 SPACEMARKET x Lancers Engineer Meetupプラグインのアップデート問題●管理画面からプラグインをアップデートできない○どれか1つのインスタンスしかアップデートされないwp-content/plugins/こちら側しかアップデートされないALB
2021/3/25 SPACEMARKET x Lancers Engineer Meetupwp-cronの問題●サーバーの数だけ実行されてしまうwp-cronwp-cronALB
2021/3/25 SPACEMARKET x Lancers Engineer Meetupスケールアウトの準備
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2の一台構成Route 53WordPress
2021/3/25 SPACEMARKET x Lancers Engineer Meetupデータベースの分離Route 53WordPressAurora●RDS (Aurora)に分離
2021/3/25 SPACEMARKET x Lancers Engineer Meetupアップロードディレクトリの分離(S3)Route 53WordPress S3Aurora●Webサイトホスティングを設定したS3バケットを構築○wp-contents/uploads 以下のファイルをここに格納Webサイトホスティングを設定したS3バケットを構築wp-contents/uploads
2021/3/25 SPACEMARKET x Lancers Engineer Meetupプラグインごとコード管理するRoute 53WordPressdeploy S3Aurora●Githubの場合○自前で構築したDeployシステムからAppサーバーにsync独自のデプロイシステムプラグインごとコード管理
2021/3/25 SPACEMARKET x Lancers Engineer MeetupALB(Application Load Balancer)の追加Route 53ALBWordPressdeploy S3AuroraSessionはwp_optionsテーブルに格納される
2021/3/25 SPACEMARKET x Lancers Engineer Meetup独自のデプロイシステム●全てのWordPressサーバー(EC2)のソースを更新○デプロイ時間は1分以内
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のリリースフローRoute 53ALBWordPressdeploy WordPressDeveloper1. ローカルPCでupdate2.git push●デプロイサーバーでgit pull○全WordPressサーバーにrsync4. git pull5. rsync3. デプロイシステムからリリース
2021/3/25 SPACEMARKET x Lancers Engineer Meetupオートスケーリングの構築
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のオートスケーリングALBWordPressdeploy
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のオートスケーリングALBWordPressdeploy WordPress●AMIからWordPressサーバーを起動AMI
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のオートスケーリングALBWordPressdeploy WordPress●Deployサーバーから最新のソースを取得
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のオートスケーリングALBWordPressdeploy WordPress●ALBにアタッチ
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2オートスケーリングの課題ALBWordPressdeploy WordPress●デプロイシステムへの依存○デプロイサーバーが単一障害点に●定期的にAMIの取り直しが必要○ソースの差分が多くなると時間がかかる○サーバー構成変更時にも取り直しが必要●スケールアウトに時間がかかる○1分以上デプロイシステムのメンテナンスも大変DockerベースにしてDeployサーバーを廃止したい
2021/3/25 SPACEMARKET x Lancers Engineer MeetupAWS(ECS Fargate + EFS)でWordPressのスケールアウト
2021/3/25 SPACEMARKET x Lancers Engineer Meetup一般的なDockerによるリリースフローWordPressContainar S3AuroraFargateRoute 53ALBNginxPHP-FPMソースUserECRWordPressContainarDockerfileWordPressソースリリース時間:約10分WordPressContainar
2021/3/25 SPACEMARKET x Lancers Engineer Meetup一般的なDockerによるリリースフローWordPressContainar S3AuroraFargateRoute 53ALBNginxPHP-FPMソースUserECRWordPressContainarDockerfileWordPressソースWordPressのリポジトリが10個以上(約7.5GB)全て入れる必要があるWordPressContainar
2021/3/25 SPACEMARKET x Lancers Engineer MeetupソースコードをEFS側に配置するWordPressContainar S3AuroraFargateRoute 53ALBNginxPHP-FPMUserECRWordPressContainarEFSWordPressソースDockerfileリリース時間:約7分リリース時間:約1分CodeBuildソースWordPressContainar
2021/3/25 SPACEMARKET x Lancers Engineer MeetupCircleCI → Codebuildを経由する理由●GitHub → CodeBuild で直接起動も可能○しかし、リポジトリの数だけCodeBuildを作る必要があるEFSCodeBuild
2021/3/25 SPACEMARKET x Lancers Engineer MeetupCircleCI → Codebuildを経由する理由●CircleCI からAWS CLIで CodeBuild を起動○引数にリポジトリパスを指定EFSCodeBuildaws --region ap-northeast-1codebuild start-build--project-name wordpress_release --environment-variables-overridename=RELEASE_PATH,value=engineerblogname=BRANCH,value=BRANCH_NAME
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEFSの検証
2021/3/25 SPACEMARKET x Lancers Engineer MeetupECS FargateのEFS対応バージョン●バージョン1.4.0以上で対応○※現在はlatestが1.4.0以上になっている
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よりは遅いが、実用上問題ないレベルに
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEFSのバーストクレジットを使い切る。。●本番リリース後、約1週間でパフォーマンスが急激に低下
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEFSのバーストクレジットを使い切る。。●プロビジョニングIOPSを設定○EFSのサイズ:約7.5GB○100MB/sに設定(実際は300MB/s出る)費用がバカ高い
2021/3/25 SPACEMARKET x Lancers Engineer Meetupバッチの実行
2021/3/25 SPACEMARKET x Lancers Engineer MeetupEC2時代のバッチの実行●wp-cronは使わずcrontabで制御○管理画面用の小さいインスタンス上で実行していたALBWordPressWordPressAdminWordPressAuto Scaling GroupAuroraここでバッチを実行
2021/3/25 SPACEMARKET x Lancers Engineer MeetupDocker移行後のバッチ実行●ECS Taskで制御○AZ障害の対策にもなるALBWordPressECS Task WordPressAuto Scaling GroupAuroraEFSここでバッチを実行
2021/3/25 SPACEMARKET x Lancers Engineer Meetupまとめと今後の課題
2021/3/25 SPACEMARKET x Lancers Engineer Meetupまとめ(EC2サーバーとの比較)デプロイ バッチ レスポンス サーバー費用EC2自前のデプロイサーバーデプロイ時間:1分管理画面サーバーでcron平均約1秒t3.medium x 平均2台+ 管理画面(月額約10000円)DockerCIで処理デプロイ時間:7分+リポジトリ数 x 3分ECS Task 平均約2秒vCPU:2メモリ:2048MBx 平均4台+ ECS Task(月額約20000円)Docker+ EFSCIで処理デプロイ時間:1分(Dockerfileは7分)ECS Task 平均約3秒vCPU:2メモリ:2048MBx 平均4台+ ECS Task(月額約20000円)+ EFS IOPS(100MB/s)(月額約60000円)
2021/3/25 SPACEMARKET x Lancers Engineer Meetup今後の課題(サーバー費用を抑えるために)●CloudFrontの導入○クレジットを使い切らないレベルまでキャッシュさせる○動的コンテンツ(PHP)をキャッシュさせる■キャッシュ間隔の設定が課題●ランキング等は動的に変更される■セキュリティ面の配慮が必要●例えば管理画面はキャッシュできない●Fargate Spotの導入
2021/3/25 SPACEMARKET x Lancers Engineer Meetupご清聴ありがとうございました!