SREのあだちんです!!
というわけで!!
PHPカンファレンス仙台2019にて、弊社SREチームリーダー金澤さんが登壇するので、初!仙台に行ってきました!!その様子と登壇内容を簡単に解説&ブログしていきます。
SESSION
https://phpcon-sendai.net/2019/
弊社ランサーズではWordpressをAWSで運用しています。1台のインスタンスにいくつものメディアが可動しているのですが、スケールアウトのノウハウやHTTPS化、セキュリティ対策など合わせてご紹介できればと思います!
ちなみにエンジニアブログでもご紹介されているのでぜひ参考にしてみてください。
1/25 13:00~
まずは恒例のエントランスでの写真撮影から!
お昼は会社近くの磯丸水産でランチ!!安いのでおすすめです!
(って新幹線で駅弁食べないのかい!!)🚅
https://tabelog.com/tokyo/A1303/A130301/13208791/
1/25 14:25~
新幹線乗った🚄
もうブログ書いちゃう👍#phpconsen pic.twitter.com/brPuQ1IadA— adachin👾SRE (@adachin0817) January 25, 2019
隣でざわさんはひたすらスライドを修正しまくっていましたが、
私もこのブログを書いていました。平日ということもあり、車内はガラガラ 。非常にのどかです。🗻そして、
私もPHPカンファレンス仙台行きたかった……😇 pic.twitter.com/gmu7zFToJc
— ランサーズ社内広報 (@lancers_people) January 25, 2019
採用広報にずんだもちのお土産を要求される👀ちなみに自分は食べたことがない😋
1/25 16:04~
仙台到着!!雪がぱらつき、なんとも風情がある街!
そして我々は前前夜祭へ向かいます。
前前夜祭!!#phpconsen pic.twitter.com/WCZWzO0Xun
— adachin👾SRE (@adachin0817) January 25, 2019
からの!!!前夜祭!!
前夜祭!!#phpconsen pic.twitter.com/YY1ico4rBD
— adachin👾SRE (@adachin0817) January 25, 2019
そーだいさんダイエットしてるらしい!!#phpconsen pic.twitter.com/nQZR2Etc4y
— adachin👾SRE (@adachin0817) January 25, 2019
オミカレCTOそーだいさんに遭遇!!!
地元仙台出身のエンジニアさんも集まり、金澤さんと同い年の方もいたのは偶然すぎる!
2次会は行かず、金澤さん実家へ泊まりに行きました(どんだけ仲いいのよ!)
— uzulla (@uzulla) January 25, 2019
そーだいさんのリアクションがあまりにも面白すぎて思わずリツイート。
後ろの「食べたらやみつきだ」が似合う。
1/26 08:00~
大雪! pic.twitter.com/AIJbYOAEDD
— adachin👾SRE (@adachin0817) January 25, 2019
朝から大雪!!凍結!!危うく転ぶところだった。。
リッチな朝ごはん🥞 pic.twitter.com/oXPEea1T5d
— adachin👾SRE (@adachin0817) January 25, 2019
朝ごはんはオシャンティーカフェで最後のスライド確認!
本日はこちら👀#phpconsen pic.twitter.com/fpkcZpDWeI
— adachin👾SRE (@adachin0817) January 26, 2019
現地に到着!!
ランサーズステッカーゲットしに来てください〜#phpconsen pic.twitter.com/JKYt7JoEpg
— adachin👾SRE (@adachin0817) January 26, 2019
ランサーズ集まった!!#phpconsen pic.twitter.com/krrIKHPQFT
— adachin👾SRE (@adachin0817) January 26, 2019
1/26 10:25~
「AWSでWordPressのスケールアウト」
では、簡単に解説していこうと思います!!
ランサーズのWordpressサーバの構成はPHP7.2、PHP-FPM、Nginx、Aurora MySQL5.7、GIthub、自前のdeployシステムでリリースしております。今回は自前でプラグインを作成している、大量アクセスで捌けない!などスケールアウトによる運用が今回ターゲットとなります。
スケールアウトの課題としては、DBが2つ以上のサーバに分離してしまう、ファイルのアップロードができない、管理画面からプラグインをアップロードできない、wp-cronがサーバの数だけ実行されてしまう、アクセスログが分散されてしまう恐れがあります。
ここで、スケールアウトの準備をしましょう。まずはVPCを構築し、Public Subnetを切ります。そしてEIPを付与します。
そしてRoute53でALBのエンドポイントとAレコードAliasで設定をします。
先程のPublic SubnetにALBを配置し、Private Subnetを設定します。そしてWordpressサーバをPublic Subnetに移動します。ALBのメリットとしてはACMによる無料でSSLの証明書が取得可能。セキュリティ向上、HTTP2、SSL Terminationをサポートします。
DBはまずPrivate Subnetを作成していきましょう。RDSのメリットとしてはリードレプリカの追加が簡単で、スケールアウトが楽なところ。自動バックアップやポイントリカバリ機能もあります。Auroraのメリットはリードレプリカが15台まで作成可能で、レプリカ遅延が低く、Readerエンドポイントも提供されています。なので、リードレプリカ追加時の負荷分散が楽なところと、haproxyなどインストールしなくても済みます。デメリットとしてはInnoDBのみサポートしており、MyISAMしか対応していないプラグインもあるので注意してほしいところです。
アップロードディレクトリの分離はS3バケットを用意し、wp-contents/uploads以下のファイルを格納します。プラグインはWP offload Media Liteを使って画像をS3にアップロードします。
プラグイン導入後、SQLでINSERT文をwp_postmetaテーブルにデータを追加していきます。必要に応じてURLの修正をしなければならないので、mysqldumpでエキスポートして修正するのが楽でしょう。
ログの集約はtd-agentでS3に集約していますが、今後CloudWatch Logsの方が学習コストが低いので導入しやすいと思われます。
管理画面専用サーバを構築することで、/wp-admin、/wp-login.phpをIP制限したり、cron実行、deploy処理を行えます。
プラグイン追加とアップデートは上記のようにgit pullをansibleで実行しています。
冗長構成するのであれば2つ以上のAZにAppとDBを分散すれば、AZレベルの障害でも対応できるようになります。
以上!
@for__3 さんツイートありがとうございます!!!
何も考えないでスケールアウトすると、、
DBが分散
ファイルアップデートしても片方にしかない
画面からプラグインのアップデートできない
wp-cronがサーバの数だけ起動
アクセスログなどが分散
#phpconsen— ℤ𝕆𝔼𝟛𝟘𝟚/ウィルゲートVPoE (@for__3) January 26, 2019
待ちに待ったランチ!!
善治郎うめええええ
私は自重しません👍 pic.twitter.com/pt3UVzpMsQ— adachin👾SRE (@adachin0817) January 26, 2019
仙台と言えば「牛タン!」
我々は善次郎さんでたらふくいただきました。
にしても小林さんのビールジョッキ大はデカイ。そして飲みきった!!
まとめ
実際に仙台のエンジニアさんと交流できたのは熱かったです!!
そして強いエンジニアさんとも人脈掴めたのはいい経験でした。
個人的に仙台へはまた行きたいと思います。
他の登壇者については私個人のブログで紹介したいと思います!!
↓書きました。