(レポート) AWSモバイル/IoTサービス徹底攻略!! 「いるけどないからつくってみたよ高速モバイルプッシュ配信くん」 #cmdevio

2015/11/21 (土) に開催された「AWSモバイル/IoTサービス徹底攻略!!〜Developers.IO Meetup 番外編〜」でモバイルプッシュ配信について発表した内容について報告させていただきます。

イベント概要

本勉強会は基本的な内容の Basic Track、応用的な内容の Advanced Track、実際に試すことの出来る Hands On の 3 トラックに分けて AWS のモバイルサービスや、サーバーレスアーキテクチャ、IoT のお話をするというものです。

発表内容

1bc5665ce41fd68590f3e32e622de220

↑発表中の写真がなかったため、せっかくなので受付前で撮影してみました。

冒頭で質問させていただきましたが、Amazon SNS を触ってみたことがある方は少なかった感じでした。(モバイル / IoT が題材の勉強会だったためかもしれません。)

ですので、配信くんの説明の中で出てきた AWS のサービスのそれぞれの特徴を少しづつ入れておいたのは聞き手の方々に対して、より親切にできて良かったかなと思いました。

以下、発表の概要 & 補足です。

  • 任意の配信先に対するモバイルプッシュ配信ミドルウェアをつくってみました。
  • Amazon SNS の SNS Topic ではなくモバイルプッシュ通知機能を使用
  • EC2 インスタンスをたくさん使って処理を並列化
  • AWS からこんな感じの機能が提供されるとうれしいなあ (願望)
  • 弊社製品開発チームは Single Command Deploy の考え方を中心に自動化のためのさまざまなツール、ライブラリを使っています。
    • そのための独自 gradle plugin も開発しています。
  • Java は開発環境 (mac) と実環境 (linux) の差異を埋めるという面でも採用して良かったと考えています。
  • Docker / CFn では Infrastructure as Code を体現

質疑応答

  • Gradle の version によっては plugin を追加した時にうまく動かなかったりする問題がありそうだけど、どう対処しているのか?
    • Gradle wrapper の機能を使って、リポジトリ毎に固定の version を使うようにしています。
    • が、それでも plugin によっては問題が起こるかもしれません。まだ遭遇したことないですが、気をつけておきたいとは考えています。
  • SQS のメッセージが重複取得できてしまう問題にはどう対処しているのか?
    • 当初は別の記憶領域 (具体的には RDS (MySQL)) を使って、一回しか配信されないように保証する処理を入れていた
    • が、性能や保守の面と、重複の発生頻度もかなり低いこともあり、その機能を削除したという経緯があります。
    • そのため、今は「対処はしてない」状態です。