【備忘録】dynamoDBをいじる　Node.js

DynamoDBのデータを書き込んだり読み込んだりするときにみるqiita

dynamoDBをlambdaからじゃなくて外部から読み込みたい時もありますよね。
そんな時に使えるやつです


記事を探したけどれが動くかわからなかったので現時点で動くやつを書いておこう
特に詳しくないので動く重視のコードです。
###よく使いそうなやつだけサンプルコード載せておきます
- getItem 一個だけ取得 
- batchGetItem　複数取得
- putItem 一個だけ追加
- batchWriteItem 複数追加
- listTable AWSアカウントに紐づいているテーブル一覧





#ドキュメント
###ドキュメント見ればだいたいなんでもできる
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property

##getItem 一個だけ取得 

```index.js
const AWS = require("aws-sdk");
//インスタンス生成
const dynamodb = new AWS.DynamoDB({
  region: "ap-northeast-1",
  apiVersion: "2012-08-10",
  accessKeyId: "xxxxxxxxxxxxxxxx",
  secretAccessKey: "xxxxxxxxx",
});

async function test() {
  var params = {
    Key: {
     "<プライマリパーティションキー>": {
       S: "<キーの値>"
      }
    }, 
    TableName: "<TableName>"
   };
  const Data = await (() =>
    new Promise((resolve) => {
      dynamodb.getItem(params, function (err, data) {
        if (err) {
          console.error("Error occured", err);
        }
        console.log(data);
        resolve(data);
      });
    }))();

  if (Data !== undefined) {
   console.log(Data)
  }
}

test();

```

##batchGetItem　複数取得
取得するキーの値が同じだとエラーを吐いた。

```index.js
const AWS = require("aws-sdk");
//インスタンス生成
const dynamodb = new AWS.DynamoDB({
  region: "ap-northeast-1",
  apiVersion: "2012-08-10",
  accessKeyId: "xxxxxxx",
  secretAccessKey: "xxxxxxxx",
});

async function test() {
 
  var params = {
    RequestItems: {
      "<TableName>": {
        Keys: [
          {"<プライマリパーティションキー>": { S: "<値>" } },
          {id: { S: "<値>" }}
        ],
      },
    },
  };

  const Data = await (() =>
    new Promise((resolve) => {
      dynamodb.batchGetItem(params, function (err, data) {
        if (err) {
          console.error("Error occured", err);
        }
        console.log(data);
        resolve(data);
      });
    }))();

  if (Data !== undefined) {
    console.log(Data)
  }
}

test();
```

##putItem 一個だけ追加

```iindex.js
const AWS = require("aws-sdk");
//インスタンス生成
const dynamodb = new AWS.DynamoDB({
  region: "ap-northeast-1",
  apiVersion: "2012-08-10",
  accessKeyId: "xxxxxxxxxxxxxxxxx",
  secretAccessKey: "xxxxxx",
});

async function test() {
 
  var params = {
    Item: {
     "<項目>": {
       S: "値"
      }, 
     "<項目>": {
       S: "値"
      }, 
     "<項目>": {
       S: "値"
      }
    }, 
    TableName: "<TableName>"
   };
   
  const Data = await (() =>
    new Promise((resolve) => {
      dynamodb.putItem(params, function (err, data) {
        if (err) {
          console.error("Error occured", err);
        }
        console.log(data);
        resolve(data);
      });
    }))();

  if (Data !== undefined) {
    console.log(Data)
  }
}

test();
```

##batchWriteItem 複数追加

```index.js

const AWS = require("aws-sdk");
//インスタンス生成
const dynamodb = new AWS.DynamoDB({
  region: "ap-northeast-1",
  apiVersion: "2012-08-10",
  accessKeyId: "xxxxxxxK",
  secretAccessKey: "xxx",
});

async function test() {
 
  var params = {
    RequestItems: {
     "<TableName>": [
         {
        PutRequest: {
         Item: {
          "<キー>": {
            S: "<値>"
           }, 
          "<項目>": {
            S: "<値>"
           }, 
          "<項目>": {
            S: "<値>"
           }
         }
        }
       }, 
         {
        PutRequest: {
          Item: {
            "<キー>": {
              S: "<値>"
             }, 
            "<項目>": {
              S: "<値>"
             }, 
            "<項目>": {
              S: "<値>"
             }
           }
        }
       }, 
         {
        PutRequest: {
          Item: {
            "<キー>": {
              S: "<値>"
             }, 
            "<項目>": {
              S: "<値>"
             }, 
            "<項目>": {
              S: "<値>"
             }
           }
        }
       }
      ]
    }
   };

  const Data = await (() =>
    new Promise((resolve) => {
      dynamodb.batchWriteItem(params, function (err, data) {
        if (err) {
          console.error("Error occured", err);
        }
        console.log(data);
        resolve(data);
      });
    }))();

  if (Data !== undefined) {
    console.log(Data)
  }
}

test();


```

##listTable AWSアカウントに紐づいているテーブル一覧
```index.js

const AWS = require("aws-sdk");
//インスタンス生成
const dynamodb = new AWS.DynamoDB({
  region: "ap-northeast-1",
  apiVersion: "2012-08-10",
  accessKeyId: "xxxxxxxx",
  secretAccessKey: "xxx",
});

async function test() {
 
  var params = {};

  const Data = await (() =>
    new Promise((resolve) => {
      dynamodb.listTables(params, function (err, data) {
        if (err) {
          console.error("Error occured", err);
        }
        console.log(data);
        resolve(data);
      });
    }))();

  if (Data !== undefined) {
    console.log(Data)
  }
}

test();
```



#参考にした記事
http://kakts-tec.hatenablog.com/?page=1499360527