AWS Pinpointを前職で使い倒したのでその経験を書く。規模としては1PUSHにつき100万-1000万デバイスがターゲット。
世界で1番ユーザーデバッグしたと思う。
AWSの公式漫画で紹介されていたのでむしゃくしゃしてかいた。
https://aws.amazon.com/jp/campaigns/manga/vol5-2/
2017/12-2018/10ぐらいまでの話なので今はもっと良くなっているかも?
ドキュメントにないステータスが返されるのは基本
例えば、CampaignActivityのstatusはこう書いてあるが
The state of the activity. Valid values: PENDING, INITIALIZING, RUNNING, PAUSED, CANCELLED, COMPLETED
実際はSKIPPEDやFAILEDなども来る。
たちの悪いことにFAILEDのまま放置するといつのまにかCOMPLETEDに変わっていたりする。
(実際は失敗している)
そもそも各ステータスがどういう時に返されるのか、どこにも書いていない
Campaignに限った話ではなく、Jobなどでも発生する。
デバイス毎の配信ステータスはAPIで取れない
- API ドキュメントに「EndoointのEndpointStatusにデバイス毎の配信ステータスが入る」と書いてあったのでそれを元に設計
- 作成してテストしてみたところ、不正なEndpointを登録して配信しても常に「Success」しか返ってこない
- AWSサポートに問い合わせしたところ、1ヶ月後に「このパラメータは使えないのでドキュメントを更新した」という返信がくる
- ドキュメントの説明が「Not used.」になった
結果、前提が崩れたのでアーキテクチャ設計からやり直しに。
一応kinesisからfirehoseでS3にログを吐いてそのログをGCMとAPNSでレコード毎に分析すればステータスが取れることは判明したが、、
ドキュメントから必須項目がわからない&勝手に必須項目が変わる
つらい。変えるときはせめてアナウンスして。βじゃないんだから。
Campaign.Limits.MaximumDurationを設定しないと配信が60分で打ち切られる
- 60分超えの配信を行うと配信失敗数が増える事象を検知
- 問い合わせしたところ数週間後にキャンペーン最大実行時間が3600秒で打ち切りになるデフォルト値が設定されているとの回答あり。
- コンソールのSettingに「キャンペーン最大実行時間」という項目があり、有効にするチェックボックスがアクティブでなくとも全体にデフォルト値が設定されるらしい。
(これに関してはコンソール側の設定にその項目があることを認識してなかった、CampaignのMaximumDurationを設定しない≒無制限だと思っていた自分も悪いが、、)
iOSの証明書を更新しても切り替わらない
コンソールのSettingから証明書を更新しても切り替わらないことがある。
一度iOSのチェックを外して保存して再度登録するとうまくいく。
設定の組み合わせで配信の失敗確率が上がる
IsLocalTimeと何か(忘れた)を組み合わせると失敗しやすくなる等々。とりあえずIsLocalTimeは使うな。
配信数がマイナスになる
バグ
配信ステータスが一週間以上配信中のまま
バグ
同じ端末に二重送信される
バグ
CSVの取り込み件数が一致しない
バグ
月数回ペースで配信が失敗する
kinesis経由でS3にログを出す設定は絶対に入れること
これがないとサポートに問い合わせてもほとんど原因不明で返ってくる。
その他
思い出したら書く。