実験用に自分のメアドで新しくAWSのアカウント作ろうと思ったら存在してました、muraveです。事務所引っ越す前の住所になってたので5年以上放置してた模様。
実験にはお安めのVPSを使うことが多いのですが、Serverlessという波にのるためにAWSを使わざるをえないのです。というか faultline を使いたい!
サーバーレスアーキテクチャなエラートラッキングツール faultline
きっかけは『PHPカンファレンス福岡2017』です。その時のスライド。動画もきてました
コレだ! と思いましたね。
だいたい、今はまともなメールを送信するのも面倒じゃないですか?
某メール送信サービスを使おうと思ったこともあったのですが、エラーメール送信するには「利用者」の契約が必要とのことで、不特定多数の利用者が想定されるサービスでは使えません。そもそもエラー通知をメールで欲しいわけでもなく、今もメールから Slack に連携しています。
faultline は運用コストが低く(手間的にもマネー的にも)、そしてなによりクライアントの JavaScript についても利用できることに魅力を感じます。
faultline-jsを使ってJavaScriptのエラートラッキングにfaultlineを利用する
前置きが長くなってしまいました。これからが本番。導入について、主にどこで引っかかったか、です。
faultline (https://github.com/faultline/faultline) は Concept に Simple deploy とあるとおり、とても良くできた deploy の仕組みをもっているのですが、基礎がわかってないのでそれなりにハマリました。
aws cli が必要。
「そこから!?」と思いましたね? おっちゃん、Serverless Framework について把握してないので何が必要なのかわかってないんよ。
aws cli configure までがんばる(アカウントに必要な権限は把握できてないので強いやつで突破)
README.md に書いてある通りすすめる。
$ git clone https://github.com/faultline/faultline.git
$ cd faultline
$ npm install
config.yml の調整。
masterApiKey と clientApiKey についてAWSに関係するのかしばらく悩みました。ちゃんとサンプルに書いてある通りの事なんですが、どちらもfaultline用なのでランダムな文字列を適当に書くだけでした。
もう一つ悩んだのが s3BucketName に設定した Bucket を事前に作るのか?deploy時に作ってくれるので「作らない」が正解。
あと、JavaScriptで使いたい場合 useKms を true に。これも設定しているとよろしくやってくれます。本当、親切。
デプロイします。
$ npm run deploy
私の場合は aws cli configure で default しか作ってないので AWS_PROFILE 指定してません。
デプロイされて「ひゃっはー!」って気分になります。
faultline-webui (https://github.com/faultline/faultline-webui) を準備します。簡単だったので詳細略。
Slack の Incomming Webhooks の準備をして sample-errors.json の notifications を調整、cURL で動作確認します(README.md 参照)。
faultline-webui でエラーが登録されていることを確認。 高まります。
Slack に通知が来ていないことに気づきます。 低まります。
いろいろと調べていて callNotifications でエラーが発生していることに気づきました。
Lambda 関数のログは AWS Lambda のダッシュボードから関数をクリック、「モニタリング」をクリック。
「CloudWatch のログを表示」をクリックしてたどり着きました。
github の issue で助けをもとめる。
https://github.com/faultline/faultline/issues/40
助言をいただいて Node のバージョンをv8系からv6系に変更してて deploy。
Slack への通知を確認。 いまココ。
k1LoWさんに感謝!
実は Slack に通知が来ない件の対処途中、導入予定(Laravel5.1)プロジェクトのブランチに faultline-php (https://github.com/faultline/faultline-php) を導入したらさっくり動いたので、その後の動作テストはcURLではなくそちらからしてました。
config.yml に書いた S3 Bucket を削除して destroy するのが吉(おそらく)
実は私、 CloudFormation が使用している Bucket まで削除して失敗したり(その後、手作業で各サービスを削除するも CloudFormation についても削除の必要があるのに気付かずに deploy でハマリつづけるオマケ付)、それならと Bucket を削除せずにやって失敗したり(あたりまえ)で、未完走。
Tags: faultline, Serverless