ステップ 1: エンドポイントが Amazon SNS メッセージを処理する準備ができていることを確認する - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 1: エンドポイントが Amazon SNS メッセージを処理する準備ができていることを確認する

HTTP または HTTPSエンドポイントをトピックにサブスクライブする前に、 HTTPまたは HTTPSエンドポイントに、Amazon がサブスクリプションの確認メッセージと通知メッセージの送信SNSに使用するHTTPPOSTリクエストを処理する機能があることを確認する必要があります。通常、これは、Amazon からのHTTPリクエストを処理するウェブアプリケーション (エンドポイントホストが Apache と Tomcat で Linux を実行している場合は Java サーブレットなど) を作成してデプロイすることを意味しますSNS。HTTP エンドポイントをサブスクライブすると、Amazon はサブスクリプション確認リクエストSNSを送信します。Amazon は、その時点でこのリクエストSNSを送信するため、サブスクリプションを作成するときに、エンドポイントがこのリクエストを受信して処理できるように準備しておく必要があります。Amazon SNSは、サブスクリプションを確認するまで、エンドポイントに通知を送信しません。サブスクリプションを確認すると、Amazon SNSは、サブスクライブされたトピックに対してパブリッシュアクションが実行されると、エンドポイントに通知を送信します。

サブスクリプションの確認および通知メッセージを処理するようにエンドポイントを設定するには
  1. コードは、Amazon がエンドポイントSNSに送信するHTTPPOSTリクエストのHTTPヘッダーを読み取る必要があります。コードはx-amz-sns-message-type、Amazon SNSが送信したメッセージのタイプを示すヘッダーフィールド を探します。ヘッダーを確認することで、HTTPリクエストの本文を解析しなくてもメッセージタイプを特定できます。処理する必要がある 2 つのタイプ (SubscriptionConfirmation および Notification) があります。UnsubscribeConfirmation メッセージは、サブスクリプションがトピックから削除された場合のみ使用されます。

    HTTP ヘッダーの詳細については、「」を参照してくださいHTTP/HTTPS ヘッダー。次のHTTPPOSTリクエストは、サブスクリプション確認メッセージの例です。

    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: example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37f...", "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+...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
  2. コードはHTTPPOST、リクエストの本文とコンテンツタイプの text/plain 内のJSONドキュメントを解析して、Amazon SNS メッセージを構成する名前と値のペアを読み取る必要があります。エスケープされた制御文字の表現をASCII文字値に変換する (例えば、\n を改行文字に変換する) 処理を行うJSONパーサーを使用します。Jackson JSON Processor JSON などの既存のパーサーを使用するか、独自のパーサーを記述できます。件名とメッセージフィールドのテキストを有効な として送信するにはJSON、Amazon は一部のコントロール文字を、JSONドキュメントに含めることができるエスケープされた表現に変換SNSする必要があります。エンドポイントに送信されたPOSTリクエストの本文でJSONドキュメントを受け取ったら、元の件名とメッセージをトピックに公開する正確な表現が必要な場合は、エスケープされた文字を元の文字値に戻す必要があります。これは、署名では署名対象の文字列の一部としてメッセージと件名が元の形式で使用されるため、通知の署名を確認する場合に重要です。

  3. コードは、Amazon によって送信された通知、サブスクリプション確認、またはサブスクリプション解除確認メッセージの真正性を検証する必要がありますSNS。Amazon SNS メッセージに含まれる情報を使用して、エンドポイントで署名を再作成できます。これにより、署名を Amazon がメッセージでSNS送信した署名と照合することで、メッセージの内容を確認できます。メッセージの署名の確認の詳細については、「Amazon SNS メッセージの署名の検証」を参照してください。

  4. ヘッダーフィールド で指定されたタイプに基づいてx-amz-sns-message-type、コードはHTTPリクエストの本文に含まれるJSONドキュメントを読み、メッセージを処理する必要があります。メッセージの 2 つの主要なタイプを処理するためのガイドラインを以下に示します。

    SubscriptionConfirmation

    の値を読みSubscribeURL、その にアクセスしますURL。サブスクリプションを確認し、エンドポイントで通知の受信を開始するには、 にアクセスする必要があります SubscribeURLURL ( にHTTPGETリクエストを送信するなどURL)。前のステップのHTTPリクエスト例を参照して、 SubscribeURLがどのように表示されるかを確認してください。SubscriptionConfirmation メッセージの形式の詳細については、「HTTP/HTTPS サブスクリプション確認JSON形式」を参照してください。にアクセスするとURL、次のXMLドキュメントのようなレスポンスが返されます。ドキュメントは、 ConfirmSubscriptionResult要素内のARNエンドポイントのサブスクリプションを返します。

    <ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId> </ResponseMetadata> </ConfirmSubscriptionResponse>

    にアクセスする代わりにSubscribeURLConfirmSubscriptionアクションを使用してサブスクリプションを確定し、SubscriptionConfirmationメッセージ内の対応する値に をTokenセットできます。トピックの所有者とサブスクリプションの所有者がエンドポイントのサブスクリプションを解除できるようにするには、 AWS 署名とともに ConfirmSubscription アクションを呼び出します。

    通知

    Subject および Message の値を読み取り、トピックに発行された通知情報を取得します。

    Notification メッセージの形式の詳細については、「HTTP/HTTPS ヘッダー」を参照してください。次のHTTPPOSTリクエストは、エンドポイント example.com に送信される通知メッセージの例です。

    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: 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" }
  5. エンドポイントが Amazon からのHTTPPOSTメッセージに適切なステータスコードSNSで応答していることを確認します。接続は 15 秒でタイムアウトします。接続がタイムアウトする前にエンドポイントが応答しない場合、またはエンドポイントが 200~4xx の範囲外のステータスコードを返す場合、Amazon SNSはメッセージの配信を失敗した試行と見なします。

  6. コードが Amazon からのメッセージ配信の再試行を処理できることを確認しますSNS。Amazon SNSがエンドポイントから成功したレスポンスを受信しない場合、メッセージを再度配信しようとします。これはサブスクリプションの確認メッセージを含むすべてのメッセージに適用されます。デフォルトでは、メッセージの最初の配信が失敗した場合、Amazon は最大 3 回の再試行SNSを試行し、失敗した試行間隔は 20 秒に設定されています。

    注記

    メッセージのリクエストは 15 秒後にタイムアウトします。つまり、メッセージ配信の失敗がタイムアウトによって引き起こされた場合、Amazon SNS は前回の配信試行から約 35 秒間再試行します。エンドポイントに別の配信ポリシーを設定できます。

    Amazon SNSは、x-amz-sns-message-idヘッダーフィールドを使用して、Amazon SNSトピックに発行された各メッセージを一意に識別します。受信IDsメッセージで処理したメッセージの を比較することで、メッセージが再試行であるかどうかを判断できます。

  7. HTTPS エンドポイントをサブスクライブする場合は、エンドポイントに信頼できる認証機関 (CA) からのサーバー証明書があることを確認してください。Amazon SNSは、Amazon が信頼する CA によって署名されたサーバー証明書を持つHTTPSエンドポイントにのみメッセージを送信しますSNS。

  8. Amazon SNS メッセージを受信するために作成したコードをデプロイします。エンドポイントをサブスクライブするときに、エンドポイントは少なくともサブスクリプションの確認メッセージを受信する準備ができている必要があります。