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

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

[PR]WordPressの入門書共著しました

ローカル環境の構築からテーマ作成・サイトの運営やコミュニティの紹介など、
「WordPressを触って終わり」ではなく、仕事でできるようになるには何が必要かがわかるようになる内容になっています。


(目次)
Lesson01:WordPressをはじめよう
Lesson02:必要な環境を整えインストールする
Lesson03:初期設定をしよう
Lesson04:コンテンツの追加・編集とナビゲーションの設定
Lesson05:テーマとプラグインによる外観カスタマイズ
Lesson06:プラグインによる機能の追加
Lesson07:ローカル開発環境をつくろう
Lesson08:テーマ作成の第一歩〜PHPとテーマの基礎
Lesson09:テンプレートファイルの作成
Lesson10:各種テンプレートファイルの作成
Lesson11:テーマカスタマイザーの実装
Lesson12:WordPressを本番環境へデプロイする
Lesson13:サイトの広報と集客
Lesson14:サイトの運営と管理
Lesson15:もっとWordPressを使いこなす・学ぶ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です