Serverless Framework v1.4 リリース! Alexa Skill イベント サポート!
こんにちは、「kokexa(@kokexaz)」です。この記事は「Serverless(2) Advent Calendar 2016」の25日目の記事です。
qiita.com
12月15日に「Serverless Framework」のv1.4がリリースされました。v1.4で「Alexa Skillのイベントがサポートされた」とのことなので、さっそく試してみました。
Contents
- Serverless Frameworkのアップデート
- サービスの作成
- 必要なファイルを自動生成
- サービスの内容
- serverless.ymlの編集
- handler.pyの編集
- デプロイ
- 確認
- まとめ
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
以下の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」が返ってきてたら、デプロイは成功です。
確認
Lambdaファンクションのテスト実行
Lambdaのマネジメントコンソールで先程デプロイしたLambdaファンクションをテスト実行してみます。
「logs」を確認すると、ちゃんとリストの中からランダムに「こけし」の「系統」が選ばれ、「Your lucky kokeshi is Tsugaru」という値が返ってきています。
トリガーの確認
「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って本当にいいものですね。