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-dsql、lambda_runtime、sea-orm を利用 |
構成
| 要素 |
内容 |
| API Gateway |
AWS::Serverless::HttpApi を使用 |
| 認証 |
デフォルト Authorizer は Cognito JWT |
| Lambda |
provided.al2023 / arm64 / rust-cargolambda ビルド |
| DB 接続 |
Aurora DSQL に IAM 認証トークンで接続 |
| 出力値 |
HttpApiUrl と HttpApiId をエクスポートし、フロントエンド が参照 |
リクエスト処理の流れ
- API Gateway が
Authorization ヘッダーを Cognito Authorizer で検証します。
- Lambda は
requestContext.authorizer.jwt.claims.email から利用者メールアドレスを取り出します。
DSQL_ENDPOINT と DSQL_REGION を環境変数から読み取り、Aurora DSQL 用の一時認証トークンを生成します。
- SeaORM 接続を生成し、HTTP メソッドごとの処理を実行します。
- JSON レスポンスに
Access-Control-Allow-Origin を付与して返却します。
エンドポイント
| メソッド |
パス |
説明 |
認証 |
GET |
/inquiries |
ログイン中ユーザーの問い合わせ一覧を created_at 降順で返す |
必須 |
POST |
/inquiries |
ログイン中ユーザーの問い合わせを新規登録する |
必須 |
OPTIONS |
/inquiries |
CORS プリフライトへ応答する |
不要 |
主なデータ
| 名称 |
役割 |
Inquiry |
API が返す問い合わせ 1 件分のモデル |
InquiryListResponse |
GET /inquiries のレスポンス。email、count、inquiries を含む |
CreateInquiryRequest |
POST /inquiries の入力。subject と body を受け取る |
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 側のテストは
Response、handle_options、シリアライズまわりの単体テストが中心です。
api/template.yaml では AllowedCorsOrigins をパラメータ化し、CI/CD でフロントエンドの CloudFront ドメインを注入します。
関連ページ