LoginSignup
19
19

More than 5 years have passed since last update.

Alexa Skillで利用するLambda関数(Node.js)を、ハマらずに「一から作成」する方法

Posted at

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で紹介されている最小限のコードと、必須のリクエストタイプを受け取るハンドラの空実装を入れます。

index.js
'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 SDKnode_modules/にダウンロードして、package.jsonに参照を追加します。

$ npm install --save alexa-sdk

(オプション)これから使う予定のライブラリを、同様に追加します。(以下はaxiosの例)

$ npm install --save axios

AWS SDKの削除

この時点でZIP化してLambdaコンソールにアップロードしてしまうと、Lambda 関数 「xxxx」 のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。というメッセージが表示されて、インライン編集ができなくなってしまいます。

symptom

これは、Alexa SDKをダウンロードする際に、依存ライブラリとしてAWS SDKまでnode_modules/にダウンロードされ、ZIPのサイズが大きくなってしまうためです。

tree

これを避けるために、AWS SDKを削除します。Lambdaサーバには既にAWS SDKが入っていますので、インライン編集するのであれば、AWS SDKをZIPに含めていなくても構いません。

$ npm uninstall aws-sdk

ZIPの作成とLambdaへのアップロード

ZIPで圧縮します。以下は一例です。

$ zip -r ../alexa-test.zip *

AWSのLambdaコンソールで、関数を「一から作成」します。

関数コードでコードエントリタイプ.ZIPファイルをアップロードに変えて、作成したZIPファイルをアップロードします。

upload

画面右上の保存ボタンを押します。うまくいけば、インラインエディタが開きます。

editor

このエディタで、APP_IDの部分を編集したり、各ハンドラを正式に実装したりしていきましょう。

ライブラリの入れ替えが必要な場合

  1. 画面上部のアクション->関数のエクスポートでエクスポートします。
  2. エクスポートしたZIPを展開します。
  3. 展開されたディレクトリの中で、npmコマンドでライブラリを入れ替えます。
  4. npm uninstallAWS SDKを削除します。
  5. 再度ZIP化してアップロードします。

npmコマンドを実行すると、削除したAWS SDKが復活しますので、必ずZIP化の直前にAWS SDKを削除するようにしてください。

19
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
19