電話番号 電話番号 お問い合わせ

受付時間 平日10:00~18:00

TOP

資料ダウンロードはこちら >>

ロゴ

AWSやシステム・アプリ開発の最新情報|クロスパワーブログ

AWS Lambda

AWS Lambda Layersでnode_modulesを使う

Node.js

Node.jsを使用していると必ずといっていいほどnpmコマンドでライブラリをダウンロードしてくると思います。

npmでダウンロードしたライブラリをLambda Layersへ登録しておけば、Lambda本体はかなり軽く作成することができます。

 

今回はAmazon Echoのask-sdkを例にLayersへ登録して使ってみます。

 

npmでダウンロード

 

ローカルPC上で”nodejs”フォルダを作ります。

最後に説明しますが”nodejs”という名前には意味があります。

 

 

“nodejs”フォルダ内でnpmコマンドを実行します。

 


cd nodejs
npm install ask-sdk

 

 

 

“nodejs”をzipファイルへ圧縮します。

中身ではなく”nodejs”フォルダごと圧縮するのを注意してください。

 

 

Layersへ登録

 

AWS の管理コンソールからLambda>Layersを開いて”レイヤーの作成”ボタンを押します。

 

 

先ほど作成したzipファイルをアップロードします。

“互換性のあるランタイム”は”Node.js 8.10″を選択します。

 

 

“作成”を押して押してLayerの作成は完了です。

 

 

Lambda関数の作成

 

Lambda関数を作成します。

 

 

内容は何でも大丈夫ですので”Node.js 8.10″で作成します。

 

 

関数ができたらLayerの追加をします。

 

 

先ほど作成したレイヤーを選択します。

 

 

 

あとはLambdaのソースを書くだけです。

ここではask-sdkが使えるかを確認したいだけなので簡単なコードにしておきます。

 

const Alexa = require('ask-sdk-core');

const LaunchRequestHandler = {
  canHandle(handlerInput) {
    return true;
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak('hello')
      .getResponse();
  }
};

exports.handler = Alexa.SkillBuilders.custom()
  .addRequestHandlers(LaunchRequestHandler)
  .lambda();

 

 

保存してテストしてみましょう。

 

 

ちゃんと”ask-sdk”を使用できていますね。

 

おわりに

 

感のいい人なら疑問に思うかもしれません。

Layerのzipファイルは”/opt”配下に展開されるので、

“/opt/nodejs/node_modules/xxxxx”のような構成になります。

なのに、なぜ”const Alexa = require(‘ask-sdk-core’);”で参照できるのか。

 

実はいくつかのフォルダはLambdaが環境変数に読み込んでいるので、そのまま使えるのです。

詳細はAWS Lambda レイヤーのドキュメントを参照してください。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html