ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

Labels:  AWS, WordPress, イベント/登壇 投稿者:adachin

[AWSでWordPressのスケールアウト]PHPカンファレンス仙台2019に参戦してきた!

SRE/採用広報のあだちんです!!

というわけで!!

PHPカンファレンス仙台2019にて、弊社SREチームリーダー金澤さんが登壇するので、初!仙台に行ってきました!!その様子と登壇内容を簡単に解説&ブログしていきます。

SESSION

https://phpcon-sendai.net/2019/

弊社ランサーズではWordpressをAWSで運用しています。1台のインスタンスにいくつものメディアが可動しているのですが、スケールアウトのノウハウやHTTPS化、セキュリティ対策など合わせてご紹介できればと思います!

ちなみにエンジニアブログでもご紹介されているのでぜひ参考にしてみてください。

https://bit.ly/2K3Z0r4

1/25 13:00~

まずは恒例のエントランスでの写真撮影から!
お昼は会社近くの磯丸水産でランチ!!安いのでおすすめです!
(って新幹線で駅弁食べないのかい!!)🚅

https://tabelog.com/tokyo/A1303/A130301/13208791/

1/25 14:25~

隣でざわさんはひたすらスライドを修正しまくっていましたが、
私もこのブログを書いていました。(はやっ)
平日ということもあり、車内はガラガラ 。非常にのどかです。🗻
そして、

採用広報にずんだもちのお土産を要求される👀
ちなみに自分は食べたことがない😋

1/25 16:04~

仙台到着!!雪がぱらつき、なんとも風情がある街!
そして我々は前前夜祭へ向かいます。

からの!!!前夜祭!!

オミカレCTOそーだいさんに遭遇!!!
地元仙台出身のエンジニアさんも集まり、金澤さんと同い年の方もいたのは偶然すぎる!
2次会は行かず、金澤さん実家へ泊まりに行きました(どんだけ仲いいのよ!)

そーだいさんのリアクションがあまりにも面白すぎて思わずリツイート。
後ろの「食べたらやみつきだ」が似合う。

1/26 08:00~

朝から大雪!!凍結!!危うく転ぶところだった。。

朝ごはんはオシャンティーカフェで最後のスライド確認!

現地に到着!!

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 さんツイートありがとうございます!!!

待ちに待ったランチ!!

仙台と言えば「牛タン!」
我々は善次郎さんでたらふくいただきました。
にしても小林さんのビールジョッキ大はデカイ。そして飲みきった!!

まとめ

実際に仙台のエンジニアさんと交流できたのは熱かったです!!
そして強いエンジニアさんとも人脈掴めたのはいい経験でした。
個人的に仙台へはまた行きたいと思います。
他の登壇者については私個人のブログで紹介したいと思います!!
↓書きました。

[2019/01/26]PHPカンファレンス仙台2019に行ってきた!

😋

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。


【中途採用】
サービスリードエンジニア
テックリード(アーキテクト)
フロントエンドエンジニア
サーバーサイドエンジニア
業務エンジニア(社内システム基盤・基幹システム)

【インターン・学生バイト】
19新卒対象サマーインターン
エンジニアインターン

その他採用情報

関連記事

PHP、CakePHPバージョンアップの決断

インフラエンジニアの金澤です。 この度、ランサーズ稼働環境(PHP + CakePHP)のバージョンアップを決断しました。 まずは私から、その経緯と計画についてお話いたします。 バージョンアップ決断の理由 ランサーズは、2008年にサービスを開始しました。 現 …

AWSのスポットインスタンス運用

はじめまして。ランサーズインフラエンジニアの金澤です。 AWSのスポットインスタンスを利用したことはありますか? スポットインスタンスとは、AWSの余剰インスタンスを入札制で提供する仕組みです。 各インスタンスの1時間あたりの料金比較しても、スポットインスタン …

CakePHP3.5における各種実装例 ~ LancersTop 開発現場より ~

こんにちは エンジニアの上野 です。本日「CakePHP3.5における各種実装例」という題目で登壇するので、発表資料をアップロードします。資料として使えるようにコード例などを厚めに盛り込んだスライドですので役に立てると嬉しいです。 CakePHP3.x での各 …