Slide 1

Slide 1 text

AWSが公表している 「BestPractices For Wordpress on AWS」 AWS CDK で作ってみた

Slide 2

Slide 2 text

自己紹介 会社名: 株式会社シーエー・アドバンス 名前:金城 裕也(きんじょう ゆうや) [email protected] github.com/yuyakinjo 最近、CDKやってます

Slide 3

Slide 3 text

今日話したい事 ・ベストプラクティスで公開されているアーキテクチャを参考にCDKで作ってみた ・当初やろうとしていた構成 VS ベストプラクティスでパフォーマンス比較 ・ベストプラクティス + α ・やってみて感想

Slide 4

Slide 4 text

AWS CDKとは

Slide 5

Slide 5 text

AWS CDK とは ・AWS Cloud Development Kit(CDK)は、クラウドインフラをコード で定義するためのオープンソースのソフトウェア開発フレームワーク です ・Python, Java, TypeScript等の言語を使えます ・CloudFomation −(JSON・YAMLつらみ) = CDK

Slide 6

Slide 6 text

「BestPractice For Wordpress on AWS」を取り入れるまでの背景

Slide 7

Slide 7 text

弊社でグループ会社の社内・社外広報 サイトを担当 ・非エンジニアさんでもサイト編集できるよう広く普及した wordpress採用

Slide 8

Slide 8 text

現状の構成(グレーアウトは非採用)

Slide 9

Slide 9 text

課題点 ・サイトちょっと重いね(特に初期表示・画像・動画) ・アクセス殺到すると落ちるね(DBコネクション原因ぽいね) ・データ料金(EFS)高いね

Slide 10

Slide 10 text

改善アクション ・サイトちょっと重いね(特に初期表示・画像・動画) → CloudFrontでキャシュ ・アクセス殺到すると落ちるね(DBコネクションプール枯渇が原因ぽい) → AuroraServelessV2に切り替え ・データ料金(EFS)高いね → S3に画像・動画移動

Slide 11

Slide 11 text

でも実は、AWSの担当者様から アドバイスはもらっていた・・・ 弊社では、年1ぐらいで(コロナ時期除く)、AWSの担当者様から 新しいサービスの紹介や、現在弊社で運用しているシステムの アーキテクチャを直々にレビューしてもらう機会がありました。 その時に、上述した課題点をお伝えし、ベストプラクティスなるものを共 有してもらっていた。

Slide 12

Slide 12 text

「Best Practices for WordPress on AWS」 の概要

Slide 13

Slide 13 text

・AWS ホワイトペーパーとガイド AWS と AWS コミュニティによって作成された、テクニカ ルホワイトペーパー、技術ガイド、参考資料、リファレンス アーキテクチャ図などの技術文書(抜粋)。 Best Practices for WordPress on AWS

Slide 14

Slide 14 text

ベストプラクティス構成

Slide 15

Slide 15 text

現状の構成(グレーアウトは非採用)

Slide 16

Slide 16 text

改善アクション → CloudFrontでキャシュ → AuroraServelessV2に切り替え → S3に画像・動画移動 → 上記で、課題は解決するはずだから、 memcachedはオプションで!!

Slide 17

Slide 17 text

memcachedなしでいくぞう

Slide 18

Slide 18 text

CDKにて作成後、パフォーマンス比較

Slide 19

Slide 19 text

負荷テストで、1200req / 10sec 結果:2xx → 20%弱 リクエスト過多 → ALB 503 もしかして、memcached必 要なのか 伸びない・・・

Slide 20

Slide 20 text

memcached追加!!

Slide 21

Slide 21 text

アクセス改善1000倍以上 248req/10sec → 20000req/10sec ※リンクを共有して10秒以内に全社員がアクセスしたのを想定

Slide 22

Slide 22 text

負荷テストで、20000req / 10sec 結果:2xx → 99%以上 リクエスト過多 → ALB 503 ならない memcached必要やん! 伸びすぎた草

Slide 23

Slide 23 text

ELB が503返さない memcached 必要やん!

Slide 24

Slide 24 text

レスポンスタイム改 善 memcached 必要やん!

Slide 25

Slide 25 text

DBコネクション枯 渇しない memcached 必要やん!

Slide 26

Slide 26 text

ECSのメトリクスが穏やかになっている スパイクしても、スケールする余裕ある。。。

Slide 27

Slide 27 text

memcached 頑張ってるね

Slide 28

Slide 28 text

・memcached ・memcachedを活かすplugin(w3-total-cache) ・pluginの使用方法もリポジトリで解説してました まとめ:強さのポイント

Slide 29

Slide 29 text

ベストプラクティス + α

Slide 30

Slide 30 text

EC2のスケール管理辛い + そういえば、 認証必要だった

Slide 31

Slide 31 text

・スケール管理を楽にしよう EC2 → ECS ・認証 社内向けのためコンテンツ・コンテンツに掲載されている画像・動画類 → 社内のSSO通った人のみ ベストプラクティス + α

Slide 32

Slide 32 text

構成図でみる認証経路

Slide 33

Slide 33 text

・①⇔④ CloudFront - ALB 間はOIDC使う(やったことある) ・①⇔② CloudFront - S3間どうしよう(やったことない) 認証は、社内独自SSO(CASSO)

Slide 34

Slide 34 text

え、Lambda@EdgeとCognito 準備するの・・・ Lambda + Cognito大げさ・・・ 公式見ると実装例ある!が・・・・

Slide 35

Slide 35 text

世にあるのもそ れに追随する が多い・・

Slide 36

Slide 36 text

ALB ⇔ S3 に認証を寄せるか 副作用:CloudFrontのキャッシュ使わないことになるかもだけど。安全第一 参考例あるかな・・・・ 近いのあった!!!! リリースが昨年末 1. VPC Endpointを準備 2. ALBのターゲットグループに設定 これこれ感

Slide 37

Slide 37 text

認証込み構成図

Slide 38

Slide 38 text

・EC2 → ECS Fargate ・認証 ALB ⇔ VPC Endpoint ⇔S3 1. すべての認証経路をALBのOIDCに寄せ、サーバーサイドに リクエストが届かない(便利!) 2. アプリ側で認証を実装しない(差分少なくて楽!) +α の まとめ

Slide 39

Slide 39 text

今回やってみた感想

Slide 40

Slide 40 text

ベストプラクティス は 裏切らない

Slide 41

Slide 41 text

・認証はさんだ時のキャッシュ(CloudFront)の扱い方 headerとかcookieとかの条件が難しいのでパス!安全第一 苦労したところ①

Slide 42

Slide 42 text

・CDKでVPC EndpointのENIからPrivate IPアドレスの取得 まだ普及していないやり方なので、CDKではまだ実装 例ないので、自力で取得! 参考 :https://aws.amazon.com/jp/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with -alb-s3-and-privatelink/ 苦労したところ②

Slide 43

Slide 43 text

流れ VPC Endpoint作成 ↓ ENIからIPアドレス抽出 ↓ ALBのターゲットグループ に追加

Slide 44

Slide 44 text

次の改善点

Slide 45

Slide 45 text

次の改善点 ・CloudFront入れたけど、まだキャッシュさせてるものない(副作用) → ホワイトペーパーにヒントがありそう ・ALB ⇔VPC Endpoint ⇔ S3間のキャッシュ → AWS File CacheかAWS StorageGateway使えそう? ・誰でも使えるようにしたい → ConstructHub、Github、Qiita等で共有

Slide 46

Slide 46 text

現場からは以上です。