概要
本記事は AWSでWebアプリを構築してみる シリーズの7回目の記事です。
前回の記事は こちら。
本記事で作成する構成
REST APIを作成してみる では Lambda に直接レスポンスするデータ(JSON)を記載していましたが、今回はデータをDynamoDBから取得したものをレスポンスするようにしてみます。
REST APIでDynamoDBからデータを取得してみる
1. DynamoDBにテーブルを作成する
2. テーブルにデータを入れる
-
DynamoDBのサイドメニューのPartiQLエディタから、Queryに以下を1行毎に実行して、テーブルにデータを入れる
INSERT INTO "user" VALUE { 'id' : '1', 'name': '森 聡', 'age': 45 } INSERT INTO "user" VALUE { 'id' : '2', 'name': '井上 祐輔', 'age': 20 } INSERT INTO "user" VALUE { 'id' : '3', 'name': '高橋 智明', 'age': 35 } INSERT INTO "user" VALUE { 'id' : '4', 'name': '村田 正人', 'age': 53 } INSERT INTO "user" VALUE { 'id' : '5', 'name': '石井 俊輔', 'age': 37 }
2. LambdaからDynamoDBのテーブルを読み込む
-
マネジメントコンソールから Lambda を開き、REST APIを作成してみるで作成したLambda関数を開き、設定タブのアクセス権限に設定されているロールに対して、許可ポリシーからDynamoDBに対する読み取り権限のポリシーを追加する
-
REST APIを作成してみるで作成したLambda関数を開き、コードタブで以下のように修正する
import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; import { DynamoDBDocumentClient, ScanCommand } from "@aws-sdk/lib-dynamodb"; const client = new DynamoDBClient({}); const docClient = DynamoDBDocumentClient.from(client); export const handler = async (event) => { const command = new ScanCommand({ TableName: "user", }); const result = await docClient.send(command); const response = { statusCode: 200, body: JSON.stringify(result.Items) }; return response; };
3. CloudFront経由でのAPI呼び出しでテストしてみる
-
マネジメントコンソールから CloudFront を開き、静的ウェブサイトをCloudFront経由のアクセスしか許可しないようにする で作成したディストリビューションを開き、ディストリビューションドメイン名をコピーし、末尾に「/api/」を付加してブラウザで開く
↓以下のようなレスポンスがあればDynamoDBからデータを取得したCloudFront経由でのAPI呼び出しに成功している