Amazon AlexaServerless FW

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.ymlcustom.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という使い分けになるかもですね。

チーム開発やCI / CDのパイプラインが欲しいという場合は、CodeStarおすすめです

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

WP Kyotoサポーター募集中

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

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

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

Related Category posts