cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平@inokara)です。

はじめに

AWS 白帯シリーズ第二弾として前回に引き続き SQS を取り扱っていきたいと思います。

今回は AWS の他のシステム(SNS)との連携を試してみたいと思います。


他のシステム(SNS)との連携

AWS や他のクラウド環境において他のシステムとの連携がとても簡単に行えるというのはオンプレ環境では享受出来ないメリットだと考えています。もちろん、SQS も同様で AWS にて提供されているシステムと連携出来るようになっています。(オンプレ環境で同じようなことが出来ないわけではないと思いますが…)

今回はその中でも SNS との連携について試してみたいと思います。

SNS とは

ソーシャルネットワークだと思った方は一旦、パソコンを閉じて顔を洗ってから戻って来て下さい。私も当初は AWS はソーシャル・ネットワークサービスを始めたのかーと思っていました…ということで SNS とは以下のような特徴があります。

  • 高速なメッセージングサービス
  • もちろんフルマネージド
  • 様々な AWS サービスと連携することが出来る
  • 通知先(Subscribe)として HTTP(S) やメール、SQS や個別のアプリケーションを指定出来る

詳しくは以下の神資料を御覧ください。

ということで、SQS と SNS は連携される運命の元にあるようです。

The 連携

SQS の ARN を控えておく

はりきって連携!といきたいところですが、連携するには SQS の情報が必要になりますので SQS で作成したキューの ARN を予め控えておきます。

01

arn ではじまるエンドポイントを控えておきましょう。

SNS のトピックを作る

まずは SNS のトピックを作ります。

02

トピックとは雑誌みたいなものだと思って下さい。雑誌を発行するイメージですね。

03

Create New Topic をクリックして Topic Name を設定するダイアログボックスが表示されるので Topic Name を設定します。

Subscription を設定する

次に雑誌の購読者を指定します。

04

Create Subscription をクリックすると以下のように購読者を指定するダイアログボックスが表示されます。

05

数多の Protocol から満を持して SQS を選択します(厳密には Amazon SQS ですね)。選択したら先ほど控えておいたキューの ARN を入力しましょう。

06

入力が終わったら Subscribe をクリックして定期購読申込みの終了は一旦終了です。以下のように Subscription が登録されています。

07

最後の一手間

Subscription に登録しただけでは連携は完了ではありません…残念ながら。最後の一手間として Subscription に登録されたことを承認してあげる操作が必要になります。本人確認みたいなものですね。

方法は簡単です。SQS のマネジメントコンソールから…

08

以下のようなダイアログボックスが表示されますので SNS の Topic を選択します。

09

SNS の Topic を選択すると Topic の ARN が自動的に入りますので確認して Subscribe をクリックしましょう。

10

上記のように最後の一手間が完了しました。

SNS から通知を飛ばす

通知メッセージを作成

通知するメッセージを作成する為に Publish をクリックします。

11

Subject と Message を適当に入力して Publish をクリックします。

12

SQS で届いたメッセージを確認する

以下のように SQS のキューに 1 つメッセージが届いているようです!

13

メッセージを見てみましょう。

14

詳しい操作に関しては Hello SQS !!(1) でやったことなので割愛しますが、以下のようにメッセージが届いていることが確認出来ました。

15

メッセージの内容は以下のような JSON の形式となっています。

{
  "Type" : "Notification",
  "MessageId" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "TopicArn" : "arn:aws:sns:us-east-1:123456789010:hogehuga",
  "Subject" : "こんにちわ",
  "Message" : "こんにちわ、こんにちわ。",
  "Timestamp" : "2014-07-03T11:39:25.025Z",
  "SignatureVersion" : "1",
  "Signature" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-xxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem",
  "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789010:hogehuga:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
  "MessageAttributes" : {
    "AWS.SNS.MOBILE.MPNS.Type" : {"Type":"String","Value":"token"},
    "AWS.SNS.MOBILE.WNS.Type" : {"Type":"String","Value":"wns/badge"},
    "AWS.SNS.MOBILE.MPNS.NotificationClass" : {"Type":"String","Value":"realtime"}
  }
}

この JSON のメッセージをキューから取り出して何かしらのアクションを起こせそうな気がしますが…このあたりの話はまた今度。


さいごに

今回やったこと

  • SNS の Topic を作成しました
  • Topic の通知先として SQS を設定しました
  • SNS からメッセージを送信して SQS のキューに入っていることを確認してメッセージの内容を確認しました

次回は…

  • いよいよ AWS CLI や SDK 等を使って SQS を操作してみたいと思いますです

元記事は、こちら