Slide 1

Slide 1 text

2020/02/12 関西Node学園 9時限目 Ryosuke Izumi

Slide 2

Slide 2 text

Ryosuke Izumi WebApplication / IoT AWS / Vue / TypeScript / Serverless v-kansai & kansai.ts organizer @is_ryo

Slide 3

Slide 3 text

今日の話題

Slide 4

Slide 4 text

Lambda+Node.js の小話

Slide 5

Slide 5 text

AWS使ってる人

Slide 6

Slide 6 text

AWS使えるって 言える人いますか?

Slide 7

Slide 7 text

Lambda使ってる人

Slide 8

Slide 8 text

Lambda って便利ですよね

Slide 9

Slide 9 text

ほんとユースケースが多い

Slide 10

Slide 10 text

個人的には Python とか Nodejs をLambda上で動かすことが多い

Slide 11

Slide 11 text

https://twitter.com/Keisuke69/status/1224630084465643520

Slide 12

Slide 12 text

ただEOLが近づいてくると AWSからメールが飛んでくる

Slide 13

Slide 13 text

AWS「Nodejs v8 はもうすぐEOL だから10か12にバージョン上げ てね。EOLになったあとも動くけ ど、Lambda自体の更新はできな くなるよ。よろしく。」

Slide 14

Slide 14 text

めっちゃ親切やん…

Slide 15

Slide 15 text

Lambda 上の Nodejs も ちゃんとメンテナンスしないと いけない…

Slide 16

Slide 16 text

やったこと

Slide 17

Slide 17 text

Nodejs8.10 → Nodejs10.x

Slide 18

Slide 18 text

基本的に脳死状態で アップデートしていった (真似しちゃダメ。絶対。)

Slide 19

Slide 19 text

あるLambdaだけアップデート したあとにエラーを吐き出した…

Slide 20

Slide 20 text

何が起きたか

Slide 21

Slide 21 text

module が見つからん! っていうエラーが出た

Slide 22

Slide 22 text

こんな書き方になっていた…

Slide 23

Slide 23 text

おわかりいただけただろうか?

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

原因

Slide 26

Slide 26 text

Nodejs10.x から AmazonLinux2 上に展開されるようになってい て、環境変数$NODE_PATHの内 容が変わっていた。

Slide 27

Slide 27 text

Lambda Workers (EC2 Instances) Host OS Hypervisor MicroVM Lambda Lambda EC2 Bare Metal Instance Host OS Host Kernel KVM Firecraker MicroVM Lambda Firecraker MicroVM Lambda EC2 モデル Firecraker モデル

Slide 28

Slide 28 text

● Nodejs8.10 ● Nodejs10.x

Slide 29

Slide 29 text

● Nodejs8.10 /opt/nodejs/node8/node_modules:/opt/nodejs /node_modules:/var/runtime/node_modules:/v ar/runtime:/var/task:/var/runtime/node_mod ules ● Nodejs10.x /opt/nodejs/node10/node_modules:/opt/nodej s/node_modules:/var/runtime/node_modules

Slide 30

Slide 30 text

https://nodejs.org/docs/v12.13.1/api/modules.html

Slide 31

Slide 31 text

/var/task に path が通って なかったので参照できなかった

Slide 32

Slide 32 text

解決方法

Slide 33

Slide 33 text

ちゃんと相対パスで書こう

Slide 34

Slide 34 text

import文を使おう

Slide 35

Slide 35 text

まとめ

Slide 36

Slide 36 text

● require はちゃんと相対パスで書こう ● import文っていう方法もあるよ ● アップデートはNodejs だけの問題じゃ ないときあるので気をつけよう ● Lambdaのデプロイはフレームワーク等 で管理しないと大変…

Slide 37

Slide 37 text

おわり