Amazon SNS メッセージの発行 - Amazon Simple Notification Service

Amazon SNS メッセージの発行

Amazon SNS トピックを作成して、このトピックにエンドポイントをサブスクライブしたら、トピックにメッセージを発行できます。メッセージが公開されると、Amazon SNS はサブスクライブされたエンドポイントにメッセージを配信しようとします。

AWS Management Console を使用してAmazon SNS トピックにメッセージを発行するには

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

  2. 左のナビゲーションペインで、[トピック] を選択します。

  3. [トピック] ページで、トピックを選択し、[メッセージの発行] を選択します。

    コンソールが [トピックにメッセージを発行] ページを開きます。

  4. [メッセージ詳細] セクションで、次の操作を行います。

    1. (オプション) メッセージの件名を入力します。

    2. FIFO トピックは、メッセージグループ ID を入力します。同じメッセージグループ内のメッセージは、発行された順序で配信されます。

    3. FIFO トピックは、メッセージ重複排除 ID を入力します。トピックの[コンテンツベースのメッセージ重複除外] 設定を有効にしていれば、この ID は任意です。

    4. (オプション) モバイルプッシュ通知に、有効期限 (TTL) 値を秒単位で入力します。この属性で、Apple Push Notification Service (APNs) や Firebase Cloud Messaging (FCM) などのプッシュ通知サービスによってエンドポイントにメッセージが配信される時間を指定できます。

  5. [メッセージ本文] セクションで、以下のいずれかの操作を行います。

    1. [すべての配信プロトコルに同一のペイロード] を選択し、メッセージを入力します。

    2. [各配信プロトコルのカスタムペイロード] を選択し、JSON オブジェクトを入力し、各プロトコルに送信するメッセージを定義します。

      詳細については、「プラットフォーム固有のペイロードで発行する」を参照してください。

  6. [メッセージの属性] セクションで、属性を追加します。Amazon SNS は、追加された属性とサブスクリプション属性 FilterPolicy をマッチングし、サブスクライブされたエンドポイントが、発行されたメッセージに関心があるかどうかを判断します。

    1. タイプでは、String.Array などの属性タイプを選択します。

      注記

      属性のタイプが String.Array である場合は、配列を角括弧 ([]) で囲みます。配列内で、値の文字列を二重引用符で囲みます。数字またはキーワード truefalsenull を引用符で囲む必要はありません。

    2. customer_interests などの属性の名前を入力します。

    3. ["soccer", "rugby", "hockey"] などの属性のを入力します。

    属性のタイプは StringString.Array、または Number であり、Amazon SNS はそのサブスクリプションにメッセージを送信する前に、存在する場合は、サブスクリプションフィルターポリシーに対してメッセージ属性を評価します。

    詳細については、「Amazon SNS メッセージ属性」を参照してください。

  7. [メッセージの発行] を選択します。

    トピックにメッセージが発行され、コンソールがトピックの [詳細] ページを開きます。

AWS SDK を使用してトピックにメッセージを発行するには

AWS SDK を使用するには、認証情報を使用して設定する必要があります。詳細については、『AWS SDK とツールのリファレンスガイド』の「共有設定ファイルと認証情報ファイル」を参照してください。

次のコード例は、Amazon SNS トピックにメッセージを発行する方法を示しています。

.NET
AWS SDK for .NET
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

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

C++
SDK for C++
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

Aws::SDKOptions options; Aws::InitAPI(options); { Aws::SNS::SNSClient sns; Aws::String message = argv[1]; Aws::String topic_arn = argv[2]; Aws::SNS::Model::PublishRequest psms_req; psms_req.SetMessage(message); psms_req.SetTopicArn(topic_arn); auto psms_out = sns.Publish(psms_req); if (psms_out.IsSuccess()) { std::cout << "Message published successfully " << std::endl; } else { std::cout << "Error while publishing message " << psms_out.GetError().GetMessage() << std::endl; } } Aws::ShutdownAPI(options);
  • API の詳細については、AWS SDK for C++API リファレンスの「発行」を参照してください。

Go
SDK for Go V2
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

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

Java
SDK for Java 2.x
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

public static void pubTopic(SnsClient snsClient, String message, String topicArn) { try { PublishRequest request = PublishRequest.builder() .message(message) .topicArn(topicArn) .build(); PublishResponse result = snsClient.publish(request); System.out.println(result.messageId() + " Message sent. Status is " + result.sdkHttpResponse().statusCode()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
  • API の詳細については、AWS SDK for Java 2.xAPI リファレンスの「発行」を参照してください。

JavaScript
SDK for JavaScript V3
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

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

import { SNSClient } from "@aws-sdk/client-sns"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SNS service object. const snsClient = new SNSClient({ region: REGION }); export { snsClient };

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

// Import required AWS SDK clients and commands for Node.js import {PublishCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters var params = { Message: "MESSAGE_TEXT", // MESSAGE_TEXT TopicArn: "TOPIC_ARN", //TOPIC_ARN }; const run = async () => { try { const data = await snsClient.send(new PublishCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();
  • 詳細については、AWS SDK for JavaScript デベロッパーガイドを参照してください。

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

Kotlin
SDK for Kotlin
注記

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

ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

suspend fun pubTopic(topicArnVal: String, messageVal: String) { val request = PublishRequest { message = messageVal topicArn = topicArnVal } SnsClient { region = "us-east-1" }.use { snsClient -> val result = snsClient.publish(request) println("${result.messageId} message sent.") } }
  • API の詳細については、AWS SDK for Kotlin API リファレンスの「Publish」を参照してください。

PHP
SDK for PHP
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException; /** * Sends a message to 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' ]); $message = 'This message is sent from a Amazon SNS code sample.'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->publish([ 'Message' => $message, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
  • 詳細については、AWS SDK for PHP デベロッパーガイドを参照してください。

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

Python
SDK for Python (Boto3)
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

サブスクリプションが属性に基づいてフィルター処理できるように、属性を含むメッセージを発行します。

class SnsWrapper: """Encapsulates Amazon SNS topic and subscription functions.""" def __init__(self, sns_resource): """ :param sns_resource: A Boto3 Amazon SNS resource. """ self.sns_resource = sns_resource def publish_message(topic, message, attributes): """ Publishes a message, with attributes, to a topic. Subscriptions can be filtered based on message attributes so that a subscription receives messages only when specified attributes are present. :param topic: The topic to publish to. :param message: The message to publish. :param attributes: The key-value attributes to attach to the message. Values must be either `str` or `bytes`. :return: The ID of the message. """ try: att_dict = {} for key, value in attributes.items(): if isinstance(value, str): att_dict[key] = {'DataType': 'String', 'StringValue': value} elif isinstance(value, bytes): att_dict[key] = {'DataType': 'Binary', 'BinaryValue': value} response = topic.publish(Message=message, MessageAttributes=att_dict) message_id = response['MessageId'] logger.info( "Published message with attributes %s to topic %s.", attributes, topic.arn) except ClientError: logger.exception("Couldn't publish message to topic %s.", topic.arn) raise else: return message_id

受信者のプロトコルに基づいて異なる形式のメッセージを発行します。

class SnsWrapper: """Encapsulates Amazon SNS topic and subscription functions.""" def __init__(self, sns_resource): """ :param sns_resource: A Boto3 Amazon SNS resource. """ self.sns_resource = sns_resource def publish_multi_message( topic, subject, default_message, sms_message, email_message): """ Publishes a multi-format message to a topic. A multi-format message takes different forms based on the protocol of the subscriber. For example, an SMS subscriber might receive a short, text-only version of the message while an email subscriber could receive an HTML version of the message. :param topic: The topic to publish to. :param subject: The subject of the message. :param default_message: The default version of the message. This version is sent to subscribers that have protocols that are not otherwise specified in the structured message. :param sms_message: The version of the message sent to SMS subscribers. :param email_message: The version of the message sent to email subscribers. :return: The ID of the message. """ try: message = { 'default': default_message, 'sms': sms_message, 'email': email_message } response = topic.publish( Message=json.dumps(message), Subject=subject, MessageStructure='json') message_id = response['MessageId'] logger.info("Published multi-format message to topic %s.", topic.arn) except ClientError: logger.exception("Couldn't publish message to topic %s.", topic.arn) raise else: return message_id
  • API の詳細については、AWSSDK for Python (Boto3) API リファレンスの「発行」を参照してください。

Ruby
SDK for Ruby
ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

require 'aws-sdk-sns' # v2: require 'aws-sdk' def message_sent?(sns_client, topic_arn, message) sns_client.publish(topic_arn: topic_arn, message: message) rescue StandardError => e puts "Error while sending the message: #{e.message}" end def run_me topic_arn = 'SNS_TOPIC_ARN' region = 'REGION' message = 'MESSAGE' # The text of the message to send. sns_client = Aws::SNS::Client.new(region: region) puts "Message sending." if message_sent?(sns_client, topic_arn, message) puts 'The message was sent.' else puts 'The message was not sent. Stopping program.' exit 1 end end run_me if $PROGRAM_NAME == __FILE__
  • 詳細については、AWS SDK for Ruby デベロッパーガイドを参照してください。

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

Rust
SDK for Rust
注記

これはプレビューリリースの SDK に関するドキュメントです。SDK は変更される場合があり、本稼働環境では使用しないでください。

ヒント

この例を設定および実行する方法については、「GitHub」を参照してください。

async fn subscribe_and_publish( client: &Client, topic_arn: &str, email_address: &str, ) -> Result<(), Error> { println!("Receiving on topic with ARN: `{}`", topic_arn); let rsp = client .subscribe() .topic_arn(topic_arn) .protocol("email") .endpoint(email_address) .send() .await?; println!("Added a subscription: {:?}", rsp); let rsp = client .publish() .topic_arn(topic_arn) .message("hello sns!") .send() .await?; println!("Published message: {:?}", rsp); Ok(()) }
  • API の詳細については、AWS SDK for Rust API リファレンスの「発行」を参照してください。