AWSで問い合わせフォーマットを作成(SAAハンズオントレーニング)
AWS SAAを受講予定なので、ハンズオントレーニングを兼ねてブログサイトの問い合わせフォームを作成してみました。
↓実際の問い合わせフォーム
備忘録も兼ねて詰まったポイントのみ記載しておきます。
全体構成
API Gateway、Lambda、DynamoDBを使ったサーバレスアーキテクチャとなります。

コストについても、個人利用の範囲ではほぼ無料で維持できそうです。
目次
- DynamoDBの設定
- Lambda関数の作成
- API Gatewayのセットアップ
- 問い合わせフォームの作成
1. DynamoDBの設定
ここでは新規テーブルの作成を行うぐらいですが、下記に少し手間どりました。
(詰まったポイント)
- パーティションキーの文字列はLamda関数のコードに合わせます。
// DynamoDBに保存するアイテムを作成
const item = {
id: uuidv4(), // ユニークIDを生成
name: body.name,
email: body.email,
message: body.message,
subject: body.subject || '',
submittedAt: new Date().toISOString(),
};
ここの「id」の部分ですね。

例えばkeyという名前にするなら、パーティションキーにも「key」という名前を設定します。
あと作成されたテーブルデータは「項目を探索」の方から参照できます。

ダッシュボードとかテーブルの方ばかり見て、送信したデータが登録されず、悩んでいる時間がありました。。。
2. Lambda関数の作成
(詰まったポイント)
コードに関してはcommonJS形式で書くのが推奨されるようです。(Claudeの回答)
AWS Lambda環境との親和性:
AWS Lambdaは伝統的にCommonJS形式で設計されており、デフォルトの実装例やドキュメントもすべてCommonJS形式です
Lambda環境は長年CommonJSをサポートしてきたため、安定性と互換性が高いです
AWS SDKとの互換性:
AWS SDKは主にCommonJS形式を想定して開発されています
特に古いバージョンのAWS SDKでは、ES Modulesでの使用時に予期しない問題が発生することがあります
依存ライブラリとの互換性:
LambdaでよくCDKを使った場合に含まれる多くの依存ライブラリ(例:uuid)はCommonJS形式を前提としていることが多いです
ES Modulesで使う場合、インポート方法を調整する必要がある場合があります
シンプルさと保守性:
Node.jsの世界ではまだCommonJSが広く使われており、多くの開発者にとって馴染みがあります
実装方法がシンプルで、トラブルシューティングも容易です
下手にmjs(ESmodules)形式に直したりしていたので、再修正が必要となりました。
3. API Gatewayのセットアップ
'25/8/25追記
各設定項目について調べ直したので追記しておきます。
最初に表示した図の紫線での囲み部分ですね。

-
メソッドリクエスト
役割:クライアントからのHTTPリクエストを受け取る最初のゲート -
統合リクエスト
役割:メソッドリクエストからのデータを変換して、バックエンド(Lambda)に送信 -
統合レスポンス
役割:バックエンド(Lambda)からのレスポンスを受け取り、メソッドレスポンスに向けて変換 -
メソッドレスポンス
役割:クライアントに返すHTTPレスポンスの形式を定義 -
Lambdaプロキシ統合
役割:プロキシ統合を使うことで、API Gateway の設定画面で行っていた複雑な設定作業(※1)を、全てプログラムコード(Lambda関数)内で制御できる。
上記の統合リクエスト/レスポンスの設定は基本的に不要(無効)となる
※1「HTTPリクエスト解析・バリデーション」「動的ルーティング・パス制御」「データ変換・マッピング」「レスポンス変換」「エラーハンドリング」「ログ制御」など
(詰まったポイント)
ここではフロントエンド(Next.js)側のリソースパスの設定が抜けており、時間を要しました。
<.env.local>
NEXT_PUBLIC_CONTACT_API_URL="https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/prod/contact"
最後に「/contact」が必要となります。
AWSのAPI Gateway→「ステージ」の画面でURLをコピーすると、「/contact」がついてきません。。。
4. 問い合わせフォームの作成
完成画面はこんな感じです。

今回はどちらかというと1~3の設定の方がより重要だったので、
Claudeで出力してもらったものをそのまま使用しています。
まとめ
API Gateway、Lambda、DynamoDBはSAA試験にも頻出のサービスと思いますので、今回のハンズオントレーニングで中身の理解がだいぶ進んだと思います。
満足できる内容となりました。
Discussion