剖析 Amazon SNS 訊息格式 - Amazon Simple Notification Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

剖析 Amazon SNS 訊息格式

Amazon SNS使用以下格式。

HTTP/HTTPS 標頭

當 Amazon SNS傳送訂閱確認、通知或取消訂閱確認訊息至 HTTP/HTTPS 端點時,它會傳送包含數個 Amazon SNS特定標頭值POST的訊息。您可以針對識別訊息類型這類任務使用標頭值,而不必剖析JSON訊息內文即可讀取該Type值。根據預設,Amazon 會將所有通知SNS傳送至 HTTP/S 端點,並將 Content-Type 設定為 text/plain; charset=UTF-8。若要選擇文字/純文字 (預設值) 以外的 Content-Type,請參閱 建立 HTTP/S 交付政策 中的 headerContentType

x-amz-sns-message-type

訊息的類型。可能的值為 SubscriptionConfirmationNotificationUnsubscribeConfirmation

x-amz-sns-message-id

通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的通知,會使用原始訊息的訊息 ID。

x-amz-sns-topic-arn

發佈此訊息之主題的 Amazon Resource Name (ARN)。

x-amz-sns-subscription-arn

此端點訂閱ARN的 。

下列HTTPPOST標頭是對HTTP端點Notification傳送訊息的標頭範例。

POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent

HTTP/HTTPS 訂閱確認JSON格式

在您訂閱HTTP/HTTPS endpoint, Amazon SNS sends a subscription confirmation message to the HTTP/HTTPS端點之後。此訊息包含 SubscribeURL 值,您必須造訪才能確認訂閱 (或者,您可以使用具有 ConfirmSubscriptionToken 值)。

注意

在確認訂閱之前,Amazon SNS 不會傳送通知至此端點

訂閱確認訊息是包含訊息內文POST的訊息,其中包含具有下列名稱值對JSON的文件。

Type

訊息的類型。若是訂閱確認,類型為 SubscriptionConfirmation

MessageId

通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的訊息,會使用原始訊息的訊息 ID。

Token

您可以與 ConfirmSubscription 動作搭配使用以確認訂閱。或者,您也可直接造訪 SubscribeURL

TopicArn

此端點訂閱之主題的 Amazon Resource Name (ARN)。

Message

說明訊息的字串。若是訂閱確認,此字串看起來如下:

You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
SubscribeURL

您必須URL造訪 才能確認訂閱。或者,您可以改為使用 TokenConfirmSubscription 動作以確認訂閱。

Timestamp

傳送訂閱確認的時間 (GMT)。

SignatureVersion

使用的 Amazon SNS簽章版本。

  • 如果 SignatureVersion1,則 SignatureMessageMessageIdTypeTimestampTopicArn 值的 Base-64 編碼 SHA1withRSA 簽章。

  • 如果 SignatureVersion2,則 SignatureMessageMessageIdTypeTimestampTopicArn 值的 Base-64 編碼 SHA256withRSA 簽章。

Signature

以 Base64 編碼 SHA1withRSAMessageMessageIdTypeTimestampTopicArn 值的 SHA256withRSA 簽章。

SigningCertURL

用來簽署訊息的URL憑證的 。

下列HTTPPOST訊息是傳送至HTTP端點SubscriptionConfirmation的訊息範例。

POST / HTTP/1.1 x-amz-sns-message-type: SubscriptionConfirmation x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }

HTTP/HTTPS 通知JSON格式

當 Amazon SNS傳送通知至訂閱的 HTTP或HTTPS端點時,傳送至端點POST的訊息具有訊息內文,其中包含具有下列名稱值對JSON的文件。

Type

訊息的類型。若是通知,類型為 Notification

MessageId

通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的通知,會使用原始訊息的訊息 ID。

TopicArn

發佈此訊息之主題的 Amazon Resource Name (ARN)。

Subject

發布通知至主題時指定的 Subject 參數。

注意

這是選擇性的參數。如果Subject未指定任何 ,則此名稱值對不會出現在JSON本文件中。

Message

發布通知至主題時指定的 Message 值。

Timestamp

發佈通知的時間 (GMT)。

SignatureVersion

使用的 Amazon SNS簽章版本。

  • 如果 SignatureVersion1,則 SignatureMessageMessageIdSubject (如果存在)、TypeTimestampTopicArn 值的 Base-64 編碼 SHA1withRSA 簽章。

  • 如果 SignatureVersion2,則 SignatureMessageMessageIdSubject (如果存在)、TypeTimestampTopicArn 值的 Base-64 編碼 SHA256withRSA 簽章。

Signature

以 Base64 編碼 SHA1withRSAMessageMessageIdSubject (如果存在)、TypeTimestampTopicArn 值的 SHA256withRSA 簽章。

SigningCertURL

用來簽署訊息的URL憑證的 。

UnsubscribeURL

URL 可用來從此主題取消訂閱端點的 。如果您造訪此 URL,Amazon 會SNS取消訂閱端點,並停止傳送通知至此端點。

下列HTTPPOST訊息是傳送至HTTP端點Notification的訊息範例。

POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324 x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96 Content-Length: 773 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96" } }

HTTP/HTTPS 取消訂閱確認JSON格式

HTTP/HTTPS 端點取消訂閱主題後,Amazon SNS會傳送取消訂閱確認訊息至端點。

取消訂閱確認訊息是包含訊息內文POST的訊息,其中包含具有下列名稱值對JSON的文件。

Type

訊息的類型。若是取消訂閱確認,類型為 UnsubscribeConfirmation

MessageId

通用唯一識別碼 (UUID),每個發佈的訊息都是唯一的。對於 Amazon 在重試期間SNS重新傳送的訊息,會使用原始訊息的訊息 ID。

Token

您可以與 ConfirmSubscription 動作搭配使用,以重新確認訂閱。或者,您也可直接造訪 SubscribeURL

TopicArn

此端點取消訂閱之主題的 Amazon Resource Name (ARN)。

Message

說明訊息的字串。若是取消訂閱確認,此字串看起來如下:

You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
SubscribeURL

您必須URL造訪才能重新確認訂閱的 。或者,您可以改為使用 TokenConfirmSubscription 動作來重新確認訂閱。

Timestamp

傳送取消訂閱確認的時間 (GMT)。

SignatureVersion

使用的 Amazon SNS簽章版本。

  • 如果 SignatureVersion1,則 SignatureMessageMessageIdTypeTimestampTopicArn 值的 Base-64 編碼 SHA1withRSA 簽章。

  • 如果 SignatureVersion2,則 SignatureMessageMessageIdTypeTimestampTopicArn 值的 Base-64 編碼 SHA256withRSA 簽章。

Signature

以 Base64 編碼 SHA1withRSAMessageMessageIdTypeTimestampTopicArn 值的 SHA256withRSA 簽章。

SigningCertURL

用來簽署訊息的URL憑證的 。

下列HTTPPOST訊息是傳送至HTTP端點UnsubscribeConfirmation的訊息範例。

POST / HTTP/1.1 x-amz-sns-message-type: UnsubscribeConfirmation x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1399 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "UnsubscribeConfirmation", "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...", "Timestamp" : "2012-04-26T20:06:41.581Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEHXgJm...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }

SetSubscriptionAttributes 交付政策JSON格式

如果您將請求傳送至SetSubscriptionAttributes動作,並將 AttributeName 參數設定為 的值DeliveryPolicy,則 AttributeValue 參數的值必須是有效的JSON物件。例如,下面的範例設定交付政策為總計 5 次重試。

http://sns.us-east-2.amazonaws.com/ ?Action=SetSubscriptionAttributes &SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca &AttributeName=DeliveryPolicy &AttributeValue={"healthyRetryPolicy":{"numRetries":5}} ...

使用下列JSON格式作為 AttributeValue 參數的值。

{ "healthyRetryPolicy" : { "minDelayTarget" : int, "maxDelayTarget" : int, "numRetries" : int, "numMaxDelayRetries" : int, "backoffFunction" : "linear|arithmetic|geometric|exponential" }, "throttlePolicy" : { "maxReceivesPerSecond" : int }, "requestPolicy" : { "headerContentType" : "text/plain | application/json | application/xml" } }

如需有關 SetSubscriptionAttribute動作的詳細資訊,請前往 Amazon Simple Notification Service 參考 SetSubscriptionAttributes 中的 。 API 如需支援HTTP的內容類型標頭的詳細資訊,請參閱 建立 HTTP/S 交付政策

SetTopicAttributes 交付政策JSON格式

如果您將請求傳送至 SetTopicAttributes 動作,並將 AttributeName 參數設定為 的值DeliveryPolicy,則 AttributeValue 參數的值必須是有效的JSON物件。例如,下面的範例設定交付政策為總計 5 次重試。

http://sns.us-east-2.amazonaws.com/ ?Action=SetTopicAttributes &TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic &AttributeName=DeliveryPolicy &AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}} ...

針對 AttributeValue 參數的值使用下列JSON格式。

{ "http" : { "defaultHealthyRetryPolicy" : { "minDelayTarget": int, "maxDelayTarget": int, "numRetries": int, "numMaxDelayRetries": int, "backoffFunction": "linear|arithmetic|geometric|exponential" }, "disableSubscriptionOverrides" : Boolean, "defaultThrottlePolicy" : { "maxReceivesPerSecond" : int }, "defaultRequestPolicy" : { "headerContentType" : "text/plain | application/json | application/xml" } } }

如需有關 SetTopicAttribute動作的詳細資訊,請前往 Amazon Simple Notification Service 參考 SetTopicAttributes 中的 。 API 如需支援HTTP的內容類型標頭的詳細資訊,請參閱 建立 HTTP/S 交付政策