Tweet

2018年12月1日土曜日

【AmazonAlexaスキル開発】ログを確認してデバックする方法(AWS lambda関数 保存後にテストして実行失敗する時に確認すること)

こういう人向け

  • コーディングしてAWS lambda関数に保存してテストしたら実行失敗してどうすればいいか分からない人
  • AmazonAlexaスキルのデバッグの仕方が分からない人(模索中の人)

実行失敗とは



{
  "errorMessage": "Invalid or unexpected token",
  "errorType": "SyntaxError",
  "stackTrace": [
    "                              ^^",
    "",
    "SyntaxError: Invalid or unexpected token",
    "createScript (vm.js:80:10)",
    "Object.runInThisContext (vm.js:139:10)",
    "Module._compile (module.js:616:28)",
    "Object.Module._extensions..js (module.js:663:10)",
    "Module.load (module.js:565:32)",
    "tryModuleLoad (module.js:505:12)",
    "Function.Module._load (module.js:497:3)",
    "Module.require (module.js:596:17)",
    "require (internal/module.js:11:18)"
  ]
}

エラーのログ貼るとこんなメッセージが貼られています。

こうなった場合どうするかです。


結論

(1)インラインコード編集上でエラーマーク、エラー理由を確認する。
(2)CloudWatch上でエラーログを確認する。
 →込み入ったエラー(nullを代入した等)など、問題のある行が特定出来ない場合

最初にコーディング上の文法ミスなどを確認して、

その後内部処理を確認する感じです、基本ですね。

1個ずつ解説していきます。


インラインコード編集上でエラーマーク、エラー理由を確認する。

>  "errorMessage": "Invalid or unexpected token",
> "errorType": "SyntaxError",

Google翻訳などに掛けると、SyntaxError→構文エラーと返ってきます。

つまり何かしら文法上にエラーがあったと考えます。

この後、インラインコードを上から下までじっくり眺めましょう。




明らかに赤い所ありますよね。


21行目:const message ="テストエラーメッセージ"";


赤字で書いた部分が余計です、という事です。
こういった事が1個あると動かないので注意しましょう。

なのでコーディングしてインラインコードに移したら、
一度エラーメッセージ出てないかチェックしてもいいかもしれません。
さらっとマーク出てるか、確認するぐらいですからね。


CloudWatch上でログを見る。


CloudWatchログの画面への遷移方法もお教えします。


「モニタリング」→「CloudWatchのログを表示」



「右側の更新」→ログストリームで最新の時間帯ログをクリック
※リアルタイムに反映されるのですが、5秒ほど待たないと最新版が下りて来ない場合があります。

ちゃんと時間は秒数まで確認してください。



上からログを開示していくと沢山エラーについて書いてあるログがあります。
こちらで const message = "テストエラーmessage"";

問題箇所を指摘してくれますね。


CloudWatchログ確認方法 ちょっとだけ応用


33行目で狙ってエラー起こします。
スロットタイプAlexnameなんてものは未実装なのに、その内部にあるvalueはアクセスできません。

意外かもしれませんが、これ保存→テストしても問題は起こらないんですよね。

しかし、Amazon開発ポータル(Amazon Developer Console)側の
Alexaシミュレータでは落ちる。


こういう時どうすればいいのか。
CloudWatchの良いところは連携しているスキルのシミュレータログも拾える所。
先程と同様に見ていきましょう。


Alexaシミュレータで落ちた時のCloudWatchログを確認しに行く。


2018-12-01T07:55:50.765Z 8545c6c6-f53e-11e8-8b28-09449a6e0fcb
{
"errorMessage": "Cannot read property 'Alexname' of undefined", "errorType": "TypeError", "stackTrace": [ "Object.callAlex (/var/task/index.js:33:39)", "emitNone (events.js:106:13)", "AlexaRequestEmitter.emit (events.js:208:7)",
(省略)



青字に注目してください。33行目でエラーで落ちていますよと教えてくれています。
これめっちゃ知ってから捗るんだよなぁ・・・
流石に落ちている行が分かれば治せるはず。
これで分からない場合は、エラーメッセージなども参考に直しましょう!

治せるはずです。

まとめ

  • まずは「インラインコード」上で文法エラーなど初歩的なミスを確認しよう。
  • AWS Lambda関数上のテストログを確認しよう。
  • Alexaシミュレータで落ちる場合はCloudWatchログをポチポチ開示しよう。

0 件のコメント:

コメントを投稿