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おすすめです

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark