見出し画像

【 Y・S】AWS SDKを使ってDynamoDBのデータを取得してみる

こんにちは、ITソリューション部の Y・Sです。
今回は、AWD SDKを使用し、Lambda関数内でDynamoDBのデータを取得する方法をご紹介しようと思います。
よろしくお願います!

AWS SDKとは?

簡単に言うと、AWSサービスへの接続をサポートする仕組みのことです。
これによって、アプリケーション内でAWSのサービスを利用しやすくなります。
認証情報なども扱うので、取り扱いには注意しましょう!
ただ今回の記事では、同じアカウント内のLambdaとDynamoDBとのやり取りなので、認証情報云々は出てきません。

では、早速準備からやっていきましょう!

準備

テーブル

  • テーブル名:Weather

  • PK:area

  • SK::date

簡単な天気のデータが入っているテーブルを作りました。
場所を表すareaがPK、日付を表すdateがSKになっております。
三つのデータを入れておきました。

Lambda

  • 一から作成

  • 関数名:weatherFunction

  • ランタイム:Node.js 18.x

  • アーキテクチャ:x86_64

  • アクセス権限:基本的な Lambda アクセス権限で新しいロールを作成

次は、Lambdaを作りました。
関数名は適当です。ランタイムは、業務で扱っているNode.jsにしました。
アクセス権限は、自動生成されたロールに、その都度欲しい権限を追加していこうと思います。
※ 自動生成のロール名は、関数名+ランダムな文字になるので、それが嫌であれば、先に作っておきましょう。
その他詳細設定は、特にチェックしません。

以下のようにできました!

初期のコードは、statusCodeと、bodyを返すだけですね!
これから色々と遊べるようにしていきましょう!

export const handler = async (event) => {
  // TODO implement
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  };
  return response;
};

ロール

今回ロールは手抜きさせてください(メインはSDKの話ですので)
本来は、テーブル名や読み込み、書き込み権限を細かく設定するのですが、今回は AmazonDynamoDBFullAccessを設定いたします。こちらは名前の通り、DynamoDBへのアクセス権がフルについています。

さて、準備がやっと終わったので、SDKを使っていきます。

SDKを使う

では、いよいよ本題です。
今回使うのは、Node.js AWS SDK v3 です。
ランタイムが、Node.js 18.xということでv2は使えずv3を使います。

使い方は、簡単です。

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient({ region: "ap-northeast-1" });

一行目では、SDKの中のDynamoDBを使うためのDynamoDBクライアントのクラスをimportしております。
そして二行目で、importしたクラスにregionを渡して、インスタンスを作っています。
SDKでDynamoDBを扱う際の準備はこれだけ!
同じアカウントのLambdaとDynamoとのやり取りだからであって、外部アプリとDynamoDBだと話は違うでしょう。

Scanを使ってデータ全取得

では、テーブル内のデータをすべて取得するscanを使っていきます。以下が今回の全コードになります。

import { DynamoDBClient, ScanCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient({ region: "ap-northeast-1" });

export const handler = async (event) => {
  const scanCommand = new ScanCommand({
    TableName: "Weather",
  });
  const result = await client.send(scanCommand);
  return result.Items;
};

かなりシンプルですね。
注目すべきは、先ほど定義したclient(DynamoDBクライアントインスタンス)のsendメソッドです。
こちらに適切なパラメータを渡してあげることで、DynamoDBにリクエストを投げてくれます。今回はscanなので、テーブル名だけ渡せばいいです。
※ 今回はデータの量が少ないですが、大量のデータをscanする際には、一度に1MBという制限にも気を付けましょう(参考

結果は。。。

[
  {
    "date": {
      "S": "2023-10-01"
    },
    "area": {
      "S": "名古屋市"
    },
    "temperature": {
      "N": "28"
    }
  },
  {
    "date": {
      "S": "2023-10-01"
    },
    "area": {
      "S": "那覇市"
    },
    "temperature": {
      "N": "30"
    }
  },
  {
    "date": {
      "S": "2023-10-01"
    },
    "area": {
      "S": "札幌市"
    },
    "temperature": {
      "N": "15"
    }
  }
]

やりました~。成功です!
先ほど作った三つのデータがすべて取得できております!

ほかにも色々ありますよ

sendメソッドに、以下のようなパラメータを渡すと、updateやdeleteもできますので、かなり便利です。

まとめ

こちらの記事はいかがだったでしょうか?
SDKはとても便利なものでしたね!
ちょっと内容薄めではありますが、掘り出すときりがないので、適度に端折ってまとめてみました。
最後までご覧いただきありがとうございました。


この記事が気に入ったらサポートをしてみませんか?