はじめに
Serverlessなどの便利なものがありながらも乗り遅れてどうしたらいいか分からない人(自分)向けのトピックです。
タイトルにAPIが入ってるのはAPI Gatewayと連携するのを前提にしているからです。
TL;DR
- npm runコマンドを利用して簡単にZIP化してアップロードすると楽チン
環境構築
自分はhomebrew+nodebrewを使って環境構築しました(すでにされていました)
Nodejsが使えるようにするトピックはいっぱいあり今回の趣旨にしたい部分ではないので割愛します。
AWS Lambdaは執筆時点ではv4.3.2でした(2017/03)
プロジェクトの設定
まずはプロジェクトを作成します
mkdir node_projects
cd node_projects
npm init
以上のコマンドを打って、聞かれる質問に適宜答えるとプロジェクト作成完了です
簡単にアーカイブできるようにする
以下の例のようにscripts/zipを追加します。
これによって**npm run zipとするとzipファイルが作成されるようになります
{
"name": "node_projects",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"zip": "zip -r function.zip index.js package.json node_modules*"
},
"author": "",
"license": "ISC"
}
Lamdbdaからの呼び出し設定
Lambda用にアップロードするファイルを作成することが出来ました。
ただしこのままでは実行できません。
どういう設定が必要か?それは、Lambda上のハンドラという項目です。
ハンドラという項目は設定タブの中に入っています。
この部分と、実行させたい*.jsを紐付ける必要があります。
ファイル名の拡張子をなくし部分、例えばindex.jsであればindexです。
このファイル名+.handlerと言う風にします。
index.handler
今度は、ソースファイルの方を設定します。
今度はハンドラに設定したhandlerに対応する部分を作ります。
export.handler = (event, context, callback)=>{
callback(null, "Hello World";
};
最低限だとこのような感じになると思います。
export.handlerという部分に関数オブジェクトを代入しています。
Lambdaからはこの部分が呼び出されるため、上記のようにします。
また、実際にコーディングしていく際には、この関数オブジェクトの中に書くことになると思います。
以上です。おつかれさまでした