Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS LambdaでSocket通信サーバーレスアプリケーションのリアルタイム通信 / 20...

AWS LambdaでSocket通信サーバーレスアプリケーションのリアルタイム通信 / 20250523 Kumiko Hennmi

2025/5/23  CloudNative Days Summer 2025
https://cloudnativedays.jp/

株式会社SHIFT
ソリューション本部 ソリューション事業部
セキュリティ・ネットワークサービス部 セキュリティサービス2グループ
辺見 久美子

Avatar for SHIFT EVOLVE

SHIFT EVOLVE

May 23, 2025
Tweet

More Decks by SHIFT EVOLVE

Other Decks in Technology

Transcript

  1. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. 2025 / CloudNative Days Summer 2025 辺見 久美子 AWS LambdaでSocket通信! サーバーレスアプリケーションのリ アルタイム通信 株式会社SHIFT ソリューション事業部 セキュリティ・ネットワークサービス部 Kumiko Hennmi 23 5
  2. Copyright SHIFT INC, All Rights Reserved. 3 Copyright SHIFT INC,

    All Rights Reserved. 自己紹介 セキュリティコンサルタントです。 茨城県の生まれです。 関東から出たことがほぼありません。 沖縄はじめてです!!!! 辺見 久美子 Kumiko Hennmi 3 ★ ★
  3. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 4 下記のようなアプリケーションをつくりたいと思ったことは ありませんか? リアルタイム通信が必要なアプリケーションです。
  4. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 5 クライアントからのリクエストがありました
  5. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 6 クライアントからのリクエストがありました 今回は、 サーバーレスで つくりました 今回は、 サーバーレスで つくりました
  6. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 7 注意点 今回の発表は、失敗したお話をします。 みてくださった方が同じ失敗をしないように、 どんなところに失敗したのかを発表させていただきます。
  7. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 9 リアルタイム通信のおさらい リアルタイム通信を実現しようとして、選択肢に入るのは下記の3つの技術ではないでしょうか? No. 通信方式 CPU使用率 費用 クライアント ブラウザの影響 特徴 1 WebRTC 低 低 高 ブラウザのみでのやりとり 2 Socket通信 低 中 低 ブラウザとサーバーのやりとり 3 ポーリング方式 高 高 なし 一定間隔で監視を行う ※JavaScriptを有効にしているのは前提 今回はSocket通信を選びました。
  8. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 10 構成 バックエンド処理を担当し ます。 動的な処理を実行できます。 設定できる最大実行時間は 15分です。 APIをつくれます。 通信方式は 選択できます。 ・REST ・HTTP ・Socket NoSQL DB です。 ファイルを保管 できます。 静的Webサイト も公開できます。 CDNです。 Amazon CloudFront Amazon S3 Amazon API Gateway AWS Lambda Amazon DynamoDB AWS Cloud Clients
  9. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 11 構成 Amazon CloudFront Amazon S3 Amazon API Gateway AWS Lambda Amazon DynamoDB AWS Cloud Clients Vue.js Node.js Socket DBです。 下記を管理します。 ・コメント ・コネクションID
  10. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. Amazon CloudFront Amazon S3 Amazon API Gateway AWS Lambda Amazon DynamoDB AWS Cloud Clients 12 構成 Vue.js Node.js Socket DBです。 下記を管理します。 ・コメント ・コネクションID 青枠にはAWSから2通りの方法が例として提示されています。
  11. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 13 構成 WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route Lambda function Mock Step Functions Lambda function Socket通信に必要な部品に 全てLambdaを使う方法 Socket通信に必要な部品に Lambda、Mock、Step Functionsを使う方法 案1 案2
  12. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 14 構成 WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route Lambda function Mock Step Functions Lambda function 採用理由:つくりやすそうだったから
  13. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 16 構成 Amazon CloudFront Amazon S3 Amazon API Gateway AWS Lambda Amazon DynamoDB AWS Cloud Clients AWS WAF [Lambda] ・ユニキャストしか使え ない 2時間しかつなげられない (メッセージを投げつづ けても2時間) →クォータ解除はなし [DynamoDB] ・コネクションIDが溜 まっていくと、クライア ントへの反応が悪くなる ★
  14. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 18 制限について Amazon CloudFront Amazon S3 Amazon API Gateway AWS Lambda Amazon DynamoDB AWS Cloud Clients AWS WAF [Lambda] ・ユニキャストしか使え ない 2時間しかつなげられない (メッセージを投げつづ けても2時間) →クォータ解除はなし [DynamoDB] ・コネクションIDが溜 まっていくと、クライア ントへの反応が悪くなる ★ AWS GatewayのSocket タイプについては 最大接続数の制限なし コネクションが 溜まるので削除していく 必要があります。
  15. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 課題が発生 ユーザーがチャットにログインして、チャットを切るまでの流れを画面から見てみましょう。 退出 送信 参加者全員のチャットルーム こんにちは。 こんにちは。 こんにちは。 こんにちは。 5 : 21 5 : 23 5 : 25 として、、 ログイン ユニキャストしか使えない Amazon DynamoDBの接続していないコネクションIDが残っていると反応が悪くなる件について
  16. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. として、、 ログイン 22 課題が発生 ユニキャストしか使えない Amazon DynamoDBの接続していないコネクションIDが残っていると反応が悪くなる件について 退出 送信 参加者全員のチャットルーム こんにちは。 こんにちは。 こんにちは。 こんにちは。 5 : 21 5 : 23 5 : 25 DynamoDBとLambdaが注意する点は赤枠で囲んだ部分になります。 1 2 3 4
  17. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 24 課題が発生 3 メッセージ受信 ログインしている人へメッセージを送信する ユニキャストだとコネクションIDのレコード数分だけ 送信処理を実行することになります。 送信ボタン メッセージをDynamoDBへ格納する。すぐに が実行される。 2 3 ユニキャストしか使えない Amazon DynamoDBの接続していないコネクションIDが残っていると反応が悪くなる件について AWS Cloud 省略 AWS Lambda Amazon DynamoDB
  18. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 課題が発生 ユニキャストしか使えない Amazon DynamoDBの接続していないコネクションIDが残っていると反応が悪くなる件について コネクションが増えると発生すること。 メッセージ来てない… メッセージが来るのが遅い ログインしている人はそんなに多くないのに なんで?! AWS Cloud 省略 AWS Lambda Amazon DynamoDB エラーで終わってる 最大15分にしても、 メッセージの送信が 全員分に終わらずに、 処理が終了する事態 が発生。 ※ログアウトした動物は薄くなっています。
  19. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 30 課題が発生 ユニキャストしか使えない Amazon DynamoDBの接続していないセッションが残っていると反応が悪くなる件について 原因をDynamoDBにたまりつづけるログインデータと特定した。 ブラウザを開いていないコネクションを DynamoDBから削除しなければいけないこと が判明した。 AWS Cloud 省略 AWS Lambda Amazon DynamoDB
  20. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 32 課題が発生した原因を特定 ユニキャストしか使えない Amazon DynamoDBの接続していないコネクションIDが残っていると反応が悪くなる件について AWS Cloud 省略 AWS Lambda Amazon DynamoDB 何が起きていたのか チャットを終わりにしたいから、 ブラウザを閉じよう。 なんてこった 退出ボタンを押す人は ほぼいません! 退出 4 コネクションIDが削除 されずに残っている。
  21. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 34 解決 ユニキャストしか使えない Amazon DynamoDBの接続していないセッションが残っていると反応が悪くなる件について チャットにきたよ AWS Cloud 省略 AWS Lambda Amazon DynamoDB 新しいコネクションID を作成
  22. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 36 解決 ユニキャストしか使えない Amazon DynamoDBの接続していないセッションが残っていると反応が悪くなる件について AWS Cloud 省略 AWS Lambda Amazon DynamoDB ログインできた。 全クライアントへ空の メッセージを送信する
  23. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 38 解決 ユニキャストしか使えない Amazon DynamoDBの接続していないコネクションIDが残っていると反応が悪くなる件について AWS Cloud 省略 AWS Lambda Amazon DynamoDB メッセージの返却が なかったコネクショ ンIDを削除する 2 ブラウザから空の メッセージを受信した とサーバーへメッセー ジを返却する 1 ブラウザを開いて いなければメッセージ の返却ができない。 1
  24. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 40 解決 ユニキャストしか使えない Amazon DynamoDBの接続していないセッションが残っていると反応が悪くなる件について AWS Cloud 省略 AWS Lambda Amazon DynamoDB メッセージの送信先が 減るため、応答が速く なる
  25. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 41 もう一つの構成を選んだらどうなっていたか WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route Lambda function Mock Step Functions Lambda function この構成はブロードキャストとして、 公式が発表しています。
  26. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 42 もう一つの構成を選んだらどうなっていたか WebSocket API Lambda function DynamoDB AWS Cloud Clients $connect route Sendmessage route $default route $disconnect route Lambda function Mock Step Functions Lambda function この構成はブロードキャストとして、 公式が発表しています。 この構成はブロードキャストとして、公式が発表して います。 しかし、サンプルで用意されているLambdaのソース コードをみると、ユニキャストでメッセージを送信し ています。 実際はユニキャスト通信を行っています。 疑似的なブロードキャストでした。 こちらを選んでも同じ問題に直面していたと考えられ ます。
  27. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. 43 6月5日(木)19時30分~オンラインで、SHIFT EVOLVEをやります! パネルディスカッション『本当に必要なセキュリティ対策の勘所』 60分 1.・狼少年にならないためのコンサル 2.・セキュリティコストを経営層に納得してもらう方法 3.・セキュリティ人材の育成と内製化 4.・視聴者からの質問 山本 純 氏 森本 悠太 氏 SHIFT 大瀧 広宣 私がLTをさせていただきます。ぜひ、みてください! LT『CloudBruteによる外部からのS3バケットの探索・公開の発見について』 S3バケットを公開設定にしていると見つけちゃうよという内容です。 本当に必要なセキュリティ対策の勘所(AWSぶっちゃけ討論会vol.3 )
  28. Copyright SHIFT INC, All Rights Reserved. Copyright SHIFT INC, All

    Rights Reserved. Copyright SHIFT INC, All Rights Reserved. ご清聴ありがとうございました