Siaのブログ

独身のうちにやっておきたいことを真面目に考えるブログ

Node.jsを利用したDynamoDBの操作を試してみた

Node.jsを利用してAWSのDynamoDBを操作してみたのでそのメモ書きです。

操作としては、Node.jsを使ってDynamoDBからアイテムを1件取得する、というかんたんな内容です。

そのほかの操作については、参考情報としてまとめます。

 

 

f:id:siaris:20200404212505p:plain

事前準備

DynamoDBにサンプルデータの登録

DynamoDBはAWSのマネージド型NoSQLサービスです(AWSの基本操作やDynamoDBの概要は、別途記事にまとめられたらよいなーと思っているため、今回は割愛)。

 

今回は、DynamoDBからデータを一件取得する、という操作をするため、あらかじめサンプルデータをDynamoDBに登録しておきます。

サンプルは以下です。

 f:id:siaris:20200404201524p:plain 
項目名は、チャットアプリ(そのうちつくりたい)を想定して名前をつけています。
 
Node.jsのインストール

Windows10を利用している場合ですが、以下記事が参考になると思います。

aws-sdkのインストール

aws-sdkAWSサービスをプログラムから操作するためのSDKです。

Java、Node.js、Pythonなど様々な言語に対応したものがあります。なお、Pythonのものはboto3と呼ばれており、由来としてはアマゾンカワイルカらしいです(https://reboooot.net/post/why-boto/)。

 

Node.jsでは、以下コマンドでSDKをインストールします。

npm install aws-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ユーザーの設定から取得できます。

f:id:siaris:20200404205651p:plain

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公式ガイドのほかに、以下が参考になると思います(というか全体的にこのブログよりも参考になります笑)。

tech.sanwasystem.com

takamints.hatenablog.jp

 

おわりに

以上、今回はNode.jsを利用したDynamoDBの操作を試してみた、でした。

ではでは。