Node.jsを利用したDynamoDBの操作を試してみた
Node.jsを利用してAWSのDynamoDBを操作してみたのでそのメモ書きです。
操作としては、Node.jsを使ってDynamoDBからアイテムを1件取得する、というかんたんな内容です。
そのほかの操作については、参考情報としてまとめます。
事前準備
DynamoDBにサンプルデータの登録
DynamoDBはAWSのマネージド型NoSQLサービスです(AWSの基本操作やDynamoDBの概要は、別途記事にまとめられたらよいなーと思っているため、今回は割愛)。
今回は、DynamoDBからデータを一件取得する、という操作をするため、あらかじめサンプルデータをDynamoDBに登録しておきます。
サンプルは以下です。
Node.jsのインストール
Windows10を利用している場合ですが、以下記事が参考になると思います。
aws-sdkのインストール
aws-sdkはAWSサービスをプログラムから操作するためのSDKです。
Java、Node.js、Pythonなど様々な言語に対応したものがあります。なお、Pythonのものはboto3と呼ばれており、由来としてはアマゾンカワイルカらしいです(https://reboooot.net/post/why-boto/)。
Node.jsでは、以下コマンドでSDKをインストールします。
SDKの認証情報の保存
AWS SDKを利用するためには、AWSサービスにアクセスできる認証情報が必要です。
今回は認証情報をjsonファイルで用意し、SDKに読み込ませることで、プログラムからAWSサービスを操作できるようにしています。
認証情報の持たせ方はほかにも方法があります。例えば、AWSサービス(EC2、Lambdaなど)からその他AWSサービスにアクセスする場合は、IAMロールを利用する方法があります。
以下の認証情報を記載したJSONファイルを、任意の場所に用意します。
$ cat ~/.aws/credentials.json
{
"accessKeyId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"secretAccessKey": "yyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
accessKeyIdやsecretAccessKeyは、対象のAWSサービスにアクセスする権限を持ったIAMユーザーの設定から取得できます。
IAMユーザーの設定(上記図)の青枠をクリックすると、ポップアップが表示され、最終的に赤枠が作成されます(認証情報が払い出される)。ポップアップとポップアップから取得できるCSVに認証情報がありますので、そちらの値をコピーし、JSONに記載してください。
サンプルソースの実装
DynamoDBからアイテムを1件取得するためのサンプルは以下です。
// ファイル名:getItem.js
const AWS = require("aws-sdk");
// IDとAccesskeyを読み込み
AWS.config.loadFromPath("./.aws/credentials.json");AWS.config.update({region: "ap-northeast-1"});
var DDB = new AWS.DynamoDB({ apiVersion: "2012-10-08" });
var getParams = {
TableName: "sample-table",
Key: {
connectionId: {S: "test"}
}
};// connectionIdの値が"test"のアイテムを1件取得
DDB.getItem(getParams, function(err, data) {
if (err) {
callback(null, {
statusCode: 500,
body: JSON.stringify(err)
});
} else {// connectionIdの値が"test"のアイテムを表示
console.log(data.Item);
// connectionIdの値が"test"のアイテムのroomIdを表示
console.log(data.Item.roomId);
}
});
操作
以下コマンドでプログラムを実行します。
node getItem.js
コマンドプロンプトで実行した結果は以下です。
C:sample>node getItem.js
{ connectionId: { S: 'test' }, roomId: { S: 'aaa' } }
{ S: 'aaa' }C:sample>
AWS SDKを利用することでわりと簡単にDynamoDBからアイテムを取得することができました。
今回は1件のみ取得でしたが、全件取得(scan)や検索取得(query)などもあり、さらに、アイテムの検索条件(上記サンプルのgetParam部分にあたる)の指定方法もSQLのようにわりと柔軟にできます。
参考
より詳細な情報を知りたい方は、AWS公式ガイドのほかに、以下が参考になると思います(というか全体的にこのブログよりも参考になります笑)。
おわりに
以上、今回はNode.jsを利用したDynamoDBの操作を試してみた、でした。
ではでは。