【 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はとても便利なものでしたね!
ちょっと内容薄めではありますが、掘り出すときりがないので、適度に端折ってまとめてみました。
最後までご覧いただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?