【0円で超簡単】Alexaスキルのパフォーマンスを70%改善した方法
今回は、色々なスキルで応用できるパフォーマンス改善の方法についてです。
費用は実質無料
コードの修正が基本不要で超簡単
というコスパ最強なので、Alexaスキル開発者は必見です。
効果
このスキルで実験してみました。 シンプルさを謳っているだけあって、パフォーマンスは重要です。 alexa-skills.amazon.co.jp
まずは効果を見てみましょう。
Alexa Developer Consoleの「PERFORMANCE」の「エンドポイントのレイテンシー」のデータをグラフにしました。
2つの改善を行い、最終的には、p90が1500ms から、460msに減少しました。
それでは実際にやったことを書いていきます。
1. Lambdaのランタイムの更新
シンプル時計では、Node.jsを利用しています。
ランタイムをNode.js12.x から、現時点で最新のNode.js14.x に変更しました。
これで200msの改善です。
基本的には互換性があるので、コードの変更は不要だと思いますが、念のため動作確認はしましょう。 シンプル時計の場合は、呼ばれるはずのないダミーで登録しているIntentが呼び出されるようになってしまったので、そこだけ修正しました。(謎い)
2. Provisioned Concurrency の設定
Lambdaにはコールドスタート問題というのがあります。 (詳細は調べるとたくさん出てきます。)
この問題を解決する機能が2019年の12月に発表されました。
いろいろな理由があって試してなかったのですが、840ms改善という思った以上の効果がありました。
- 最近はコールドスタート問題が改善されたという話をよく聞いていた
- そもそもシンプル時計のレスポンスはそんなに遅くないのでは?
- Lambdaの無料枠が使えない
- 処理する時以外も起動しておくのがもったいないなぁ
試したきっかけは、Alexa AWSプロモーションクレジットが使いきれなかったと言うだけですw
毎月100ドル分のクレジットがもらえる中で、Provisioned Concurrencyをメモリ:256MB、予約数:1で設定した場合、月3.5ドルくらいなので、実質無料です!
注意点としては、Provisioned Concurrencyを使う場合、aliasの利用が必要っぽいです。
シンプル時計では、Alexa側の設定エンドポイントをLATEST運用(aliasやバージョン指定なし)していたので、スキルの申請が必要でした。
(スキル自体には変更ないので、1営業日でサクッと通りました。)
まとめ
- Lambdaのランタイムの更新
- Provisioned Concurrencyの設定
を設定して70%のパフォーマンス改善しました。
そして何より、Alexa AWSプロモーションクレジット で毎月100ドルもらえるのはすごいので、まだの人は申し込みましょう。
最後に
プロモーションクレジットはスキル開発を始めた2年前に、一度申請してたのですが、最近までもらえてませんでした。
というのも、最初に申請した時に、AWSアカウントIDが不正(ハイフンが含まれていた)で、適用されてなかったそうです。
(不備があった場合も申請完了のページは表示されるので、直してもらえるといいなぁ)
最近AWS費用がかかるようになり辛くなってきたので、改めて問い合わせてみて発覚。 同じようなケースで貰えてなかった人は是非もう一度申請してみてください!