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