Serverless Framework v1.4 リリース! Alexa Skill イベント サポート!

f:id:kokexa:20161224014156j:plain

 
 こんにちは、「kokexa(@kokexaz)」です。この記事は「Serverless(2) Advent Calendar 2016」の25日目の記事です。
 
qiita.com

 12月15日に「Serverless Framework」のv1.4がリリースされました。v1.4で「Alexa Skillのイベントがサポートされた」とのことなので、さっそく試してみました。

Contents

  1. Serverless Frameworkのアップデート
  2. サービスの作成
  3. 必要なファイルを自動生成
  4. サービスの内容
  5. serverless.ymlの編集
  6. handler.pyの編集
  7. デプロイ
  8. 確認
  9. まとめ

Serverless Frameworkのアップデート

今回の作業環境
名前 バージョン
OS OS X
Python 2.7.10
aws-cli 1.11.30
npm 2.15.8
boto3 1.4.2

 まずは、以下のコマンドでローカル環境の「Serverless Framework」をアップデートします。とくにアップデート用のコマンドがないので、インストールコマンドでアップデートします。

sudo npm install serverless -g

 バージョンの確認ができれば、アップデートは成功です。

serverless --version
1.4.0

サービスの作成

 アップデートできたら、次はサービスを作成します。
 今回は、「Serverless Framework」公式のサンプルSkill、「LuckyNumber*1」からインスパイアされた「LuckyKokeshi」というSkillをつくりたいと思います。
 サービスの作成といってもやることは、サービス用のディレクトリを作成後、そのディレクトリに入るだけです。

mkdir lucky_kokeshi
cd lucky_kokeshi

必要なファイルを自動生成

 以下のコマンドで必要なファイルを自動生成します。

serverless create --template aws-python

f:id:kokexa:20161221181657j:plain

 以下の3つのファイルが自動生成されました。

自動生成されたファイル
ファイル名 用途
serverless.yml メインの設定ファイル。サービス名、言語、ファンクション名、リソースなどを設定
handler.py Lambdaファンクション
.npmignore 「npm publish」するときに除外したいファイルを設定

サービスの内容

 今回は、『Amazon Echoに「What's my lucky kokeshi?」とたずねると「こけし」の「系統」*2をランダムにかえしてくれる』サービスをつくりたいと思います。

serverless.ymlの編集

 まずは、Serverless Frameworkのメインの設定ファイルであるserverless.ymlを編集します。

serverless.yml
service: lucky-kokeshi

frameworkVersion: ">=1.4.0 <2.0.0"

provider:
  name: aws
  runtime: python2.7

functions:
  luckyKokeshi:
    handler: handler.lucky_kokeshi
    events:
      - alexaSkill

 「functions」でLambdaファンクションの設定をします。まず、「handler」でLambdaファンクションの設定です。「ファイル名.ファンクション名」と設定します。
 「events」でイベントハンドラーを設定します。「Alexa Skills Kit」をトリガーにしたい場合は、「- alexaSkill」と設定します。S3をトリガーにしたい場合は、「- s3」といった形で設定します。

handler.pyの編集

 次にhandler.pyの編集です。

handler.py
import random

def lucky_kokeshi(event, context):

    types = ['Tsuchiyu', 'Yajiro', 'Togatta', 'Naruko', 'Sakunami', 'Hijiori', 'Yamagata', 'Zao', 'Kijiyama', 'Nambu', 'Tsugaru']
    type = random.choice(types)
    print(type)

    response = {
        'version': '1.0',
        'response': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': 'Your lucky kokeshi is ' + str(type),
            }
        }
    }

    return response

 「types」リストに11種類の「伝統こけしの系統名」を入れて、その中からランダムに一種類が選ばれるようにしています。

デプロイ

 これで設定ファイルとLambdaファンクションが完成したので、デプロイしてみましょう。

serverless deploy

 
 Lambdaファンクションの「arn」が返ってきてたら、デプロイは成功です。

f:id:kokexa:20161222161554j:plain

確認

Lambdaファンクションのテスト実行

 Lambdaのマネジメントコンソールで先程デプロイしたLambdaファンクションをテスト実行してみます。

f:id:kokexa:20161221203353j:plain

 「logs」を確認すると、ちゃんとリストの中からランダムに「こけし」の「系統」が選ばれ、「Your lucky kokeshi is Tsugaru」という値が返ってきています。

トリガーの確認

f:id:kokexa:20161221204120j:plain

 「Triggers」タブを確認すると、ちゃんと「Alexa Skills Kit」が選択されています。

まとめ

 今回は「Alexa Skill イベント」が「Serverless Framework」でサポートされたので、まずは試してみました。
 「Alexa Skill」を作成したのははじめてでしたが、「Alexa Skill」をトリガーにしたLambdaファンクションの作成とデプロイが簡単にできました。

 「Serverless Framework」のv1.4では、先日のre:Inventで発表されたばかりのC#のテンプレートもリリースされています。「Serverless Framework」の開発がどんどん進んでいるようで、毎回アップデートが楽しみですね!

serverless create --template aws-csharp

次回

 さて、次回です。今回つくったSkill、「LuckyKokeshi」。簡単に作成した開発段階のSkillではありますが、やったことがないので「公開するための登録」をおこなってみたいと思います。

 と、書いていますが、すでに記事を書いています。25日にもう一つ「Serverworks Advent Calendar 2016」も入れていたためです。5分後には予約投稿されているはずですので、よろしければそちらもご確認ください!

 いや〜、Serverless Frameworkって本当にいいものですね。

次の記事

Alexa Skillを登録してみよう! LuckyKokeshi編

*1:Alexaにラッキーナンバーを聞くとランダムに数字がかえってくるSkill。

*2:こけし」の「系統」についてはWikipediaの「伝統こけしの系統」をご確認ください。