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

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

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

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

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

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

  • Amazon Simple Queue Service

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

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

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

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

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

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

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

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

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

  4. 編集時 MyTopic ページ、配信ステータスのログ記録セクションを展開します。

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

  6. 成功サンプルレート ( CloudWatch ログを受信する成功メッセージの割合) を入力します。

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

    • アカウントから既存のサービスロールを選択するには、「既存のサービスロールを使用する」を選択し、配信の成功と失敗のIAMロールを指定します。

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

      ユーザーに代わって CloudWatch ログを使用するSNSための書き込みアクセスを Amazon に付与するには、 を許可する を選択します。

  8. [Save changes] (変更の保存) をクリックします。

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

を使用した配信ステータスのログ記録の設定 AWS SDKs

は、Amazon AWS SDKsAPIsでメッセージ配信ステータス属性を使用するための複数の言語で提供しますSNS。

トピック属性

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

HTTP

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

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

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

Amazon 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 属性は、ユーザーに代わって ログを使用するためのSNS書き込みアクセスを Amazon CloudWatch に付与するために使用されます。<ENDPOINT>SuccessFeedbackSampleRate 属性は、正常な配信メッセージのサンプルレートの割合 (0〜100) を指定するためのものです。<ENDPOINT>FailureFeedbackRoleArn 属性を設定すると、失敗したメッセージ配信はすべて CloudWatch ログを生成します。

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

以下のコード例は、SetTopicAttributes の使用方法を示しています。

CLI
AWS CLI

トピックの属性を設定するには

次の set-topic-attributes の例では、指定したトピックの DisplayName 属性を設定します。

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \ --attribute-name DisplayName \ --attribute-value MyTopicDisplayName

このコマンドでは何も出力されません。

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

Java
SDK for Java 2.x
注記

については、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.SetTopicAttributesRequest; import software.amazon.awssdk.services.sns.model.SetTopicAttributesResponse; import software.amazon.awssdk.services.sns.model.SnsException; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class SetTopicAttributes { public static void main(String[] args) { final String usage = """ Usage: <attribute> <topicArn> <value> Where: attribute - The attribute action to use. Valid parameters are: Policy | DisplayName | DeliveryPolicy . topicArn - The ARN of the topic.\s value - The value for the attribute. """; if (args.length < 3) { System.out.println(usage); System.exit(1); } String attribute = args[0]; String topicArn = args[1]; String value = args[2]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); setTopAttr(snsClient, attribute, topicArn, value); snsClient.close(); } 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 詳細については、「 リファレンスSetTopicAttributes」の「」を参照してください。 AWS SDK for Java 2.x API

JavaScript
SDK 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; };
Kotlin
SDK 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 詳細については、Kotlin リファレンス SetTopicAttributesの「」の「」を参照してください。 AWS SDK API

PHP
PHP に関する SDK
注記

については、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient; /** * 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 詳細については、「 リファレンスSetTopicAttributes」の「」を参照してください。 AWS SDK for PHP API

Ruby
SDK Ruby 用
注記

については、「」を参照してください GitHub。用例一覧を検索し、AWS コード例リポジトリでの設定と実行の方法を確認してください。

# Service class to enable an SNS resource with a specified policy class SnsResourceEnabler # Initializes the SnsResourceEnabler with an SNS resource client # # @param sns_resource [Aws::SNS::Resource] The SNS resource client def initialize(sns_resource) @sns_resource = sns_resource @logger = Logger.new($stdout) end # Sets a policy on a specified SNS topic # # @param topic_arn [String] The ARN of the SNS topic # @param resource_arn [String] The ARN of the resource to include in the policy # @param policy_name [String] The name of the policy attribute to set def enable_resource(topic_arn, resource_arn, policy_name) policy = generate_policy(topic_arn, resource_arn) topic = @sns_resource.topic(topic_arn) topic.set_attributes({ attribute_name: policy_name, attribute_value: policy }) @logger.info("Policy #{policy_name} set successfully for topic #{topic_arn}.") rescue Aws::SNS::Errors::ServiceError => e @logger.error("Failed to set policy: #{e.message}") end private # Generates a policy string with dynamic resource ARNs # # @param topic_arn [String] The ARN of the SNS topic # @param resource_arn [String] The ARN of the resource # @return [String] The policy as a JSON string def generate_policy(topic_arn, resource_arn) { Version: "2008-10-17", Id: "__default_policy_ID", Statement: [{ Sid: "__default_statement_ID", Effect: "Allow", Principal: { "AWS": "*" }, Action: ["SNS:Publish"], Resource: topic_arn, Condition: { ArnEquals: { "AWS:SourceArn": resource_arn } } }] }.to_json end end # Example usage: if $PROGRAM_NAME == __FILE__ topic_arn = "MY_TOPIC_ARN" # Should be replaced with a real topic ARN resource_arn = "MY_RESOURCE_ARN" # Should be replaced with a real resource ARN policy_name = "POLICY_NAME" # Typically, this is "Policy" sns_resource = Aws::SNS::Resource.new enabler = SnsResourceEnabler.new(sns_resource) enabler.enable_resource(topic_arn, resource_arn, policy_name) end
SAP ABAP
SDK の 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 詳細については、SetTopicAttributes「」のAWS SDKSAPABAPAPI「」を参照してください。

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

DeliveryStatusLogging を使用して を設定するには AWS CloudFormation、 JSONまたは YAML テンプレートを使用して AWS CloudFormation スタックを作成します。詳細については、「 ユーザーガイド」の「 AWS::SNS::Topicリソースの DeliveryStatusLoggingプロパティ AWS CloudFormation 」を参照してください。以下は、Amazon SQSプロトコルのすべてのDeliveryStatusLogging属性を使用して新しいトピックを作成したり、既存のトピックを更新YAMLしたりするための JSONおよび の AWS CloudFormation テンプレートの例です。

JSON
"Resources": { "MySNSTopic" : { "Type" : "AWS::SNS::Topic", "Properties" : { "TopicName" : "TestTopic", "DisplayName" : "TEST", "SignatureVersion" : "2", "DeliveryStatusLogging" : [{ "Protocol": "sqs", "SuccessFeedbackSampleRate": "45", "SuccessFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1", "FailureFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSFailureFeedback_test2" }] } } }
YAML
Resources: MySNSTopic: Type: AWS::SNS::Topic Properties: TopicName:TestTopic DisplayName:TEST SignatureVersion:2 DeliveryStatusLogging: - Protocol: sqs SuccessFeedbackSampleRate: 45 SuccessFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1 FailureFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSFailureFeedback_test2