2016年3月15日 星期二

AWS 筆記 - 使用 Simple Notification Service (SNS)

AWS_SNS_01_home

共有 4種動作可挑選,以 Create Topic 為例,先輸入完 Topic 名稱後,可以在挑選 Subscription:

AWS_SNS_02_Subscription

以 HTTP/HTTPS 為例,就是會去 query 一個網址,而 SMS 則會寄簡訊。而 HTTP/HTTPS 也不是隨便設置完就好,還必須認證該 HTTP endpoint 是由你所擁有的,過程為:

Create Subscription -> HTTP/HTTPS -> 輸入 HTTP Endpoint -> Request confirmations -> 這時 AWS 就會發 HTTP POST 資料過去,請記得印出來,把 SubscribeURL 取出來用 -> Confirm Subscription 輸入剛剛的 SubscribeURL 即可完成驗證

這時在 HTTP endpoint 會收到 HTTP POST 資料,以 PHP 為例:

<?php

file_put_contents('/tmp/sns_check', file_get_contents('php://input'));


{
  "Type" : "SubscriptionConfirmation",
  "MessageId" : "9f5f6846-5227-4ef9-b94d-c172ef6c9c23",
  "Token" : "xxxxxx",
  "TopicArn" : "arn:aws:sns:us-east-1:HelloWorld",
  "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-east-1:HelloWorld.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-1:HelloWorld&Token=xxxxx
",
  ...
}


若一直沒有去做驗證,會一直卡在 PendingConfirmation 狀態,而沒確認的將於三天後自動刪除。

最後,也可以在AWS SNS介面上發動通知事件(Publish a message),以 raw format 為例,填寫的資料會出現在 Message 中:

AWS_SNS_05_Publish_message

若輸入的 raw = yoyo 字眼,那 HTTP endpoint 收到的 HTTP Post 資料為:

{
  "Type" : "Notification",
  "MessageId" : "f737bee7-7567-5f29-b230-f186ddaa84cc",
  "TopicArn" : "arn:aws:sns:us-east-1:HelloWorld",
  "Subject" : "haha",
  "Message" : "yoyo",
   ...
  }
}

沒有留言:

張貼留言