AWSが公表している 「BestPractices For Wordpress on AWS」AWS CDK で作ってみた
by
kinjo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
現場からは以上です。