回答編集履歴

1

質問に沿った内容に改修

2021/12/21 04:43

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -1,16 +1,48 @@
1
- 「何を作りたいのか?」「何の情報を保存するつもりなのか」により
1
+ > AWS Lamda , AWS API Gateway , Node.js
2
-
3
- どんなサービスを利用するべきか?等が決まります。
4
2
 
5
3
 
6
4
 
7
- LINE Botという性質を考えると
5
+ [こういう奴ですよね](https://qiita.com/shinbunbun_/items/ae09364504002d0c25f1)
8
6
 
9
- [非IT系な妻の情報共有、「LINE」を駆使したら超捗ったオススメさせてください | 男子ハック](https://www.danshihack.com/2018/10/21/junp/line-family-support.html)
7
+ AWS Lambdaって「俺やるこやっ落ちるわ」で勝手に死ぬ奴じゃなかったですっけ?
10
8
 
11
- この記事はLINE Botを使わず「IFTTT」「LINE Notify」でやりくりしているようですが、
9
+ Botと相性悪そうですけど。
12
10
 
11
+ なるほど……Webhookで引っ掛けてるだけか。
12
+
13
+
14
+
15
+ これだと確かにStateの保存は出来ませんね。
16
+
17
+ 外部に値を保存する仕組みが必要となります。
18
+
19
+
20
+
21
+ 自分のサービス内で完結するならば一般的に使われるのが永続保存のRDSで、
22
+
23
+ 大企業レベルだと大量のデータを捌く為にDynamoDB等のサービスを比較検討する感じになります。
24
+
13
- LINE Botがあれば今日の天気や注意報を「今の天気は?」Bot聞いたり出来るでう。
25
+ 小規模高速データを取り出したいケースだとRedis等の高速なものを使のが適しています
26
+
27
+
28
+
29
+ - [Amazon MemoryDB for Redis](https://aws.amazon.com/jp/memorydb/)
30
+
31
+ - [Amazon RDS](https://aws.amazon.com/jp/rds/)
32
+
33
+
34
+
35
+ どちらにしてもやってることのショボさの割に
36
+
37
+ 金を取られるのでオススメとは言えません。
38
+
39
+
40
+
41
+ まぁ、その程度ならVPSなんかで安くてしょぼいLinuxマシン立ち上げて
42
+
43
+ そこでちゃんとしたWebサーバとして起動する事を推奨します。
44
+
45
+ [Amazon Lightsail](https://aws.amazon.com/jp/lightsail/pricing/)とか
14
46
 
15
47
 
16
48
 
@@ -26,38 +58,112 @@
26
58
 
27
59
 
28
60
 
29
- このように何でもサービスになっているのがAWSの恐ろしい所、
61
+ ---
30
-
31
- 他にもAWS Batchみたいなサービスも見つけることが出来ました。
32
62
 
33
63
 
34
64
 
35
- > ユーザー状態管理どのよるのでしょうか?
65
+ Webhookで引っ掛けたLambdaで出来る内容から次目標決めるとい選択肢もありま
66
+
67
+ 例えば[非IT系な妻との情報共有、「LINE」を駆使したら超捗ったのでオススメさせてください | 男子ハック](https://www.danshihack.com/2018/10/21/junp/line-family-support.html)
36
68
 
37
69
 
38
70
 
39
- れも何サービス作りたかによりますね。
71
+ ういうは要するに外部のAPIているだけなので、
40
72
 
41
- AIに高度な解析をさせたいとかならDBどころの騒ぎではなく
42
-
43
- イチからシステムを構築する必要あります
73
+ 状態は向こう側保持してくれています
44
-
45
- AWSが持つ様々なサービスと連結させる事になるでしょう。
46
74
 
47
75
 
48
76
 
49
- しかし、TrelloやGoogle ToDo登録しタスクを確認したい程度らば
77
+ これをDB代わり使わせて頂くといっ作戦とります。
50
78
 
51
- ってる人にHTTPリクエストを飛ばして確認すりゃいじゃないですか。
79
+ 私はLambdaを使ってませんが、
52
80
 
53
- [Lambdaら関数登録時に環境変数とかに指定きる](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html)でトクンをそこに保存れば解決でしょ
81
+ 個人的開発はGoogle ToDoやTrelloなんかタスク管理ツルと併用して利用しています。
54
82
 
55
83
 
56
84
 
57
- まぁ、結局必要は発明の母ってわけで、
85
+ ---
58
86
 
59
- 要望を実現する必要最小限のもの以外は不要です。
60
87
 
61
- LINE Botで何をしたいのか?
62
88
 
89
+ これはVPS等のLinuxマシンでサービスを立ち上げた場合のやり方になります。
90
+
91
+
92
+
93
+ > ユーザーが「true」と発言したら、そのユーザーのstatusフラグをtrueにして、
94
+
95
+ statusフラグがtrueの間、30分おきにBOTからメッセージが送られてくる
96
+
97
+ ユーザーが「false」と発言したら、そのユーザーのstatusフラグをfalseにする。
98
+
63
- これ立ち返って色々模索してください。
99
+ といったLINE BOTにしていきたいと考えています
100
+
101
+
102
+
103
+ JavaScript(Node.js)の仕様として
104
+
105
+ 関数で区切られる度に「スコープ」を定義する。
106
+
107
+ スコープは入れ子になっており、現在スコープに該当の変数が無ければ上に取りに行く。
108
+
109
+ こういう仕様になっています。
110
+
111
+
112
+
113
+ [公式チュートリアル](https://developers.line.biz/ja/docs/messaging-api/nodejs-sample/#what-you-will-need)
114
+
115
+ に沿った形でコードを書くならばこんな感じ
116
+
117
+
118
+
119
+ ```js
120
+
121
+ const express = require("express")
122
+
123
+ const app = express()
124
+
125
+
126
+
127
+ // グローバル変数スコープにぶら下げとく
128
+
129
+ const statusById = {};
130
+
131
+
132
+
133
+ app.get("/:id", (req, res) => {
134
+
135
+ const id = req.params.id;
136
+
137
+ res.json(statusById[id]);
138
+
139
+ });
140
+
141
+ app.put("/:id", (req, res) => {
142
+
143
+ const id = req.params.id;
144
+
145
+ // express.jsはデフォルトでbodyを解析する仕様にはなってないからミドルウェアを噛ます必要ある
146
+
147
+ const status = req.body.status;
148
+
149
+
150
+
151
+ statusById[id] = status == "true";
152
+
153
+ res.sendStatus(200);
154
+
155
+ });
156
+
157
+ app.listen(80);
158
+
159
+ ```
160
+
161
+
162
+
163
+ > 時間を指定した関数の実行はcron?cloudfront?
164
+
165
+
166
+
167
+ VPSのルートならば、そこにLinuxのマシンがポンとあるだけなので
168
+
169
+ Cronで自動実行のジョブを登録するだけになります。