Amazon Alexaask-cli

Alexa Skill開発ダッシュボードから作成したAlexa Skillをask-cliからデプロイできるようにする

Alexa skill開発ダッシュボードのビルダーがすごく使いやすいので、「コード管理できるならそっちでやりたいなぁ」と思いつつどうしてもGUIで作りたくなります。そして「じゃあGUIで作ったやつが安定したタイミングでa […]

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

Alexa skill開発ダッシュボードのビルダーがすごく使いやすいので、「コード管理できるならそっちでやりたいなぁ」と思いつつどうしてもGUIで作りたくなります。そして「じゃあGUIで作ったやつが安定したタイミングでask-cli管理にすればいいやん」という発想に至ったのでやってみます。

GUIからスキルを作る

このあたりは画面をぽちぽちやりながら頑張ってください。Lambdaはblueprintのもの使ってとりあえずとかでいいと思います。

ask-cliでプロジェクトを作る

フォルダ構成などを合わせておきたいので、空プロジェクトを作っておきます。

$ ask  new -n example
New project for Alexa skill created.
$ cd example
$ tree -L 3
.
├── lambda
│   └── custom
│       ├── index.js
│       ├── node_modules
│       ├── package-lock.json
│       └── package.json
├── models
│   └── en-US.json
└── skill.json

4 directories, 6 files

ダッシュボードから作ったスキルの情報をインポートする

それではGUIから作ったデータをask-cliで作ったものに流し込んでいきましょう。

スキル情報のインポート

まずはスキル情報をインポートします。

$ ask api get-skill -s amzn1.ask.skill.xxxxx-xxx-xxx-xxxx > ./skill.json

これでask-cli側のスキル設定をGUIで作ったものに置き換えることができました。

AWS Lambdaのソースもask-cliで管理したい場合

もしLambdaのソースコードもask-cliで管理したい場合、上記の設定では別のLambdaを参照したままになります。そのため、get-skillの戻り値を全て入れるのではなく、.manifest.publishingInformationの値のみskill.jsonへ入れるようにしましょう。

$ ask api get-skill -s amzn1.ask.skill.xxxxx-xxx-xxx-xxxx
{
  "manifest": {
    "publishingInformation": {
      "locales": {
        "ja-JP": {
          "name": "ハローアレクサ"
        }
      }
    },

// ここから下はコピペしない
    "apis": {
      "custom": {
        "endpoint": {
          "uri": "arn:aws:lambda:ap-northeast-1:99999:function:example-development-hello"
        },
        "interfaces": []
      }
    },
    "manifestVersion": "1.0"
  }
}

対話モデルのインポート

続いて作成したスロット・インテント・サンプル発話などの対話モデルをインポートします。

$ ask api get-model -s amzn1.ask.skill.xxxxx-xxx-xxx-xxxx --stage development -l ja-JP > ./models/ja-JP.json

※ja-JPの部分は言語によって変わります。

これでスキル情報と対話モデルのインポートができました。

Lambdaソースのインポート

これはソースをどのような形で管理しているかによります。しかし/lambda/custom/配下にデプロイできれば、とりあえずask-cliからデプロイできるようになります。

$ tree -L 3
.
├── lambda
│   └── custom
│       ├── index.js
│       ├── node_modules
│       ├── package-lock.json
│       └── package.json
├── models

Lambdaも一緒にデプロイする場合

IAMの設定などはask-cliからはできない様子です。ですのでAmazon Elasticsearch ServiceやKinesisなど、DynamoDB以外のリソースにLambdaからアクセスさせたい場合はask-cliで管理しない方法を検討することをおすすめします。

configファイルを編集する

最後に.ask/configファイルを編集します。.deploy_settings.{YOUR_PROFILE}.skill_idにAlexa SkillのIDを指定しますので、ここをGUIで作成したもののIDに置き換えましょう。

これを忘れると、新しくデプロイされることになります。もっとも、GUIから作った方を消せばいい話ではありますが・・・

デプロイする

ここまでで準備ができたので、デプロイしましょう。ask deployすることでデプロイされます。

$ ask deploy 
Command not recognized. Please run "ask" for help.
-------------------- Update Skill Project --------------------
Skill Id: amzn1.ask.skill.xxxx-xxxxx-xxxxx-xxxxx
Skill deployment finished.
Model deployment finished.
Lambda deployment finished.
Your skill is now deployed and enabled in the development stage.
Try invoking the skill by saying “Alexa, open {your_skill_invocation_name}” or simulate an invocation via the `ask simulate` command.

AWS Lambdaのソースをデプロイしたくない場合

-t / --targetオプションでデプロイするものを指定できます。

$ ask deploy -t skill
$ ask deploy -t model

Lambdaのみデプロイしたくない場合、複数選択ができませんので、-t skill-t modelの両方を実行してください。

Serverless FWとの組み合わせでCDを組むのであれば、おそらくこのような流れになるかと思います。(未検証)

$ cd YOUR_PROJECT

# スキル情報のデプロイ
$ ask deploy -t skill

# 対話モデルのデプロイ
$ ask deploy -t model

# Lamndaコードのフォルダへ移動 
$ cd lambda/custom

# Serverless FWでデプロイ
$ sls deploy

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

WP Kyotoサポーター募集中

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

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

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

Related Category posts