API

自動生成ドキュメントは Rustdoc(API) を参照してください。

概要

API レイヤーは api/template.yaml で定義された API Gateway HTTP API と、api/lambda/src/main.rs の Rust Lambda で構成されています。
API は Amazon Cognito の JWT Authorizer を前段に持ち、認証済みユーザーごとのお問い合わせデータを Aurora DSQL から取得・登録します。

参照ソース

パス 内容
api/template.yaml HTTP API、Cognito Authorizer、Lambda、出力値の定義
api/lambda/src/main.rs ルーティング、認証クレーム解釈、DB アクセス、レスポンス生成
api/lambda/Cargo.toml Rust 依存関係。aws-sdk-dsqllambda_runtimesea-orm を利用

構成

要素 内容
API Gateway AWS::Serverless::HttpApi を使用
認証 デフォルト Authorizer は Cognito JWT
Lambda provided.al2023 / arm64 / rust-cargolambda ビルド
DB 接続 Aurora DSQL に IAM 認証トークンで接続
出力値 HttpApiUrlHttpApiId をエクスポートし、フロントエンド が参照

リクエスト処理の流れ

  1. API Gateway が Authorization ヘッダーを Cognito Authorizer で検証します。
  2. Lambda は requestContext.authorizer.jwt.claims.email から利用者メールアドレスを取り出します。
  3. DSQL_ENDPOINTDSQL_REGION を環境変数から読み取り、Aurora DSQL 用の一時認証トークンを生成します。
  4. SeaORM 接続を生成し、HTTP メソッドごとの処理を実行します。
  5. JSON レスポンスに Access-Control-Allow-Origin を付与して返却します。

エンドポイント

メソッド パス 説明 認証
GET /inquiries ログイン中ユーザーの問い合わせ一覧を created_at 降順で返す 必須
POST /inquiries ログイン中ユーザーの問い合わせを新規登録する 必須
OPTIONS /inquiries CORS プリフライトへ応答する 不要

主なデータ

名称 役割
Inquiry API が返す問い合わせ 1 件分のモデル
InquiryListResponse GET /inquiries のレスポンス。emailcountinquiries を含む
CreateInquiryRequest POST /inquiries の入力。subjectbody を受け取る
CreateInquiryResponse POST /inquiries のレスポンス。作成済み inquiry を返す

問い合わせテーブルの定義と ORM 生成物の対応は DB スキーマと ORM を参照してください。

環境変数

変数名 用途 備考
CORS_ORIGIN Access-Control-Allow-Origin に設定するオリジン 未設定時は http://localhost:11029
DSQL_ENDPOINT Aurora DSQL エンドポイント DB のスタック出力を利用
DSQL_REGION Aurora DSQL のリージョン テンプレートでは ap-northeast-3

エラー応答

ステータス 条件
401 JWT が無効、または email クレームが欠落
405 未対応メソッド
500 DB 接続やクエリ、JSON 解析などの内部エラー

実装上のポイント

  • OPTIONS は Lambda 内で明示的に処理し、GET,POST,OPTIONS を許可します。
  • POST /inquiries は UUIDv7 を採番し、そのまま inquiries テーブルへ挿入します。
  • API 側のテストは Responsehandle_options、シリアライズまわりの単体テストが中心です。
  • api/template.yaml では AllowedCorsOrigins をパラメータ化し、CI/CD でフロントエンドの CloudFront ドメインを注入します。

関連ページ

results matching ""

    No results matching ""