AWSサーバーレスアーキテクチャでハマった3つこと


リンクバル技術部の川畑です。先日弊社でリリースしました、リアルタイム飲み会マッチングアプリ together の裏側のアーキテクチャについて、ANKEY主催のセミナー クラウドヂカラ #AWSセミナー 〜エンジニアに求められる本当のスキルとは〜 のLT枠で発表させて頂きましたので、その内容を紹介させて頂きます。

togetherの仕組み

IoTボタンを飲食店においていただき、そのお店で飲食をしているお客様にボタンを押していただくと、togetherアプリをダウンロードしている方々に通知が届きます。その通知に申し込んでお店に足を運んでいただき、合流して飲み会を楽しんでいただくアプリとなります。

togetherシステム構成

IoTボタンとtogetherアプリからインターネット・クラウド経由でサーバー側と通信をします。サーバー側はAWSで構成されており API Gateway でリクエストを受け、その受けたリクエストを Lambda で処理して DynamoDB に対してデータ入出力をするといった典型的なAWSのサーバーレスアーキテクチャーとなります。

このうちのAWSのサーバーレスアーキテクチャーを利用するにあたって、ハマったこのあたりのことについてまとめました。

①API Gatewayでハマったこと

発生した問題

何回かリクエストを投げるとhttpリクエストコード200だったのが、429(Too many requests)に変わってしまった。

原因

API Gatewayが受け付けることができる、リクエスト数の制限を超えてしまった。

解決方法

リクエスト数の上限を調整する。(※設定箇所2箇所あるので注意)
– Stage
– Usage Plan

②Lambdaではまったこと

発生した問題

突然、Push通知が繰り返し通知されるようになってしまった。

原因

Push通知を実行するLambdaスクリプトでタイムアウトが発生して、リトライを繰り返していた。

解決方法

タイムアウトの時間を延ばす。(※デフォルト「0.3秒」)
– PUSH配信処理なので、最大の「5分」に設定

③DynamoDBでハマったこと

発生した問題

指定したアトリビュート(RDBでいうところのカラム)を条件指定して、データを検索できないといった問題が開発中に発生した。

原因

DynamoDBは特定のアトリビュートを指定して、データ検索する場合、インデックスを作成しなければならない。

解決方法

インデックスを作成する。
– DynamoDBではRDBのように、任意のカラムをWHERE句に指定して、データ検索することができないので、インデックス設計は重要

together最新情報

東京六本木横丁渋谷肉横丁でtogetherボタンの設定開始しました!
これを機会にぜひ、togetherを体験してみてください!

最後に

会場はこのような感じでした。約70名ぐらいの方の前で大変緊張しました。

普段はインフラエンジニアですが、今回はこのシステムのサーバーサイドを担当して、大変勉強になりました。今のところEC2+RDS構成のシステムが多いですが、今後はサーバーレスアーキテクチャを利用して社内のマイクロサービス化などの推進していきたいと思います。

リンクバルではエンジニアを積極的に募集中です。興味のある方は こちら ご覧ください。

修正履歴

  • 2018/7/14 システム構成図に誤りがあり「VPC」→「AWS」に修正