0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.jsでDynamoDBを操作する(CRUD処理編)

Posted at

#概要
表題通り、Node.jsでDynamoDBを操作する記事です。

##基本情報
操作TBL
スクリーンショット 2021-07-29 19.07.51.png

ディレクトリ構成
~/develop/study/aws/node/dynamo $ tree
.
├── crud
│   ├── OlympicCreateItem.js
│   ├── OlympicDeleteItem.js
│   ├── OlympicGetItem.js
│   └── OlympicUpdateItem.js
├── data
│   └── olympicData.json
└── migration
    ├── OlympicCreateTable.js
    └── OlympicLoadData.js

3 directories, 7 files

##事前準備

TBL作成(OlympicCreateTable.js)
var AWS = require("aws-sdk");

AWS.config.update({
  region: "ap-northeast-1"
});

var dynamodb = new AWS.DynamoDB();

var params = {
    TableName : "Olympic",
    KeySchema: [       
        { AttributeName: "Id", KeyType: "HASH"},  //Partition key
        { AttributeName: "Country", KeyType: "RANGE" }  //Sort key
    ],
    AttributeDefinitions: [       
        { AttributeName: "Id", AttributeType: "N" },
        { AttributeName: "Country", AttributeType: "S" }
    ],
    ProvisionedThroughput: {       
        ReadCapacityUnits: 10, 
        WriteCapacityUnits: 10
    }
};

dynamodb.createTable(params, function(err, data) {
    if (err) {
        console.error("TBL作成失敗:", JSON.stringify(err, null, 2));
    } else {
        console.log("TBL作成成功:", JSON.stringify(data, null, 2));
    }
});
olympicData.json
[
    {
        "Id": 1,
        "Country": "日本",
        "Medal": {
            "GoldMedal": 11,
            "SilverMedal": 11,
            "BronzeMedal": 11
        }
    },
    {
        "Id": 2,
        "Country": "アメリカ",
        "Medal": {
            "GoldMedal": 10,
            "SilverMedal": 8,
            "BronzeMedal": 7
        }
    },    
    {
        "Id": 3,
        "Country": "中国",
        "Medal": {
            "GoldMedal": 5,
            "SilverMedal": 5,
            "BronzeMedal": 5
        }
    }
]
TBL作成の実行結果
~/develop/study/aws/node/dynamo/migration $ node OlympicCreateTable.js 
TBL作成成功: {
  "TableDescription": {
    "AttributeDefinitions": [
      {
        "AttributeName": "Country",
        "AttributeType": "S"
      },
      {
        "AttributeName": "Id",
        "AttributeType": "N"
      }
    ],
    "TableName": "Olympic",
    "KeySchema": [
      {
        "AttributeName": "Id",
        "KeyType": "HASH"
      },
      {
        "AttributeName": "Country",
        "KeyType": "RANGE"
      }
    ],
    "TableStatus": "CREATING",
    "CreationDateTime": "2021-07-29T10:20:05.059Z",
    "ProvisionedThroughput": {
      "NumberOfDecreasesToday": 0,
      "ReadCapacityUnits": 10,
      "WriteCapacityUnits": 10
    },
    "TableSizeBytes": 0,
    "ItemCount": 0,
    "TableArn": "arn:aws:dynamodb:ap-northeast-1:696770525325:table/Olympic",
    "TableId": "5e5fb4bf-a314-496e-ad61-40387663f17f"
  }
}
データのロード(OlympicLoadData.js)
var AWS = require("aws-sdk");
var fs = require('fs');

AWS.config.update({
    region: "ap-northeast-1",
});

var docClient = new AWS.DynamoDB.DocumentClient();

console.log("データのロード開始");

var Countries = JSON.parse(fs.readFileSync('../data/olympicData.json', 'utf8'));

Countries.forEach(function(country) {
    console.log(country)
    var params = {
        TableName: "Olympic",
        Item: {
            "Id":  country.Id,
            "Country": country.Country,
            "Medal":  country.Medal
        }
    };
    docClient.put(params, function(err, data) {
       if (err) {
           console.error("ロード失敗", country.Id, ". Error JSON:", JSON.stringify(err, null, 2));
       } else {
           console.log("ロード成功:", country.Id + country.Country);
       }
    });
});
データのロード
~/develop/study/aws/node/dynamo/migration $ node OlympicLoadData.js
データのロード開始
{
  Id: 1,
  Country: '日本',
  Medal: { GoldMedal: 11, SilverMedal: 11, BronzeMedal: 11 }
}
{
  Id: 2,
  Country: 'アメリカ',
  Medal: { GoldMedal: 10, SilverMedal: 8, BronzeMedal: 7 }
}
{
  Id: 3,
  Country: '中国',
  Medal: { GoldMedal: 5, SilverMedal: 5, BronzeMedal: 5 }
}
ロード成功: 3中国
ロード成功: 1日本
ロード成功: 2アメリカ

#CREATE文

OlympicCreateItem.js
var AWS = require("aws-sdk");

AWS.config.update({
    region: "ap-northeast-1",
});

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "Olympic";

var params = {
    TableName:table,
    Item:{
            "Id": 4,
            "Country": "ドイツ",
            "Medal": {
                "GoldMedal": 7,
                "SilverMedal": 7,
                "BronzeMedal": 7
            }
        }
};

docClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item");
    }
});

#READ文

OlympicGetItem.js
var AWS = require("aws-sdk");

AWS.config.update({
    region: "ap-northeast-1",
});

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "Olympic";

var params = {
    TableName: table,
    Key:{
        "Id": 1,
        "Country": '日本'
    }
};

docClient.get(params, function(err, data) {
    console.log(params)
    console.log(data)
    if (err) {
        console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
    }
});

#UPDATE文

OlympicUpdateItem.js
var AWS = require("aws-sdk");

AWS.config.update({
    region: "ap-northeast-1",
});

var docClient = new AWS.DynamoDB.DocumentClient()

var table = "Olympic";

var params = {
    TableName:table,
    Key:{
        "Id": 1,
        "Country": '日本'
    },
    UpdateExpression: "set Medal.GoldMedal = :g",
    ExpressionAttributeValues:{
        ":g":17,
    },
    ReturnValues:"UPDATED_NEW"
};

console.log("Updating the item...");
docClient.update(params, function(err, data) {
    if (err) {
        console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
    }
});

#DELETE文

OlympicDeleteItem.js
var AWS = require("aws-sdk");

AWS.config.update({
    region: "ap-northeast-1"
});

var docClient = new AWS.DynamoDB.DocumentClient();

var table = "Olympic";

var params = {
    TableName:table,
    Key:{
        "Id": 4,
        "Country": 'ドイツ'
    },
};

console.log("Attempting a conditional delete...");
docClient.delete(params, function(err, data) {
    if (err) {
        console.error("Unable to delete item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("DeleteItem succeeded:", JSON.stringify(data, null, 2));
    }
});
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?