Amazon Simple Notification Service
開発者ガイド

Amazon SNS メッセージ配信ステータス

Amazon SNS では、以下の Amazon SNS エンドポイントでトピックに送信された通知メッセージの配信ステータスをログに記録できます。

  • アプリケーション

  • HTTP

  • Lambda

  • SQS

メッセージの配信ステータスの属性を設定した後、Amazon SNS エンドポイントをサブスクライブしたトピックにメッセージが送信されると、ログエントリが CloudWatch Logs に送信されるようになります。メッセージの配信ステータスを記録することは、以下のように運用をよりよく把握するために役立ちます。

  • メッセージが Amazon SNS エンドポイントに配信されたかどうかを知ることができます。

  • Amazon SNS エンドポイントから Amazon SNS に送信された応答を識別します。

  • メッセージのドウェル時間(発行のタイムスタンプから Amazon SNS エンドポイントへの配信直前までの時間)を決定します。

メッセージの配信ステータスのトピック属性を設定するには、AWS マネジメントコンソール、AWS Software Development Kit (SDK)、またはクエリ API を使用できます。

AWS マネジメントコンソール を使用した配信ステータスのログ記録の設定

  1. Amazon SNS コンソールにサインインします。

  2. ナビゲーションパネルで、[トピック] を選択します。

  3. [Topics (トピック)] ページでトピックを選択し、[Edit (編集)] を選択します。

  4. [Edit MyTopic (マイトピックの編集)] ページで、 [Delivery status logging (配信ステータスのログ記録)] セクションを展開します。

  5. 配信ステータスをログに記録するプロトコルを選択します (Lambda など)。

  6. [Success sample rate (成功したサンプル率)] (CloudWatch Logs を受信する成功したメッセージの割合) を入力します。

  7. [IAM roles (IAM ロール)] サブセクションで、次のいずれかの操作を行います。

    • アカウントから既存のサービスロールを選択するには、[Use existing service role (既存のサービスロールを使用)] を選択して成功および失敗した配信の IAM ロールを指定します。

    • アカウントに新しいサービスを作成するには、[Create new service role (新しいサービスロールを作成)]、[Create new roles (新しいロールの作成)] の順に選択して、IAM コンソールで成功および失敗した配信の IAM ロールを定義します。

      CloudWatch Logs を使用する書き込みアクセス許可を Amazon SNS に自動的に付与するには、[Allow (許可)] を選択します。

  8. [Save changes] を選択します。

    これで、メッセージ配信ステータスがある CloudWatch Logs を表示して解析できるようになりました。CloudWatch の使用方法の詳細については、「CloudWatch のドキュメント」を参照してください。

AWS SDK を使用して、Amazon SNS エンドポイントに差うぶクライブしたトピックのメッセージ配信ステータス属性を設定する

AWS SDK には、Amazon SNS でメッセージの配信ステータスの属性を使用するための API がいくつかの言語で用意されています。

トピック属性

メッセージの配信ステータスには、次のトピック属性名の値を使用できます。

アプリケーション

  • ApplicationSuccessFeedbackRoleArn

  • ApplicationSuccessFeedbackSampleRate

  • ApplicationFailureFeedbackRoleArn

    注記

    Amazon SNS アプリケーションエンドポイントに送信される通知メッセージのメッセージ配信ステータスのトピックの属性を設定できることに加えて、プッシュ通知サービスに送信されるプッシュ通知メッセージの配信ステータスのアプリケーション属性を設定することもできます。詳細については、「メッセージの配信ステータスの Amazon SNS アプリケーション属性を使用する」を参照してください。

HTTP

  • HTTPSuccessFeedbackRoleArn

  • HTTPSuccessFeedbackSampleRate

  • HTTPFailureFeedbackRoleArn

Lambda

  • LambdaSuccessFeedbackRoleArn

  • LambdaSuccessFeedbackSampleRate

  • LambdaFailureFeedbackRoleArn

SQS

  • SQSSuccessFeedbackRoleArn

  • SQSSuccessFeedbackSampleRate

  • SQSFailureFeedbackRoleArn

<ENDPOINT>SuccessFeedbackRoleArn および <ENDPOINT>FailureFeedbackRoleArn 属性は、お客様に代わって CloudWatch Logs を使用する書き込みアクセス許可を Amazon SNS に付与するために使用します。<ENDPOINT>SuccessFeedbackSampleRate 属性は、成功した配信メッセージのサンプルレートの割合(0-100)を指定するためのものです。<ENDPOINT>FailureFeedbackRoleArn 属性を設定した後は、メッセージの配信に失敗すると、必ず CloudWatch Logs が生成されます。

トピック属性を設定する AWS SDK の例

以下の例では、AWS SDK で提供されている Amazon SNS クライアントを使用してトピック属性を設定する方法について説明します。

AWS SDK for JavaAWS SDK for .NET
AWS SDK for Java

以下の Java の例で示しているのは、Amazon SNS エンドポイントをサブスクライブしたトピックに送信された通知メッセージの配信ステータスに対して、SetTopicAttributes API によりトピックの属性を設定する方法です。この例では、topicArnattribName、および attribValue に文字列値が設定されたことを前提としています。

final static String topicArn = ("arn:aws:sns:us-east-2:123456789012:MyTopic"); final static String attribName = ("LambdaSuccessFeedbackRoleArn"); final static String attribValue = ("arn:aws:iam::123456789012:role/SNSSuccessFeedback");
SetTopicAttributesRequest setTopicAttributesRequest = new SetTopicAttributesRequest(); setTopicAttributesRequest.withTopicArn(topicArn); setTopicAttributesRequest.setAttributeName(attribName); setTopicAttributesRequest.setAttributeValue(attribValue);

SDK for Java の詳細については、「AWS SDK for Java の使用開始」を参照してください。

AWS SDK for .NET

以下の .NET の例で示しているのは、Amazon SNS エンドポイントをサブスクライブしたトピックに送信された通知メッセージの配信ステータスに対して、SetTopicAttributes API によりトピックの属性を設定する方法です。この例では、topicArnattribName、および attribValue に文字列値が設定されたことを前提としています。

static String topicArn = "arn:aws:sns:us-east-2:123456789012:MyTopic"; static String attribName = "LambdaSuccessFeedbackRoleArn"; String attribValue = "arn:aws:iam::123456789012:role/SNSSuccessFeedback";
SetTopicAttributesRequest setTopicAttributesRequest = new SetTopicAttributesRequest { TopicArn = topicArn, AttributeName = attribName, AttributeValue = attribValue };

AWS SDK for .NET の詳細については、「AWS SDK for .NET の開始方法」を参照してください。