Amazon SNS メッセージ配信ステータス - Amazon Simple Notification Service

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

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

  • HTTP

  • Amazon Kinesis Data Firehose

  • AWS Lambda

  • プラットフォームアプリケーションエンドポイント

  • Amazon Simple Queue Service

メッセージの配信ステータスの属性を設定した後、トピックの受信者に送信されたメッセージのためにログエントリが CloudWatch Logs に送信されます。メッセージの配信ステータスを記録すると、以下のようにオペレーションをより把握することに役立ちます。

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

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

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

メッセージの配信ステータスのトピック属性を設定するには、AWS Management Console、AWS ソフトウェア開発キット (SDK)、またはクエリ API を使用できます。

AWS Management Console を使用した配信ステータスのログ記録を設定する

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

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

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

  4. [Edit MyTopic] ページで、[Delivery status logging] セクションを展開します。

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

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

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

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

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

      [許可] を選択して、お客様に代わって CloudWatch Logs を使用する書き込みアクセス権を Amazon SNS に付与します。

  8. [変更を保存] をクリックします。

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

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

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

トピック属性

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

HTTP

  • HTTPSuccessFeedbackRoleArn — HTTP エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が成功したことを示します。

  • HTTPSuccessFeedbackSampleRate — HTTP エンドポイントにサブスクライブされている Amazon SNS トピックについてサンプリングする、成功したメッセージの割合を示します。

  • HTTPFailureFeedbackRoleArn — HTTP エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が失敗したことを示します。

Amazon Kinesis Data Firehose

  • FirehoseSuccessFeedbackRoleArn — Amazon Kinesis Data Firehose エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が成功したことを示します。

  • FirehoseSuccessFeedbackSampleRate — Amazon Kinesis Data Firehose エンドポイントにサブスクライブされている Amazon SNS トピックについてサンプリングする、成功したメッセージの割合を示します。

  • FirehoseFailureFeedbackRoleArn — Amazon Kinesis Data Firehose エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が失敗したことを示します。

AWS Lambda

  • LambdaSuccessFeedbackRoleArn — Lambda エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が成功したことを示します。

  • LambdaSuccessFeedbackSampleRate — Lambda エンドポイントにサブスクライブされている Amazon SNS トピックについてサンプリングする、成功したメッセージの割合を示します。

  • LambdaFailureFeedbackRoleArn — Lambda エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が失敗したことを示します。

プラットフォームアプリケーションエンドポイント

  • ApplicationSuccessFeedbackRoleArn — AWS アプリケーションエンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が成功したことを示します。

  • ApplicationSuccessFeedbackSampleRate — AWS アプリケーションエンドポイントにサブスクライブされている Amazon SNS トピックについてサンプリングする、成功したメッセージの割合を示します。

  • ApplicationFailureFeedbackRoleArn — AWS アプリケーションエンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が失敗したことを示します。

    注記

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

Amazon SQS

  • SQSSuccessFeedbackRoleArn — Amazon SQS エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が成功したことを示します。

  • SQSSuccessFeedbackSampleRate — Amazon SQS エンドポイントにサブスクライブされている Amazon SNS トピックについてサンプリングする、成功したメッセージの割合を示します。

  • SQSFailureFeedbackRoleArn — Amazon SQS エンドポイントにサブスクライブされている Amazon SNS トピックのメッセージ配信が失敗したことを示します。

注記

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

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

以下のコード例は、Amazon SNS トピック属性を設定する方法を示しています。

Java
SDK for Java 2.x
注記

GitHub には、その他のリソースもあります。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

public static void setTopAttr(SnsClient snsClient, String attribute, String topicArn, String value) { try { SetTopicAttributesRequest request = SetTopicAttributesRequest.builder() .attributeName(attribute) .attributeValue(value) .topicArn(topicArn) .build(); SetTopicAttributesResponse result = snsClient.setTopicAttributes(request); System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode() + "\n\nTopic " + request.topicArn() + " updated " + request.attributeName() + " to " + request.attributeValue()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
  • API の詳細については、AWS SDK for Java 2.x API リファレンスの「SetTopicAttributes」を参照してください。

JavaScript
SDK for JavaScript (v3)
注記

GitHub には、その他のリソースもあります。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

別のモジュールでクライアントを作成し、エクスポートします。

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

SDK モジュールとクライアントモジュールをインポートし、API を呼び出します。

import { SetTopicAttributesCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; export const setTopicAttributes = async ( topicArn = "TOPIC_ARN", attributeName = "DisplayName", attributeValue = "Test Topic" ) => { const response = await snsClient.send( new SetTopicAttributesCommand({ AttributeName: attributeName, AttributeValue: attributeValue, TopicArn: topicArn, }) ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: 'd1b08d0e-e9a4-54c3-b8b1-d03238d2b935', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // } // } return response; };
  • 詳細については、AWS SDK for JavaScript デベロッパーガイドを参照してください。

  • API の詳細については、AWS SDK for JavaScript API リファレンスの「SetTopicAttributes」を参照してください。

Kotlin
SDK for Kotlin
注記

これはプレビューリリースの機能に関するプレリリースドキュメントです。このドキュメントは変更される可能性があります。

注記

GitHub には、その他のリソースもあります。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

suspend fun setTopAttr(attribute: String?, topicArnVal: String?, value: String?) { val request = SetTopicAttributesRequest { attributeName = attribute attributeValue = value topicArn = topicArnVal } SnsClient { region = "us-east-1" }.use { snsClient -> snsClient.setTopicAttributes(request) println("Topic ${request.topicArn} was updated.") } }
  • API の詳細については、AWS SDK for Kotlin API リファレンスの「SetTopicAttributes」を参照してください。

PHP
SDK for PHP
注記

GitHub には、その他のリソースもあります。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException; /** * Configure the message delivery status attributes for an Amazon SNS Topic. * * This code expects that you have AWS credentials set up per: * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html */ $SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $attribute = 'Policy | DisplayName | DeliveryPolicy'; $value = 'First Topic'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->setTopicAttributes([ 'AttributeName' => $attribute, 'AttributeValue' => $value, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
  • API の詳細については、AWS SDK for PHP API リファレンスの「SetTopicAttributes」を参照してください。

Ruby
SDK for Ruby
注記

GitHub には、その他のリソースもあります。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

require "aws-sdk-sns" # v2: require 'aws-sdk' policy = '{ "Version":"2008-10-17", "Id":"__default_policy_ID", "Statement":[{ "Sid":"__default_statement_ID", "Effect":"Allow", "Principal":{ "AWS":"*" }, "Action":["SNS:Publish"], "Resource":"' + MY_TOPIC_ARN + '", "Condition":{ "ArnEquals":{ "AWS:SourceArn":"' + MY_RESOURCE_ARN + '"} } }] }' # Replace us-west-2 with the AWS Region you're using for Amazon SNS. sns = Aws::SNS::Resource.new(region: "REGION") # Get topic by ARN topic = sns.topic() # Add policy to topic topic.set_attributes({ attribute_name: "POLICY_NAME", attribute_value: policy })
  • 詳細については、AWS SDK for Ruby デベロッパーガイドを参照してください。

  • API の詳細については、AWS SDK for Ruby API リファレンスの「SetTopicAttributes」を参照してください。

SAP ABAP
SDK for SAP ABAP
注記

GitHub には、その他のリソースもあります。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

TRY. lo_sns->settopicattributes( iv_topicarn = iv_topic_arn iv_attributename = iv_attribute_name iv_attributevalue = iv_attribute_value ). MESSAGE 'Set/updated SNS topic attributes.' TYPE 'I'. CATCH /aws1/cx_snsnotfoundexception. MESSAGE 'Topic does not exist.' TYPE 'E'. ENDTRY.
  • API の詳細については、AWS SDK for SAP ABAP API リファレンスの「SetTopicAttributes」を参照してください。