« AWS初心者向けWebinar「AWSクラウドでのWindowsの実行」の資料およびQA公開 | メイン | DoS/DDoS攻撃の概要と一般的な緩和対策 - 【AWS 初心者向け Webinar】 AWS 上での DDoS 対策によせて »

Parse PushからAmazon SNSへの移行

既にご存知の通り、Parseが2017年1月28日までにその運営を終了させることをアナウンスしました。Parse Coreを別のAWSのようなホステッドプロバイダーに移すカスタマーのために、ParseはParse Serverをオープンソース化し、移行ガイドを発行しました。しかしながら、そのガイドにはParse Pushの移行パスはなく、プッシュ通知のワークロード用には他のプッシュ通知プロバイダを使うことを示唆しています。代わりとなるプッシュ通知のプロバイダを探している間に、我々は本記事内にある移行スクリプトと移行ステップを使用してAmazon Simple Notification Service (Amazon SNS)を試すことをおすすめします。

Amazon SNSが初めての方は、Amazon SNSは代表的なブランドやスタートアップが数十億ものモバイル向けプッシュ通知(iOS、Android、Windows、FireOS、そしてBaidu)やエンタープライズメッセージを毎日送るのに使われているpub/subベースの通知サービスであるということを知っておいてください。Amazon SNSは需要に応じてスケールし、利用量ベースのプライスとなっています。Amazon SNSにより、100万リクエスト、100万プッシュ通知の配信や各AWSリージョンからの1GBのデータ転送(OUT)を毎月無課金で行えます。以降は100万リクエストあたり$0.50、100万プッシュ通知あたり$0.50を支払うだけです(加えて、データ転送料が適用されます)。価格に関するその他の情報はこちらを参照ください。

Parse PushからAmazon SNSへの移行は簡単です。Parseから全てのプッシュ用トークンをエクスポートし、それらをAmazon SNSへとインポートすることができます。そしてクライアントコードの変更やApp Storeへのアップデートなく、すぐにアプリへの配信を開始できます。こちらがその移行方法です。

 

Step 1: Parse PushのデータをExportする

  1. Parseのコンソールにログインし、アプリケーションを選択します
  2. Core > Browserの下でInstallation classを選択します
  3. 右上のEditをクリックします
  4. Export this dataを選択します

  1. Export this classExportを選択します

  1. ほどなく、エクスポートされZip化されたJSONファイルへのダウンロードリンクがemailで届きます。
  2. エクポートされたJSONファイルをダウンロードし保存します。それを次のステップで利用します。エクスポートされたJSONファイルは以下のサンプルのような見た目のはずで、deviceToken、deviceTypeとchannelsというキーが適切な値とともに含まれます。


Step 2: APNSとGCMのクレデンシャル取得

  1. Parseを利用する際に作成したAPNSとGCM(もしくはどちらか)のクレデンシャルを取得します。
    • iOSアプリケーション向け(APNS): Amazon SNSは.p12 push certificateを使用します。こちらはご自身のMacのKeychainからエクスポート可能です。もし.p12を持っていないならこちらのチュートリアルのStep1に従ってください。
    • アプリケーション向け(GCM): Parseのアプリに紐付けているGoogle Developers ProjectのAPI(Server)Keyを使う必要があります。
    • Windowsアプリケーション向け(WNS): こちらの手順に従ってClient secretとPackage Security Identifier (SID)を渡す必要があります。
  2. Amazon AWS Mobile Hubを利用してSNSリソースを作成するのに利用するため、これらのクレデンシャルを保存します。

 

Step 3: AWSリソースの作成

3.1. 新規AWSアカウントの作成 (必要な場合のみ):

  1. http://aws.amazon.com/にアクセスし、Sign In to the Consoleをクリックします
  2. 画面の手順に従います

注:サインアップ手順のなかで、電話のキーパッドを使ってPINを入力するための電話がかかってきます。無料範囲での利用のためのサインアップであったとしてもクレジットカード番号の提供が必須となります。

(訳注:日本のお客様はhttp://aws.amazon.com/jp/からサインアップをクリックしてサインアップしてください。アカウント作成の流れについてはこちらに日本語ガイドもあります)

3.2. AWS Mobile Hubプロジェクトの作成とプッシュ通知機能の設定

  1. こちらのAWS Mobile Hubのコンソールに進みます.
  2. Get Startedを選びます

  1. First things first…” の内容を確認します

  1. パーミッションを許可するためYesをクリックします
  2. Create new mobile projectを選択し、プロジェクト名を入力します(例:Parse Migration)
  3. プロジェクトが作成された後、Push Notificationsのfeatureを追加します

  1. Click Enable pushをクリックし, アプリが現在サポートしているプラットフォームを選択します。そして(Step2で取得した)各プラットフォームのクレデンシャルをアップロードし、Save changesをクリックします

 

  1. CMobile Hubのコンソールの左パネルでResourcesをクリックします
  2. Amazon SNS Platform Applicationsで、ハイライトされた名前をコピーしテンポラリの場所に保存します(後ほど移行ツールのパラメータとして使用します)
  3. Amazon SNS Topicsで、トピック名をコピーしテンポラリの場所に保存します(後ほど移行ツールのパラメータとして使用します)

 

完全修飾なSNSのplatform application名は以下のようになります。ハイライトされた箇所がStep 4で移行ツールに渡すアプリケーション名になります。

arn:aws:sns:us-east-1:xxxxxxxxxxxx:app/APNS/parse_MOBILEHUB_1768078787

先の手順で、特定のプッシュ通知ゲートウェイ(APNSやGCMなど)のクレデンシャルを保持するPlatformApplicationと呼ばれるAmazon SNSリソースを作成しました。このPlatformApplicationはAmazon Resource Name (ARN)と呼ばれるもので表されます。加えて、Amazon SNS TopicはParseがchannels. Topicsと読んでいたものと同等のリソースであり、SNS上ではARNとして表示されます。

3.3. AWSクレデンシャル (access keyとsecret access key)の取得

移行ツールがあなたに代わって認証し、ParseにおけるInstallationオブジェクトと同等のPlatformEndpointsと呼ばれるSNSリソースを作成するためにAWSクレデンシャルが必要です。他のリソースと同様、PlatformEndpointsはARNで参照されます。こちらがAWSクレデンシャルの取得方法です。

  1. Navigate to the AWS credentials console こちらのAWSクレデンシャルコンソールにアクセスします
  2. Continue to Security Credentialsをクリックします
  3. Access Keys (Access KeyとSecret Access Key)をクリックします
  4. Create New Access Keyをクリックします

  1. Create Access Keyから、Show Access Keyを選択します。 Access Key IDSecret Access Keyの両方をコピーし保存します。

 

Step 4: Parse Pushデータのインポート

Download the Parse Push migration tool here.

Parse Push移行ツールをこちらからダウンロードしてください。

注:移行ツールは自分のMac/PCから実行可能なスタンドアロンjarファイルです。前のステップで集めた情報をパラメータ形式でツールに渡します。移行ツールはJava Runtime Environment (JRE)を必要とします。PC上のコマンドラインもしくはMacのターミナルでjavaとタイプし何も表示されない場合はまずJREをインストールする必要があります。

以下は移行ツールのパラメータ要件です。

  • エクスポートされたParseのJSONファイル (Step1)
  • 有効な.p12 push certificate (APNS)もしくは API Key (GCM) (Step2)
  • SNS platform applicationとtopic名(Step3.2)
  • AWSクレデンシャル(keyおよびsecret)(Step3.4)

以下の適切なコマンドラインオプションを指定してコマンドを実行し、移行を開始します!

java -jar SNSImportTool.jar -s -f <PATH_TO_EXPORTED_PARSE_INSTALLATION_.JSON_FILE>
--apnsName <APNS_PLATFORM_APP_NAME_STEP_3.2.9>
--gcmName <GCM_PLATFORM_APP_NAME_STEP_3.2.9>
--wnsName <WNS_PLATFORM_APP_NAME_STEP_3.2.9>
--topicName <SNS_TOPIC_NAME_STEP_3.2.10>
--awsaccess <AWS_KEY_ID_STEP_3.3>
--awssecret <SECRET_ACCESS_KEY_STEP_3.3>

 

--helpを指定すると移行ツールのオプションメニューをリストします。

 

パラメータ: APNS、GCMとWNSパラメータはこれらのプラットフォームをサポートする場合だけ必要となります。プラットフォームを省くと、ツールはプラットフォームタイプにマッチしたトークンをスキップします。-topicNameというオプションを指定しなかった場合、Parse Pushにおけるユニークなchannelごとに対するTopicの作成に加え、ツールはデフォルトで“parse_alldevices” というTopicを作成し、このTopic内の全PlatformEndpointsをサブスクライブします。サブスクライブすることはParse PushにおいてchannelとInstallationオブジェクト間の関連性と似たPlatformEndpointとTopic間での関連性を作成します。

ツールの実行後、エクスポートされたParse Pushのデータ全体で繰り返される出力で作成中のAmazon SNSリソースが確認できます。

注意: ParseのInstallationクラスにおいて対応するGCMSenderIdを持たないGoogle Cloud Messaging (GCM)のトークンはこの時点ではAmazon SNSに移行されません。Parseによると、GCMのregistration ID(ParseのInstallationクラスのdeviceTokenフィールドに保存される)はParseのGCM sender ID (1076345567071)に紐付けられています。これはParseのみがこれらのデバイスに通知を送るためのAPI Keyを保有していることを意味します。この場合、こちらでParseのExporting GCM Registration IDsソリューションに従ってください。このソリューションで、Google Developers ConsoleのGoogle Cloud Messaging APIを利用可能にし、Google Developers Consoleプロジェクトから得た新しいsender IDでParseのクライアントSDKをアップデートし、自身のsender IDに紐付いた新しいトークンを受け取るたおめデバイスをGCMに再登録します。その後、これらのトークンを移行するためAmazon SNSに戻り、こちらの手順に従います。

 

移行ツールは何をしているのか?

移行ツールは与えられたPlatformApplicationをまず検証します。それからAmazon SNS PlatformEndpointをエクスポートされたJSONファイル内のユニークなトークンごとに作成します。加えて、ツールはユニークなchannelごとにSNS Topicを作成し、これらのTopicに対してPlatformEndpointをサブスクライブします。 

この例が意味するところを見ていきましょう。"Seahawks"、"Bears"、"Football"という3つのchannelをサブスクライブしているAPNS tokenを1つだけ持っていたとします。ツールの実行後、Mobile Hubを通して作成したPlatformApplicationの存在を確認します。確認に使われた名前は--apnsName--gcmNameもしくは--wnsNameというオプションを用いてコマンドラインでツールに与えたものです。次に、ユニークなtokenを表すPlatformEndpointを作成し、3つのSNS Topicを“Seahawks”、“Bears”、“Football“という名前で作成します(既にTopicとして存在していない場合)。それからツールは作成されたPlatformEndpointを3つのSNS Topic全てにサブスクライブします。ツールは“parse_alldevices”というTopicも作成し、1つの同報メッセージで全てのユーザに送れるように全てのPlatformEndpointsがこれをサブスクライブします(この場合、ただ1つのPlatformEndpointです)。


Step 5: 移行後

移行が完了した後、個々のPlatformEndpointsに対して直接publishしたり、特定の関心のあるものにサブスクライブしているユーザ全てにリーチするためTopicにpublishしたり、もしくはシングルメッセージを全プラットフォームをまたがって全てのユーザに送るために“parse_alldevices”Topicにpublishすることが可能です。

こちらは知っておくべきいくつかの追加条件と移行時に役立つであろういくつかの情報です。

Publish: プッシュ通知をデバイスもしくはデバイスのグループに対して送るオペレーション(とAPIコール)。PublishというAPIコールにおいてPlatformEndpointのARNを指定することで前者を、紐付けられた(もしくはサブスクライブする)PlatformEndpointsを複数持つtopicのARNを指定することで後者を実現します。さらなる情報については、http://docs.aws.amazon.com/sns/latest/api/API_Publish.htmlにあるSNSのドキュメントを参照してください。

Subscribe:1回のpublishオペレーションでメッセージを多くのPlatformEndpointsに送信するためにPlatformEndpointsをTopicsに紐付けるオペレーション(とAPIコール)。APIコールでPlatformEndpoint ARNとTopic ARNを指定することでサブスクリプションを作成できます。さらなる情報については、http://docs.aws.amazon.com/sns/latest/api/API_Subscribe.htmlにあるSNSのドキュメントを参照してください。

Tools:アプリケーションからAWSサービスへのアクセスを簡単にするためのモバイルSDK、IDEツールキットとコマンドラインツールを利用するプログラミング言語やプラットフォームに合わせて提供しています。モバイル開発のためにAWSはiOS (Objective-C/Swift),、Android & Fire OS,、Xamarin,、UnityJavaScript 向けのモバイルSDKを提供しています。サーバサイドでの配信やサブスクライブ、AWSリソース管理のために、Java、.NET、Node.js、PHP、Python、Ruby、Go、C++向けのSDKを提供しています。

Resources:全てのSNSリソースはこちらのAWS SNSコンソールで表示して管理可能です。subscribe、publishもしくはリソースをリストするためにCLIをインストールする、もしくは先述のAWS SDKを使うことも可能です。

Parse PushとAmazon SNSの機能比較表

ParseからAmazon SNSに移行することは難しくないことですが、2つのサービスの間にはいくつかの違いがあり、アプリを適切に振る舞わせることを確実にするためにはそれに慣れる必要があります。

機能

Parse Push

Amazon SNS

サブスクリプション

Yes - channel

Yes - topic

高度なターゲティング

Yes – オブジェクト、ユーザ、クエリ、ジオポイント

No

カスタムセグメント

Yes – Saved Audiences

No

スケジュール通知

Yes (Android/Windowsのみ)

No

A/B テスト

Yes – Push Experiments

No

Pushのローカライズ

Yes

No

バッジインクリメント

Yes – (iOSのみ)

No

期限設定

Yes

Yes

バックグラウンド/サイレントPush

Yes

Yes

サウンド

Yes

Yes

キャンペーン

Yes

No

Token Feedback

No

Yes

Token/Endpoint イベントトリガー

Yes

Yes

Delivery Success/Failureの100%ログ出力

No (“Generic” Push Delivery Reportのみ)

Yes (ターゲットしたendpointごとにsuccess/failureを100%ログ出力)

価格

·  月あたり100万の受信者(token)

·  以降はユニークな受信者1000あたり$0.05

·  月あたり100万の無料リクエストとプッシュ配信

·  以降は100万リクエストとプッシュ配信100万あたり$0.50

·  詳細はこちら

これらのステップが役に立ったこと、そしてAmazon SNSを使った効果的なプッシュエンゲージメントの作成と成功を祈っています!

- Arjun Cholker(翻訳は西谷が行いました。原文はこちら)

コメント

Twitter, Facebook

このブログの最新情報はTwitterFacebookでもお知らせしています。お気軽にフォローください。

2018年4 月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30