JavaScript
Node.js
AWS
lambda

【aws】node.jsでlambdaを始める前に知っておきたい事

実行ロール

lambda関数で使用するawsサービスの設定です。
ロール自体の設定は、「IAM」で行います。
dynamodbやs3を使用するlambda関数では、実行ロールに当該サービスを含めましょう。

スクリーンショット 2018-06-10 15.05.29.png

ログ

lambdaの実行ログは、「CloudWatch」で閲覧できます。

タイムアウト時間

lambda関数はデフォルトで3秒のタイムアウト時間が設定されています。
javascriptに特有の同期的な処理が原因で処理が実行されていないと思っていたら、タイムアウト時間が原因で処理自体が終了していた、という場合もあります。
時間がかかる処理をさせる場合にはタイムアウト時間も気にしましょう。
スクリーンショット 2018-06-10 14.58.03.png

node modulesを使用する場合

httpクライアントのモジュール「http」等、デフォルトで使用できるモジュールもある程度ありますが、数は少ないです。
モジュールを使用するためには、ローカルでデプロイパッケージを作成し、zip化してアップロードする手順が必要です。

スクリーンショット 2018-06-10 15.22.57.png

参照
https://qiita.com/makopo/items/b738e32081f8cae75fe7

バージョンと非同期処理

特別な事情がなければasync awaitが使用できる8.10を推奨します。

スクリーンショット 2018-06-10 15.24.26.png

使用するモジュールも、async awaitに対応したものを使用するようにしましょう。
例えば、lambdaでデフォルトで使用可能な「http」モジュールはasync await非対応です。httpクライアントとしては、「node-fetch」がasync awaitに対応していることを確認しています。
https://www.npmjs.com/package/node-fetch

非同期処理/async awaitってなに?って方向けにざっくり説明します。
javascriptでは、実行速度を向上するために、db参照やhttpリクエスト等の時間がかかる処理の終了を待たずに次の処理を行います。
これは上から順番にコードが実行されないという悩ましい事態も引き起こします。
関数をasync functionにして、呼び出し時にはawaitを付与することにより、関数の実行終了を待つことができます。
以下に簡単なサンプルコードを示します。

async function jikanKakaruShori(){
  console.log("時間かかる処理")
}

async function suguOwaruShori(){
  console.log("すぐ終わる処理")
}

async function exec(){
  await jikanKakaruShori()
  await suguOwaruShori()
}

exec()


詳説は他に譲ります。