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

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

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

Amazon SNSは、次の Amazon SNSエンドポイントを持つトピックに送信された通知メッセージの配信ステータスを記録するサポートを提供します。

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

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

  • Amazon Simple Queue Service

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

  • メッセージが 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ロールを定義するために新しいロールの作成 を選択します。

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

  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 Application Attributes for Message Delivery Status の使用」を参照してください。

Amazon SQS

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

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

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

注記

<ENDPOINT>SuccessFeedbackRoleArn および <ENDPOINT>FailureFeedbackRoleArn 属性は、ユーザーに代わって CloudWatch ログを使用するための Amazon SNS書き込みアクセス許可を付与するために使用されます。<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 詳細については、AWS CLI 「 コマンドリファレンスSetTopicAttributes」の「」を参照してください。

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 CloudFormation 「 ユーザーガイド」の「 AWS::SNS::Topicリソースの DeliveryStatusLogging プロパティ」を参照してください。以下は、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