Amazon AlexaAWSServerless FW

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

packagefunctions.hello.eventsを追加しています。

packageはalexa-sdkのファイルを同梱するために追加しています。
他のライブラリを入れたくない場合は、npm prune --productiondevDependenciesのファイルを消すか、babelで頑張る必要があります。

あとはLambdaにイベントトリガーを設定する必要があるので、eventsalexaSkillをつけておきましょう。

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.jshandlerを実行してくれます。

デプロイ

あとはsls deployでデプロイすればOKです。

その他

テストするときは、sls logs -f hello -tでログ監視しておくとログ追跡できて便利です。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts