Serverless FrameworkでAlexa Skill向けLambdaをデプロイする
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の4日目の記事です。 alexa-sdkをAWS Lambdaで動かせば簡単にAlexa Skillを作り始 […]
目次
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の4日目の記事です。
alexa-sdkをAWS Lambdaで動かせば簡単にAlexa Skillを作り始めることができます。
そうなると今度は「じゃあそのソースコードのデプロイや管理はどうしましょう?」という問題に行き着きます。
個人的にオススメしているのは、Serverless Frameworkを使うことです。
Serverless Frameworkをつかうメリット
- rollbackやステージ指定のデプロイ、ローカル実行などコマンドが豊富
- CloudFormation記法でAWSリソースを追加できる
- イベントトリガーも
serverless.yml
で指定できる
Serverless Frameworkをつかうデメリット
Alexa Skill用のLambda1つ管理するだけなら少々オーバースペック感はあるかもしれません。
ですが他のプロジェクトでServerless Frameworkを使われているかたであれば、そのノウハウをそのまま使えるのでよいかなと思います。
Node.js & AWS Lambdaでのserverless.yml
Node.jsの場合の最低限がだいたいこんな感じです。
service:
name: myService
provider:
name: aws
runtime: nodejs6.10
functions:
hello:
handler: index.handler
Node.js & AWS Lambda + alexa-sdkでのserverless.yml
alexa-sdkを使ったCustom Skillの場合はこうなります。
service:
name: myService
provider:
name: aws
runtime: nodejs6.10
package:
include:
- node_modules/
functions:
hello:
handler: index.handler
events:
- alexaSkill
package
とfunctions.hello.events
を追加しています。
packageはalexa-sdkのファイルを同梱するために追加しています。
他のライブラリを入れたくない場合は、npm prune --production
でdevDependencies
のファイルを消すか、babelで頑張る必要があります。
あとはLambdaにイベントトリガーを設定する必要があるので、events
にalexaSkill
をつけておきましょう。
Lamnbdaのコードを書く
index.js
に以下の様なコードを用意しておけば、OKです。
'use strict'
const Alexa = require('alexa-sdk')
const handlers = {
'LaunchRequest': function () {
this.emit(':tell', 'サンプルスキルへようこそ。')
},
'AMAZON.StopIntent': function () {
this.response.speak('さようなら')
this.emit(':responseReady')
}
}
module.exports.handler = (event, context, callback) => {
alexa = Alexa.handler(event, context, callback)
alexa.registerHandlers(handlers)
alexa.execute()
}
serverless.yml
での設定はindex.handler
なので、index.js
のhandler
を実行してくれます。
デプロイ
あとはsls deploy
でデプロイすればOKです。
その他
テストするときは、sls logs -f hello -t
でログ監視しておくとログ追跡できて便利です。