他カテゴリ

データをDynamoDBに保存した

やよい🌜UGOK's icon'
  • やよい🌜UGOK
  • 2020/06/10 14:33
Content image

こんにちは。梅雨入りしてじめじめと暑い日がやってきましたね。憂鬱ですね。

今回はDynamoDBを使って、その2で取得してきたデータを保存したことについて書いていきたいと思います。
 

 

目的

ローカルでDynamoDBを動かす。
データを保存する。

 

本題

DynamoDBって利用枠超えたらお金かかるし…
でも触ったことないから色々試しながら進めたい…
ということで、まずはローカルでDynamoDBを触れる環境にしようと思ったので環境構築をしていきたいと思います。

最初はAWSの公式のところに載っていたPDFを参考にしながらやっていたのですが、ちょっと難しかったので他の記事を探しました。

 

上記の記事を参考にしながらやっていきました。GUIも使いたかったので、記事からgithubに飛んで、READMEを参考にそれっぽく書いていたのですが、動かない・・となっていました。

const { DynamoDB } = require("aws-sdk");
const { createServer } = require("dynamodb-admin");
const dynamodb = new DynamoDB({ region: "ap-northeast-1" });
const dynClient = new DynamoDB.DocumentClient({
endpoint: "http://localhost:8000",
service: dynamodb,
});
const app = createServer(dynamodb, dynClient);
const port = 8001;
const server = app.listen(port);
server.on("listening", () => {
const address = server.address();
console.log(` listening on http://0.0.0.0:${address.port}`);
});

どうやらregionを設定していなかったのがよくなかったみたいです。
DynamoDBには、DynamoDBとDynamoDB.DocumentClientという2種類の書き方があるみたいです。上で言うところのdunamodb, dynClient。
二つの違いや、メリットデメリットをまだ調べることができていないのですが、公式ドキュメントとかをみていた感じ、DocumentClientのほうがわかりやすかったのでそっちを使っています。

これで実行すると…

Content image

無事それっぽいのが立ち上がりました。👏

では次にテーブルを作ってデータを入れていきたいと思います!

"use strict";
const twitter = require("twitter");
const { readFileSync } = require("fs");
const { DynamoDB } = require("aws-sdk");
const dynamodb = new DynamoDB({ region: "ap-northeast-1" });
const dynClient = new DynamoDB.DocumentClient({
endpoint: "http://localhost:8000",
service: dynamodb,
});
const twiClient = new twitter(
JSON.parse(readFileSync("config/secret.json", "utf-8"))
);


twiClient.get("lists/list", (error, lists) => {
	if (error) console.error(error);
	else {
		const params = {
			TableName: "UGOKList",
			Item: {
				id: 1,
				name: lists[0].name,
				twitterId: lists[0].id_str,
			},
		};
		dynClient.put(params, (error) => {
			if (error) console.error(error);
		});
	}
});

Twitterのリストを取得するAPIを呼び出して、DBに保存したいデータだけ抽出しました!
今はUGOKまとめアカウントには1つしかリストがないので、[0]で指定したデータを取ってきています。グループが色々できた時ようにまたこのあたりを改善したいですね。
テーブル(UGOKList)はGUIから事前に作っておきました。dynClient.put(params)で、パラメータのデータを保存してくれます。

Content image

できました👏
こんな感じでメンバーの追加もしていきます。

Content image

いい感じに全員分追加ができました!

とりあえずDynamoDBをローカルで動かすことと、初期データを保存するところはできたとおもいます!

今回は環境構築など、自分の理解が及んでいない部分だったのでこの記事見てできた!という備忘録程度のものになりました。
次回はこの保存した名前を元にALISのユーザーを検索して、idを取得して保存したいと思います!

 

.

.

.

 

ちなみになぜDynamoDBなのかというと、私がAWSを使ってみたかったからというだけです。
今は無料枠だからいいけど、一回計算してみて、無料枠内でできないと気がついたらほかのを使おうかなと思っています…
DBソフトは色々ありますが、比較した上での検討もまたしたいと思っています。本当は最初にやるべきだろうけど、AWS使ってみたかったので・・・。😥

あと、今はメンバーテーブルに全部情報入れているけど、twitterとalisはIDだけを保存して、別のテーブル分けた方がいいのかな・・と今見返してて思った。
データベース設計もちゃんと勉強しなければなあ・・。

 

 

参考資料(記事)

 

Supporter profile icon
Article tip 1人がサポートしています
獲得ALIS: Article like 118.38 ALIS Article tip 1.00 ALIS
やよい🌜UGOK's icon'
  • やよい🌜UGOK
  • @ugok841
UGOKのやよいです。Djangoをやっていました。最近Javascriptを勉強し始めました。Twitter-> @ugok841

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
159.32 ALIS
Eye catch
トラベル

梅雨の京都八瀬・瑠璃光院はしっとり濃い新緑の世界

Like token Tip token
216.64 ALIS
Eye catch
他カテゴリ

オランダ人が語る大麻大国のオランダ

Like token Tip token
46.20 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
121.79 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの遊び方【BCG】

Like token Tip token
6.32 ALIS
Eye catch
トラベル

無料案内所という職業

Like token Tip token
84.20 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
他カテゴリ

京都のきーひん、神戸のこーへん

Like token Tip token
12.10 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
グルメ

バターをつくってみた

Like token Tip token
127.90 ALIS