LoginSignup
3
1

More than 3 years have passed since last update.

[Node.js]aws-sdkを利用してDynamoDBを操作する

Last updated at Posted at 2019-06-14

Node.js環境下のJavaScriptでDynamoDBと接続する方法について、実装の際に少し詰まったのでまとめます。
※2019年6月時点の内容となります。

環境

Mac、ローカル環境からの接続を想定しています。
プログラムが、AWS上ですでに動いている場合は、IAMロール等での設定が好ましいかと思いますが、今回はその説明は割愛します。
IAMロールを使用した際でも、aws-sdkが優先順位をつけて、良しなに接続を切り替えてくれるのでソースコードの修正は発生しないと思います。

モジュールのインストール

aws-sdkを用いて接続する為、aws-sdkモジュールをインストールします。

npm install --save aws-sdk

DynamoDBへの接続情報を設定

aws-sdkがルート配下の.awsフォルダのcredentialsを参照して、dynamoDBへの接続情報を取得してくれます。
以下の通り、接続情報を設定します。

~$ mkdir .aws
~$ cd .aws
.aws $ vi credentials
credentials
[default]
aws_access_key_id = dynamodbのaccess_key_id
aws_secret_access_key = dynamodbのsecret_access_key

dynamodbのアクセスキーとシークレットアクセスキーの取得方法は割愛します。

実装

実装する際のソースコードサンプルです。

Serviceの実装

まずはaws-sdkのrequireと各種設定部分を記載します。

dynamodb.js
const AWS = require('aws-sdk');
AWS.config.update({region: 'ap-northeast-1'});
const docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

class ServiceDynamoDB {
    ...
}

この辺りの記述方法は複数ありますが、一番推奨されていそうなDocumentClientを利用しています。
apiVersionはDynamoDBのバージョンを固定できます。環境に合わせて修正してください。

DynamoDBの特定のテーブルへのデータの挿入

サービス側の実装ですので、テーブル名やキー項目、データ項目は引数で受け取るようにしています。

dynamodb.js
class ServiceDynamoDb {
    static async put_item (table, items) {
        let params = {
            TableName: table, // 格納したいテーブル名
            Item: {
                'id': items.keys.id,
                'sortKey': items.keys.sort_key,
                'data': items.data
            }
        }

        await docClient.put(params, function(err, data) {
            // エラー処理
            if (err) {
                throw new Error(`Failed to save data to DynamoDB. ${err.message}`);
            }
        });
    }
    ...
}

DynamoDBの特定のテーブルへのデータの更新

更新も同様に実装。削除や他の操作は今回やらなかったので割愛します。

dynamodb.js
class ServiceDynamoDb {
    ...
    static async update_item (table, items) {
        let params = {
            TableName: table,
            Key: {
              'id' : items.keys.id,,
              'sortKey' : items.keys.sort_key
            },
            UpdateExpression: 'set data = :s',
            ExpressionAttributeValues: {
              ':s' : items.data,
            }
          };

          await docClient.update(params, function(err, data) {
            if (err) {
                throw new Error(`Failed to save data to DynamoDB. ${err.message}`);
            }
        });
    }
}

呼び出し元の実装

作ったサービスを呼び出し、使用してみます。

index.js

const DynamoDB = require("ServiceDynamoDb"); // パスはServiceを置いた場所

//データの作成
let items = {
    keys: {
        id: "xxxxxx", 
        sort_key: "xxxxxxx" // id、sort_keyで一意 
    },
    data: "おはようございます"
};
// データの挿入
await DynamoDB.put_item("テーブル名", items);

// データの修正
items.data: "こんにちは"
// データの更新
await DynamoDB.update_item("テーブル名", items);

まとめ

DynamoDBへの接続方法のまとめでした。
色々と接続方法はあると思いますので、接続方法の一例と考えていただければと思います。

3
1
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
3
1