Lambda関数にNode.jsモジュールを入れるなら、Cloud9が簡単でおすすめ

#🔶 Lambda関数にNode.jsモジュールを追加
Lambda関数にNode.jsのソースを書く際、Node.jsモジュールを追加する必要がある場合、追加方法が2つあります。  

１つは、**Linux環境上でNode.jsプログラムのデプロイパッケージを作成する方法**。
Lambda関数はLinux環境で動作しているので、Linux向けにコンパイルされたNode.jsモジュールでないと、動作しない事があります。
そのため、例えば以下のような手順を行う必要があります。

1. EC2でLinux環境を用意
1. そこにLambda関数として書いたNode.jsソースをダウンロード
1. 必要なNode.jsモジュールを追加して、zipファイルにまとめてデプロイパッケージを作成
1. Lambdaにアップロード

正直、非常に煩雑です。

もう１つは、**AWS Cloud9でデプロイパッケージを作成する方法**です。

AWS Cloud9
https://aws.amazon.com/jp/cloud9/

こちらは、Lambdaにも対応している、AWSで用意されたIDEです。
IDEで、Node.jsモジュールを追加して、Lambdaにデプロイするだけなので、非常に簡単です。

#🔶 AWS Cloud9でNode.jsモジュールを追加

今回は、東京リージョンに作ったLambda関数に、Node.jsモジュールを追加する例で説明します。
<img width="1225" alt="00.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/2d8f38ec-aed4-f31d-8aa2-b6ae6c5dd298.png">

##🔷 AWS Cloud9の準備
[AWS Cloud9](https://aws.amazon.com/jp/cloud9/)から、以下の[AWS Cloud9の使用を開始する]ボタンをクリックします。
<img width="1045" alt="01.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/caa14967-579f-1acb-32bb-f4fe6d621077.png">

2019/3/4現在、東京リージョンは無いので、今回はシンガポールリージョンを選択します。
<img width="693" alt="02.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/04cb72b1-7cc7-fa21-dd35-65dd5ffed607.png">

[Create enviroment]ボタンをクリックして、設定を開始します。
<img width="1063" alt="03.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/70d35840-73e7-0bbc-9cc5-f9088cf22f5c.png">

任意のワークスペース名と、説明を記入して、[Next step]ボタンをクリックします。
<img width="998" alt="04.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/dcf24820-c048-1a73-83f4-23890dba5e0a.png">

AWS Cloud9は、ソースの実行と保存に、EC2環境を使うので、EC2インスタンスの設定をします。
今回は小規模開発なので、特に変更せず、[Next step]ボタンをクリックします。
<img width="902" alt="05.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/ece5a2cb-5e60-f574-8258-cf16d6d48624.png">

確認画面が出るので、[Create enviroment]ボタンをクリックします。
<img width="901" alt="06.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/719ef109-d665-f695-cd9c-3c26b21f9b58.png">

AWS Cloud9の準備が始まります。
<img width="1224" alt="07.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/e42a1e8f-7fb3-79f6-82b5-10538163bdfa.png">

AWS Cloud9の環境の完成です。
<img width="1255" alt="08-1.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/12036236-9f5d-7e96-5a2b-0399d544341f.png">

##🔷 AWS Cloud9にLambda関数をインポート

まずは、東京リージョンのLambda関数を呼べるように設定します。
[AWS Cloud9]-[Preferences]を選択。
<img width="1224" alt="08-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/fb4d1703-f6aa-38ed-5fbf-069601a18031.png">

[AWS SETTINGS]を選択。
<img width="1225" alt="09.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/1e7f1d6d-d218-c8d1-577e-b45e74da71ad.png">

[Region]-[AWS Region]で、[Asis Pacific(Tokyo)]を選択。
<img width="1226" alt="10.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/831fa568-e743-2a95-b597-0bd93bda4112.png">

画面右端の[AWS Resources]を選択すると、東京リージョンのLambda関数「testLambda」プロジェクトが表示されます。
<img width="1225" alt="11.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/a649c2d3-73f6-e678-06f6-38653cbf5921.png">

「testLambda」プロジェクトをダブルクリックして、関数をインポートを開始します。
<img width="518" alt="12.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/7abc4e68-31d9-43f5-6cd5-dbd2c7266a54.png">

「testLambda」プロジェクトがインポートされます。
<img width="1202" alt="13-1.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/0a265b35-5712-7541-5934-2f8f288346c0.png">

##🔷 Lambda関数にNode.jsモジュールのインストール

画面下部のコンソールで、`npm init`を実行します。
<img width="1226" alt="13-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/b19c877c-032a-d67f-9575-ed9743709ef9.png">

「package.json」が作成されます。
<img width="1225" alt="14.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/987c965b-e208-21cc-81c4-475c698edb61.png">

次に、Node.jsモジュールのインストールを行います。
今回は、`npm install soap`を実行します。
<img width="1225" alt="15.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/43d7b29c-7b68-dddc-300c-8f6fc890b116.png">

「node_modules」フォルダが作られたら完了です。


##🔷 Lambdaプロジェクトに更新ファイルをデプロイ

「testLambda」プロジェクトに「package.json」ファイルと、「node_modules」フォルダを移動させます。
[AWS Resources]を選択して、↑アイコンをクリックしてデプロイを開始します。
<img width="1225" alt="16.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/6d46cedb-5e68-0442-34b3-27451a980092.png">

Lambdaで「testLambda」プロジェクトを確認すると、更新内容が反映しています。
<img width="1225" alt="17.png" src="https://qiita-image-store.s3.amazonaws.com/0/38099/969a1ca3-6582-cf84-cbf7-623cb2945c38.png">

#🔶 まとめ

このように、AWS Cloud9を使えば、Node.jsモジュールを簡単にインストールできます。
また、IDEなので、このままLambda関数の開発も行えます。

#🔶 参考

[Node.js の Lambda デプロイパッケージを作成するには、どうすればよいですか？](https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-deployment-package-nodejs/?nc1=h_ls)
[AWS Cloud9のLambdaデプロイ先を東京リージョンに変更する方法](https://qiita.com/nasuvitz/items/9fb481720196262b043d)