pub(crate) async fn function_handler(
db: &DatabaseConnection,
event: LambdaEvent<Request>,
) -> Result<Response, Error>Expand description
メインのLambda関数ハンドラー
API Gatewayからの受信HTTPリクエストを処理し、JWTで認証してから HTTPメソッドに基づいて適切なハンドラーにルーティングします。
§処理フロー
- リクエストコンテキストからJWTクレームを抽出する
emailクレームとsubクレームの存在・妥当性を検証するDSQL_ENDPOINT/DSQL_REGION環境変数からデータベース接続を確立する- HTTPメソッドに応じて
handle_get_messagesまたはhandle_post_message_newにディスパッチする - 処理完了後、データベース接続を閉じる
- ハンドラーでエラーが発生した場合は HTTP 500 を返す
§Arguments
event- API Gatewayリクエストを含むLambdaイベント。Request構造体にデシリアライズされ、リクエストコンテキスト(JWTクレームを含む)と オプションのリクエストボディを持ちます。
§Returns
Ok(Response)- API Gatewayに返すHTTPレスポンス。 正常時はハンドラーが返すレスポンスをそのまま返します。 内部エラー時は HTTP 500 レスポンスを返します。Err(Error)- Lambda ランタイムレベルの致命的なエラー(通常は発生しない)
§エラーレスポンス
| ステータスコード | エラー | 発生条件 |
|---|---|---|
| 401 | Unauthorized | JWTクレームに email または sub が存在しない、もしくは sub がUUID形式でない |
| 405 | Method Not Allowed | GET/POST以外のHTTPメソッドが使用された |
| 500 | INTERNAL_SERVER_ERROR | データベース接続エラー、クエリエラーなどの内部エラー |
§Authentication
すべてのリクエストには、Amazon CognitoからのJWT IDトークンが必要です。
トークンにはユーザーを識別するために使用されるemailクレームとsubクレームが含まれている必要があります。
sub クレームはCognito ユーザーの一意識別子(UUID v4形式)です。