1.7K Views
March 15, 25
スライド概要
JAWS-UG 茨城 #1 Education-JAWSコラボ回 で登壇した際の資料になります。
https://jawsug-ibaraki.connpass.com/event/344842/
アカウント周りの処理とかについて みずあめ(@mizuameisgod) @JAWS-UG 茨城 #1 Education-JAWSコラボ回 2025/03/15
About Me 名前: 佐藤 良 年齢: 18歳 所属: 筑波大学情報学群情報科学類1年 ついったー: @mizuameisgod web: https://mizuame.works/ やってること: ゲームクライアント、インフラ、機械学習、言語モデル?、セキュリティ、 web、ネットワーク etc… 興味があることは割と何でもかじっています
gametreeというwebアプリをリリースした https://gametree.info/@mizuame
gametreeとは GUIでぽちぽちやるだけで、 ゲーマー向けのプロフィールサ イトを作成できる。 動画も設定可能。 ゲーマー版Linktreeみたいな
構成 バックエンド: AWS , Cloudflare フロント: ただのMPA(Pages)
SNSにおけるユニークIDと通常ID まずcognitoからはsubというUUIDが振られる。 が、 gametree.info/@{username} ルーティングしたい。 つまり、 sub(アカウント作成時にcognitoから自動割り当て、ユニーク、変更不可) user_name(アカウント作成時に開発者側で割り当てる、ユニーク、変更可) display_name(アカウント作成時に開発者側で割り当てる、Notユニーク、変更可)
DynamoDBのテーブル設計 自分もデータベースはそこまで詳しくないので以下の説明は大きく間違っている可能性があります。 DynamoDBは通常のSQLなどと大きく異なり、パーティションキー、ソートキーに対してしか基本クエ リがかけられない。これらの組み合わせでプライマリキーを構成。 →逆に言うと、これらの組み合わせはユニークであると保証されている scanでAttributesクエリをかけることもできるが、テーブルを総なめすることになるため、ダメ絶対。 Global secondary indexesでインデックスをはり、Attributesに対してもクエリはかけられるが、整合 性が保証されていない。 基本一つのテーブルにするのが推奨されている。
CognitoとDynamoDBの連携 DynamoDBのテーブル設計:
CognitoのLambdaトリガー Cognitoの拡張機能から、Lambdaトリガーを設定することができる。 確認後に設定することで、ユーザーがemail認証をする or Googleアカウントでサイン アップした時にLmabdaを動かすことが出来る。
DynamoDBのトランザクション処理 DynamoDBは楽観的ロックを採用しており、 トランザクション処理時にテーブルロックは行 わない。 transact_write_itemsで USER#{sub}と USERNAME#{username_lower} のアイテム両方の作成が成功しないと、全て がキャンセルされる。 attribute_not_exists(SK)で無いことを確認 した上で、書き込みを実行。
REST API 設計 API Gatewayを用いて RESTAPIを作成した。
user_name変更処理 まずクライアントからJWTを受け取り、整合性を確認 した後、サニタイズを行う。 成功したら次は同じuser_nameが居ないか確認し、 成功したらトランザクション処理を開始する。 既存のレコードをコピーし、新しい名前に変えた後、 古いレコードを削除し、その後新しいレコードを挿入 する。どれかが失敗した時点で全ての操作が無かっ たことになる。
user_nameトラバーサル @mizuame のアイコン 画像をください @mizuame のUUID 教えてください UUIDは~です UUID~の画像 をください
動画アップロード ゲームのクリップをアップ ロード出来るわけだが、その まま配信するととんでもない 脆弱性になる可能性がある ので、一回変換をかける必 要がある。
S3、elemental mediaconvert、R2による感動の変換
DynamoDBへの一時記録 まず、S3への署名付きアップロードを作成す る際、DynamoDBに一時的にIDとsubのペ アを記録する。 変換後に動画のアップロードユーザーを識別 するために使用する。 又TTLが設定できる為、1時間後に自動削除 される。
S3の制限付きアップロードURLの生成 制限付きURLの生成の際に、Key、有効期 限、最大容量を制限したものを発行する。 Keyは upload_abcdef123456.mp4 のようになる。 https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html
elemental mediaconvertに入れる S3にアップロードされ次第、自動でLambda が発火し、設定通りにelemental mediaconvertに突っ込まれ、変換される。 ドキュメント見ながらやったが設定がこけたの で、lemental mediaconvertのUIから設定を 生成した。
workersにスワップさせる AWS Lambdaは実行時間で課金されるのに加え、 実行数に制限がある為、実際の cloudflare R2への スワップはcloudflare workersが行う。 Lambdaはworkersのエンドポイントに対し、スワップ リクエストを投げた後、 DyamoDBから一時記憶を消 すだけ。 UUID~の~の動画をスワッ プして下さい UUID~の~の動画を下さい workersはスワップが完了したら S3のオブジェクトを 消す。 R2にスワップ後、S3を削除
ご清聴ありがとうございました。 Cloudflareとの感動のマルチベンダーバックエンドについては こちらをご覧ください。 https://www.docswell.com/s/mizuame/ZXEGY3-2025-02-0 1-UNTIL