AWS Startup ブログ

【週刊 Ask An Expert #47】スパイクアクセスを捌きたい?先週の #AWSLoft で受けた質問をざっくり紹介!

こんにちは、スタートアップ ソリューションアーキテクトの塚田 (Twitter: @akitsukada) です。

さて先週は通常の Ask An Expert に加えて、専門分野を持つスペシャリストによる Special Expert Day も提供させていただき、おかげさまで大盛況に終わりました。Special Expert Day はまた皆さんからのフィードバックを踏まえ実施を検討したいと思っています。ぜひ今後に関するご要望・ご感想をお寄せください!

Loft Tokyo Unicorn

誰もいない AWS Loft Tokyo と寂しそうなユニコーン

そもそも Online Ask An Expert とは?

皆さん、AWS Loft Tokyo の Ask An Expert はご存知でしょうか?現在残念ながら、新型コロナウィルス対策のため AWS Loft は2020年3月から一時的に休館中です。
しかしそんな中、多くのお客様からのリクエストを受けて、Ask An Expert は 2020 年 12 月から Online Ask An Expert に姿を変えリモートでの対応を開始しました。そんな Online Ask An Expertはこちらからご利用いただけます!

利用方法は簡単3ステップ!動画による説明も御覧ください

  1. AWS Loft App でアカウント登録
  2. Online Ask an Expert(オンライン相談)の利用申請
  3. スケジュール予約

https://www.youtube.com/watch?v=9ffZcQ9y-fI

それでは、今日も先週いただいた質問から、執筆者の独断によりいくつかピックアップしてざっくり解説していきたいと思います。Let’s ask an expert!

週刊 Ask An Expert #47 (2021/02/15〜2021/02/19)

Q. 先日提供開始された AWS PrivateLink for Amazon S3 を使って、ローカルの PC から S3 まで閉域接続しようとしているができない。*1

VPC、VPC Endpoint, Client VPN という構成を取られている模様。その場で Client VPN を繋げて S3 PrivateLink 用のエンドポイントを指定し、aws s3 lsコマンドを実行していただいても返答が返って来ず。Client VPN を貼った状態で dig コマンドなどは通るため、DNS server (resolver)は正しく設定できている様子でした。

L4 の問題と推測されるためセキュリティグループあたりから見直してみようということで、一緒に設定を確認し、HTTPS が開いていなかったので開けたり、などいくつか設定を直させていただきました。

ただ解決する前に惜しくも時間切れになってしまったため、AWS CLI の debug オプションと VPC Reachability Analyzer でのデバッグを紹介しお試しいただくようご案内しました。*2

*1. 「○○したいが期待通りの結果にならない」といったトラブルシューティング系のご相談は、 Ask An Expert より AWS サポートが適していることも多くございます。AWS 上で本番環境のシステムを運用されていて AWS サポート未利用の方は、ビジネスサポートプランあるいはエンタープライズサポートプランをぜひご検討ください。

*2. その後 VPC Reachability Analyzer を利用しながら解決に至ったとのことです。よかった!

Q. フロントエンドは Vue.js、バックエンドは Ruby on Rails で動いているシステムがあり、全て Amazon ECS で稼働している。現状、両方を同時にデプロイしないと障害につながってしまう場合があるため、全体を Blue/Green デプロイメントにできないか考え中。

お話を伺う限り、各サービスの使い方というよりはデプロイ周りの運用設計に課題を持たれているようでしたので、サービスの運用周りを中心に議論を進めました。

1. デプロイライフサイクルについて

フロントエンドとバックエンドでデプロイのタイミングを同期させなければいけない点がリリースにおけるボトルネックになっている模様。
→ 後方互換性を意識したバックエンドの設計を行うことで、フロントとバックエンドでデプロイライフサイクルを分けることをお勧めしました。

2. RDB のスキーマの更新について

Rails の migration を用いて最新のアプリケーションがリリースされるタイミングで DB のスキーマ変更が行われるため、単純に Blue/Green にするとロールバックの必要性が発生した時にスキーマを戻す術がない。
→ こちらも後方互換性を意識したスキーマ、アプリケーション設計にすることと、バックエンドのアプリケーション反映のタイミングと DB スキーマ変更のタイミングを分けることを提案しました。

3. Vue.js の静的サイトのホスティングに関して

Nuxt.js を使っており、Amazon S3 にホスティングしているとのこと。デプロイの際は自作の S3 アップロードスクリプトを GitHub Actions で走らせている。
Amplify Console を利用し、GitHub への Push をトリガーに自動デプロイする方法をご紹介しました。

Q. スパイクアクセスが見込まれるサービスを設計中。コンテナと AutoScaling を活用してどのように凌ぐことができるか?すでに Amazon EC2 ベースで本番環境で稼働中の Web サイトがあり、それをコンテナや AutoScaling を導入することでスケーラブルにしたい。

性能要件などのお話を伺うと、一日あたり 1,000 万リクエストを想定しているがピークタイムや秒間の最大リクエスト数などは確認できていないとのこと。

また現在の本番環境の構成は、Amazon CloudFront - Application Load Balancer - Apache on EC2 - Amazon RDS で、 AutoScaling は設定していない模様。クライアント(PC ブラウザ/ モバイル ブラウザ/ ネイティブアプリ)ごとに別の動的サイトを配信することを考えているため、S3 や Amplify Console を使った静的サイトホスティングの構成は取れないと思う、のことでした。

諸々ヒアリングさせていただいた上、以下の議論とご案内をしました。

  1. まず要件をもう少し明確にしたほうがよいと思われる。秒間 rps は見込みいくつなのか。動的と言っているのは厳密にどこからどこまで動的なのか。
  2. 突発的に発生するスパイクアクセスだとすると、その対応はやはり静的 Web サイトにして CloudFront + S3 や Amplify Console でアクセスを捌くのが、費用的にも工数的にも効果的と思われる。レスポンシブデザインにできないか、検討してみていただくことをおすすめ。
  3. そもそも今回のサイトは、リクエスト数が一気に増えるのはキャンペーン的に大量のプッシュ通知やメール通知などを送ったタイミングとのこと。それであればスパイクアクセスといっても予見・予定できる性質のものといえる。
  4. 予見できるトラフィックなのであれば、 AutoScaling で負荷ベースでインスタンスやコンテナを増やすよりは事前にスケールアウトしてしまったほうが効率がよい。
  5. あるいは、一斉に送信するビジネス上の必要性がないのであれば、プッシュ通知やメール送信の基盤として Amazon Pinpoint を用い送信スピードを調整することで、そもそも短時間にアクセスが集中しないようコントロールすることもできるので、ビジネス要件を確認していただくようお願い。
  6. 負荷試験の実施に関連して https://thinkwithwp.com/jp/ec2/testing/ をご案内。

週刊 Ask An Expert まとめ、今回はここまで

最後までお読み頂きありがとうございます。

冒頭に書いたように、執筆者の独断により興味深かった質問を選び、かつざっくり要約して記載しています。実際にはより具体的な質問をより多く頂いていますが、様々なご相談があることが伝わっていれば幸いです。まだ Online Ask An Expert をご利用になったことがない方も、ぜひ一度お気軽にご利用ください。

最後に一つ、コミュニティイベントのご紹介です。

AWS 利用中のスタートアップで有志のみなさんが、AWS Startup Tech Meetup Online というイベントを運営してくれています。


AWS Startup Tech Meetup Online#2 | 2/25 (木) 20:00〜

オンラインで開催されるので、Startup な事例を聞きたいという皆様はぜひご参加ください!

このブログの著者

A author image of Aki Tsukada塚田 朗弘(Aki Tsukada)
Head of Startup Solutions Architect, Japan.
AWS Amplify が好き。

Twitter: @akitsukada