Serverless FrameworkだけでAlexa Skill開発
Serverless FrameworkだけでAlexaスキルが管理できるということを知っている人は意外と少ないのかなと思ってまとめました。照井さん遅くなってすみません。 セットアップ sls createコマンドから始 […]
目次
Serverless FrameworkだけでAlexaスキルが管理できるということを知っている人は意外と少ないのかなと思ってまとめました。照井さん遅くなってすみません。
セットアップ
sls create
コマンドから始めることができます。templateにaws-alexa-typescript
を指定しましょう。
$ sls create -t aws-alexa-typescript -p ask-serverless
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/develop/sandbox/ask-erverless"
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.34.1
-------'
Serverless: Successfully generated boilerplate for template: "aws-alexa-typescript"
$ cd ask-serverless
$ npm i
ディレクトリ構成は以下の通りです。
$ tree -I node_modules
.
├── handler.ts
├── package.json
├── serverless.yml
├── source-map-install.js
├── tsconfig.json
└── webpack.config.js
0 directories, 6 files
Amazonアカウントとの連携
ここからはAlexaのデプロイに備えてAmazon開発者アカウントとの連携などを進めます。
$ sls alexa auth
実行すると、Amazon開発者アカウントでのログインを求められます。OAuthの認証が終われば、以下のように完了したメッセージが表示されてコマンドが完了します。
これで終わりです。簡単ですね。ちなみにここで取得した認証情報はどうやら ~/.serverless/.alexa-skills-token.json
からみれる様子です。
CDに組み込みたい場合は、このJSONをCDサービス上で復元できるようにしれやれば良いでしょう。(SSMのSecureStringで値を保存 -> ビルドコマンド内でJSON作成とか)
serverless.ymlの更新
続いてserverless.ymlに一部手を加えます。というのも元のコードはen-GB
向けになっているため、日本語でスキルをデプロイするようにする必要があります。
service:
name: ask-serverless
plugins:
- serverless-webpack
- serverless-alexa-skills
provider:
name: aws
runtime: nodejs8.10
custom:
alexa:
skills:
- id: amzn1.ask.skill.xxxx-xxxx-xxxx-xxxx-xxxx
manifest:
publishingInformation:
locales:
ja-JP:
name: はじめてのサーバーレス
apis:
custom:
endpoint:
manifestVersion: '1.0'
models:
ja-JP:
interactionModel:
languageModel:
invocationName: はじめてのサーバーレス
intents:
- name: HelloIntent
samples:
- 'こんにちは'
functions:
alexa:
handler: handler.alexa
events:
- alexaSkill: ${self:custom.alexa.skills.0.id}
スキルIDの取得
ここまで準備ができれば、次はAlexaコンソールにスキルをデプロイしましょう。
$ sls alexa create --name "Serverless Alexa Typescript" --locale ja-JP --type custom
Serverless: [Skill ID] amzn1.ask.skill.xxxx-xxxxx-xxxxxxx-xxxx
表示されたSkill IDを、serverless.yml
のcustom.alexa.skills[].id
にいれてやればOKです。
AWS スタックのデプロイ
続いてAWSスタックをデプロイします。これはいつも通りです。
$ sls deploy
$ aws lambda list-functions | grep ask-serverless-dev-alexa
"FunctionName": "ask-twilio-pay-dev-alexa",
"FunctionArn": "arn:aws:lambda:us-east-1:9999999:function:ask-serverless-dev-alexa",
この後Lambda ARNを使うので、AWS CLIで検索しておきます。
スキルとLambdaを連携する
あとは連携してビルドするだけです。
$ sls alexa update
$ sls alexa build
終わりに
AWSリソース連携系をサクッと作りたい場合はServerless Alexa、とりあえずスキル作って試したい時はHosted Skill、それ以外はASK CLIという使い分けになるかもですね。