Amazon SNS トピックを作成する - Amazon Simple Notification Service

Amazon SNS トピックを作成する

Amazon SNS トピックは、通信チャネルとして機能する論理アクセスポイントです。トピックを使用すると、複数のエンドポイント (AWS Lambda、Amazon SQS、HTTP/S、E メールアドレスなど) をグループにまとめることができます。

メッセージプロデューサーシステム (e コマースウェブサイトなど) で当システムのメッセージを必要とする他の複数のサービス (チェックアウトシステムやフルフィルメントシステムなど) にメッセージをブロードキャストするには、プロデューサーシステムのトピックを作成できます。

Amazon SNS で最も一般的な最初のタスクは、トピックの作成です。このページでは、AWS Management Console 、AWS SDK for Java、および AWS SDK for .NET トピックを作成する方法を説明しています。

作成時に、トピックタイプ (標準または FIFO) を選択し、トピックに名前を付けます。トピックを作成したら、トピックのタイプや名前を変更することはできません。その他の設定項目はすべて、トピックの作成時にオプションであり、後で編集できます。

重要

個人を特定できる情報 (PII) などの機密情報や秘匿性の高い情報はトピック名に追加しないでください。トピック名は、CloudWatch Logs を含む他の Amazon Web Services のサービスからアクセスできます。トピック名は、プライベートデータや機密データとして使用することを意図していません。

AWS Management Console を使用してトピックを作成するには

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

  2. 以下のいずれかを実行します:

    • AWS アカウント に作成済みのトピックがない場合は、ホームページで Amazon SNS の説明を読み取ります。

    • AWS アカウント に作成済みのトピックがある場合は、ナビゲーションパネルで [トピック] を選択します。

  3. [トピック] ページで、[トピックの作成] を選択します。

  4. [サブスクリプションの作成] ページで [詳細] セクションで、以下を実行します。

    1. [タイプ] で、トピックタイプ (標準またはFIFO) を選択します。

    2. トピックの名前を入力します。FIFO トピックで、名前の末尾に .fifo を追加します。

    3. (オプション) トピックの表示名を入力します。

    4. (オプション) FIFO トピックで、[コンテンツベースのメッセージ重複排除] を選択して、デフォルトのメッセージの重複排除を有効にします。詳細については、「FIFO トピックのメッセージ重複除外」を参照してください。

  5. (オプション) [暗号化] セクションを展開し、以下の操作を実行します。詳細については、「保管中の暗号化」を参照してください。

    1. [暗号化の有効化] を選択します。

    2. カスタマーマスターキー (CMK) を指定します。詳細については、「重要な用語」を参照してください。

      CMK タイプごとに、[説明]、[アカウント]、および [CMK ARN] が表示されます。

      重要

      CMK の所有者ではない場合、または kms:ListAliases および kms:DescribeKey アクセス権限がないアカウントでログインしている場合、Amazon SNS コンソールで CMK に関する情報は表示できません。

      CMK の所有者に、これらのアクセス権限を付与するよう依頼します。詳細については、『AWS Key Management Service デベロッパーガイド』の「AWS KMS API アクセス権限: アクションとリソースのリファレンス」を参照してください。

      • デフォルトでは、Amazon SNS 用の AWS マネージド CMK (デフォルト) alias/aws/sns が選択されています。

        注記

        以下に留意してください。

        • AWS Management Console を初めて使用してトピックに Amazon SNS 用の AWS マネージド CMKを指定する場合は、AWS KMS は、AWS Amazon SNS 用の マネージド CMK を作成します。

        • または、SSE が有効な状態でトピックで Publish アクションを初めて使用する場合は、AWS KMS は Amazon SNS 用 AWS マネージド CMK を作成します。

      • AWS アカウントからカスタム CMK を使用するには、カスタマーマスターキー (CMK) フィールドを選択しリストからカスタム CMK を選択します。

        注記

        カスタム CMK の作成手順については、『AWS Key Management Service デベロッパーガイド』の「キーの作成」を参照してください。

      • AWS アカウントまたは別の AWS アカウントからカスタム CMK ARN を使用するには、[カスタマーマスターキー (CMK)] フィールドにカスタム CMK ARN を入力します。

  6. (オプション) デフォルトでは、トピックの所有者のみがトピックを発行またはサブスクライブできます。追加のアクセス許可を設定するには、[アクセスポリシー] セクションを展開します。詳細については、「Amazon SNS での Identity and Access Management」および「Amazon SNS アクセスコントロールのケース例」を参照してください。

    注記

    コンソールを使用してトピックを作成すると、デフォルトのポリシーでは aws:SourceOwner 条件キーが使用されます。このキーは aws:SourceAccount に類似しています。

  7. (オプション) 失敗したメッセージ配信試行を Amazon SNS で再試行する方法を設定するには、[配信再試行ポリシー (HTTP/S)] セクションを展開します。詳細については、「Amazon SNS メッセージ配信の再試行」を参照してください。

  8. (オプション) CloudWatch へのメッセージの配信を Amazon SNS でログに記録する方法を設定するには、[配信ステータスのログ記録] セクションを展開します。詳細については、「Amazon SNS メッセージ配信ステータス」を参照してください。

  9. (オプション) トピックにメタデータタグを追加するには、[タグ] セクションを展開し、[キー] と [] (オプション) に入力し、[タグの追加] を選択します。詳細については、「Amazon SNS トピックのタグ付け」を参照してください。

  10. [トピックの作成] を選択します。

    トピックが作成され、[MyTopic] ページが表示されます。

    トピックの名前ARN 、(オプション) 表示名、およびトピックの所有者の AWS アカウント ID が [詳細] セクションに表示されます。

  11. トピック ARN をクリップボードにコピーします。例:

    arn:aws:sns:us-east-2:123456789012:MyTopic

AWS SDK を使用してトピックを作成するには

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

次のコード例は、Amazon SNS トピックを作成する方法を示しています。

.NET
AWS SDK for .NET

/// <summary> /// Creates a new SNS topic using the supplied topic name. /// </summary> /// <param name="client">The initialized SNS client object used to /// create the new topic.</param> /// <param name="topicName">A string representing the topic name.</param> /// <returns>The Amazon Resource Name (ARN) of the created topic.</returns> public static async Task<string> CreateSNSTopicAsync(IAmazonSimpleNotificationService client, string topicName) { var request = new CreateTopicRequest { Name = topicName, }; var response = await client.CreateTopicAsync(request); return response.TopicArn; }
  • 手順とその他のコードについては GitHub でご確認いただけます。

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

C++
SDK for C++

Aws::SDKOptions options; Aws::InitAPI(options); { Aws::String topic_name = argv[1]; Aws::SNS::SNSClient sns; Aws::SNS::Model::CreateTopicRequest ct_req; ct_req.SetName(topic_name); auto ct_out = sns.CreateTopic(ct_req); if (ct_out.IsSuccess()) { std::cout << "Successfully created topic " << topic_name << std::endl; } else { std::cout << "Error creating topic " << topic_name << ":" << ct_out.GetError().GetMessage() << std::endl; } } Aws::ShutdownAPI(options);
  • 手順とその他のコードについては GitHub でご確認いただけます。

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

Go
SDK for Go V2
  • 手順とその他のコードについては、GitHub でご確認いただけます。

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

Java
SDK for Java 2.x

public static String createSNSTopic(SnsClient snsClient, String topicName ) { CreateTopicResponse result = null; try { CreateTopicRequest request = CreateTopicRequest.builder() .name(topicName) .build(); result = snsClient.createTopic(request); return result.topicArn(); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
  • 手順とその他のコードについては GitHub でご確認いただけます。

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

JavaScript
SDK for JavaScript V3

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

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 {CreateTopicCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters const params = { Name: "TOPIC_NAME" }; //TOPIC_NAME const run = async () => { try { const data = await snsClient.send(new CreateTopicCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();
Kotlin
SDK for Kotlin
注記

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

suspend fun createSNSTopic(topicName: String): String { val request = CreateTopicRequest { name = topicName } SnsClient { region = "us-east-1" }.use { snsClient -> val result = snsClient.createTopic(request) return result.topicArn.toString() } }
  • 手順とその他のコードについては GitHub でご確認いただけます。

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

PHP
SDK for PHP

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException; /** * Create a Simple Notification Service topics in your AWS account at the requested region. * * 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' ]); $topicname = 'myTopic'; try { $result = $SnSclient->createTopic([ 'Name' => $topicname, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
  • 手順とその他のコードについては GitHub でご確認いただけます。

  • 詳細については、「AWS SDK for PHP デベロッパーガイド」を参照してください。

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

Python
SDK for Python (Boto3)

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 create_topic(self, name): """ Creates a notification topic. :param name: The name of the topic to create. :return: The newly created topic. """ try: topic = self.sns_resource.create_topic(Name=name) logger.info("Created topic %s with ARN %s.", name, topic.arn) except ClientError: logger.exception("Couldn't create topic %s.", name) raise else: return topic
  • 手順とその他のコードについては GitHub でご確認いただけます。

  • API の詳細については、AWSSDK for Python (Boto3) API リファレンスの「CreateTopic」を参照してください。

Ruby
SDK for Ruby

require 'aws-sdk-sns' # v2: require 'aws-sdk' def topic_created?(sns_client, topic_name) sns_client.create_topic(name: topic_name) rescue StandardError => e puts "Error while creating the topic named '#{topic_name}': #{e.message}" end # Full example call: def run_me topic_name = 'TOPIC_NAME' region = 'REGION' sns_client = Aws::SNS::Client.new(region: region) puts "Creating the topic '#{topic_name}'..." if topic_created?(sns_client, topic_name) puts 'The topic was created.' else puts 'The topic was not created. Stopping program.' exit 1 end end run_me if $PROGRAM_NAME == __FILE__
  • 手順とその他のコードについては、GitHub でご確認いただけます。

  • 詳細については、「AWS SDK for Ruby デベロッパーガイド」を参照してください。

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

Rust
SDK for Rust
注記

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

async fn make_topic(client: &Client, topic_name: &str) -> Result<(), Error> { let resp = client.create_topic().name(topic_name).send().await?; println!( "Created topic with ARN: {}", resp.topic_arn().unwrap_or_default() ); Ok(()) }
  • 手順とその他のコードについては GitHub でご確認いただけます。

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