こんにちは。
経営企画室 プロトタイプビルダーの山下です。
ラーニングサービス本部 テクニカルトレーニング第一部と兼務でプロトタイプビルダーを始めました。
身の回りで行っているちょっとしたプロトタイピングなどを紹介していきたいと思います。
今日ご紹介するのは、トレーニングコース中に受講者さんからのご質問を匿名で受け付けるご質問フォームの最近のアーキテクチャです。
2019年6月からブログでは更新していなかったのですが、少しずつ見直しを図ったり、機能追加していました。
ここ最近のアーキテクチャは、アイキャッチにも使用していますこちらです。
このご質問フォームは、匿名でご質問を受付できる、という目的だけではなく、このアーキテクチャそのものを、Architecting on AWS、Developing on AWSというAWS認定クラスルームトレーニング(現時点では山下実施時のみ)でベストプラクティスを解説するための体験型デモとしての役割も担っています。
AWSの設計/開発ベストプラクティスの一つに、疎結合化があります。
このブログでは、ソフトウェアの制約があるようなケースで、疎結合化によって機会損失を減らし、耐障害性をどのようにして向上するか、一つのユースケースとして解説します。
解説しやすくするため、対象のアーキテクチャを絞ります。
データの流れは、S3にデプロイした静的フォームに入力されたご質問メッセージが、API Gatewayに送信されて、SNSからSQSへファンアウト、Lambdaがキューコンシューマーとしてメッセージを受信してRocketChatというOSSのAPIにPOSTしています。
こうすることで、受講者さんからのご質問を受講者さん全員が手元で共有することができ、講師やサブ講師からの返答もリアルタイムに確認することができます。
匿名ですので、ご質問の敷居も下がります。
RocketChatはOSS(オープンソースソフトウェア)です。
構築のやり方によっては、データベースを別のインスタンスにして、複数のEC2やコンテナで冗長化を図ることも可能かと思いますが、今回は迅速にシンプルに構築するために、Ubuntuサーバーで "sudo snap install rocketchat-server" コマンドを実行することによって、一式をインストールしています。
例えば、このRocketChatサーバーを、自分たちではカスタマイズすることのできない制約付きのソフトウェア、または外部のサービスAPIと仮定します。
そう仮定したとき、RocketChatはいつ止まるか分からないSPOF(単一障害点)と位置づけることができます。
RocketChatを単一障害点と位置づけた上で、RocketChatサーバーが停止しても受講者さんがご質問を送り続けられる設計を考えたいと思います。
LambdaからRocketChat APIへのPOSTが失敗してもSQSにご質問メッセージは残ります。
そして、デッドレターキューを指定しているので、30回再試行してPOSTできなかったメッセージはデッドレターキューへ移動します。
RocketChatが復旧してからメッセージをLambdaに渡してあげれば、メッセージを失うことなく、RocketChatへPOSTできます。
RocketChatをあえて、t3a.small という小さめのインスタンスで起動しています。
だいたい3日コースであれば、1回はCPUが高騰してユーザーアクセスも、APIアクセスも受け付けられなくなる事象が発生します。
今のところ、原因はCPU高騰で、再起動によって復旧するので、CloudWatchアラームで自動再起動を設定しています。
発生した場合は10分ほどRocketChatにはアクセスできなくなりますが、その間もご質問は送信し続けていただくことができます。
そうして復旧後に、CloudWatchアラームが実際にどう動いたかを見ていただくこともできます。
(t3なのでCPUバーストの解説にも重宝しています)
AWSで構築したツールを使いながら、AWS認定クラスルームトレーニングを受講されてみてはいかがでしょうか。
皆さまのご受講を心よりお待ちしております。
トレノケートのAWS認定トレーニングでは、AWS社の厳格なテクニカルスキル及びティーチングスキルチェックに合格した認定トレーナーがコースを担当します。AWS初心者向けの研修や、AWS認定資格を目指す人向けの研修をご提供し、皆様のAWS知識修得のサポートをいたします。
・トレノケートのAWS研修(AWS認定トレーニング)はこちら
▼AWS初心者の方は、 AWS Cloud Practitioner Essentials から!
座学中心の研修で、AWSを初めて学ぶ方や、営業などで提案に関わる方におすすめです。
「AWS Certified Cloud Practitioner」資格取得を目指す方の基礎知識修得にも最適です。
→ 詳細・日程はこちらから
▼実践スキルを磨くなら、AWS Technical Essentials で !
実機演習が中心の研修です。仕事で構築作業を行う方や、シナリオベースの演習を通じて、実際に手を動かしながら各サービスの特徴を学びたい方におすすめのAWS研修です。
→ 詳細・日程はこちらから
いきなりの有償コースに抵抗がある方やまずはお試しをしてみたい方は、トレノケートが実施している無料セミナーがおすすめです。詳細はセミナーページよりご確認ください。
▼無料セミナーの詳細はこちらから