0
0

REST APIでDynamoDBからデータを取得してみる

Last updated at Posted at 2024-09-13

概要

本記事は AWSでWebアプリを構築してみる シリーズの7回目の記事です。
前回の記事は こちら

本記事で作成する構成

REST APIを作成してみる では Lambda に直接レスポンスするデータ(JSON)を記載していましたが、今回はデータをDynamoDBから取得したものをレスポンスするようにしてみます。

image.png

REST APIでDynamoDBからデータを取得してみる

1. DynamoDBにテーブルを作成する

  1. テーブルの作成では、テーブル名を任意の名前をつけ、今回は、パーティションキーに「id:文字列」、ソートキーに「name:文字列」としてみます(それ以外はデフォルト)

    image.png

2. テーブルにデータを入れる

  1. 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 }
    

    image.png

2. LambdaからDynamoDBのテーブルを読み込む

  1. マネジメントコンソールから Lambda を開き、REST APIを作成してみるで作成したLambda関数を開き、設定タブのアクセス権限に設定されているロールに対して、許可ポリシーからDynamoDBに対する読み取り権限のポリシーを追加する

    image.png
    image.png

  2. 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呼び出しでテストしてみる

  1. マネジメントコンソールから CloudFront を開き、静的ウェブサイトをCloudFront経由のアクセスしか許可しないようにする で作成したディストリビューションを開き、ディストリビューションドメイン名をコピーし、末尾に「/api/」を付加してブラウザで開く

    ↓以下のようなレスポンスがあればDynamoDBからデータを取得したCloudFront経由でのAPI呼び出しに成功している
    image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0