Alexa Skillで利用するLambda関数の作成では、「設計図」のテンプレートを編集していく方法が広く紹介されています。ただ、テンプレートのAlexa SDKが古かったり、別のライブラリを使う必要があったりするなどで、「一から作成」したいと思うことがあります。ここでは、「一から作成」する方法を説明します。この方法を応用すると、Alexa Skillに限らず、外部ライブラリを含むNode.jsのLambda関数を、インラインエディタで編集できる状態で作成できるようになります。
Node.jsが開発環境にインストールされている前提で説明します。
Node.jsプロジェクトの作成
開発環境に適当なディレクトリを作ります。
$ mkdir SKILLDIR
$ cd SKILLDIR
以下のコマンドで、package.json
を作成します。
$ npm init
(案内に従って各種プロパティを設定)
index.js
を作成し、Alexa SDKのREADMEで紹介されている最小限のコードと、必須のリクエストタイプを受け取るハンドラの空実装を入れます。
'use strict';
const Alexa = require('alexa-sdk');
exports.handler = function(event, context, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.appId = APP_ID // EDIT HERE
alexa.registerHandlers(handlers);
alexa.execute();
};
const handlers = {
'LaunchRequest': function () {
// EDIT HERE
},
'XXIntent' : function() {
// EDIT HERE
},
'SessionEndedRequest': function () {
// EDIT HERE
},
};
以下のコマンドで、最新のAlexa SDKをnode_modules/
にダウンロードして、package.json
に参照を追加します。
$ npm install --save alexa-sdk
(オプション)これから使う予定のライブラリを、同様に追加します。(以下はaxiosの例)
$ npm install --save axios
AWS SDKの削除
この時点でZIP化してLambdaコンソールにアップロードしてしまうと、Lambda 関数 「xxxx」 のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。
というメッセージが表示されて、インライン編集ができなくなってしまいます。
これは、Alexa SDKをダウンロードする際に、依存ライブラリとしてAWS SDKまでnode_modules/
にダウンロードされ、ZIPのサイズが大きくなってしまうためです。
これを避けるために、AWS SDKを削除します。Lambdaサーバには既にAWS SDKが入っていますので、インライン編集するのであれば、AWS SDKをZIPに含めていなくても構いません。
$ npm uninstall aws-sdk
ZIPの作成とLambdaへのアップロード
ZIPで圧縮します。以下は一例です。
$ zip -r ../alexa-test.zip *
AWSのLambdaコンソールで、関数を「一から作成」します。
関数コードでコードエントリタイプ
を.ZIPファイルをアップロード
に変えて、作成したZIPファイルをアップロードします。
画面右上の保存
ボタンを押します。うまくいけば、インラインエディタが開きます。
このエディタで、APP_ID
の部分を編集したり、各ハンドラを正式に実装したりしていきましょう。
ライブラリの入れ替えが必要な場合
- 画面上部の
アクション
->関数のエクスポート
でエクスポートします。 - エクスポートしたZIPを展開します。
- 展開されたディレクトリの中で、npmコマンドでライブラリを入れ替えます。
-
npm uninstall
でAWS SDKを削除します。 - 再度ZIP化してアップロードします。
npmコマンドを実行すると、削除したAWS SDKが復活しますので、必ずZIP化の直前にAWS SDKを削除するようにしてください。