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 ログを含む他の Amazon Web Services からアクセスできます。トピック名は、プライベートデータや機密データとして使用することを意図していません。

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

Amazon でトピックを作成すると、メッセージディストリビューションの基盤SNSが確立され、複数のサブスクライバーにファンニングできるメッセージを公開できます。このステップは、トピックのタイプ、暗号化設定、アクセスポリシーを設定し、トピックが組織のセキュリティ、コンプライアンス、運用要件を満たしていることを確認するために不可欠です。

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

  2. 次のいずれかを行います。

    • AWS アカウント 以前に でトピックを作成したことがない場合は、SNSホームページの Amazon の説明をお読みください。

    • AWS アカウント 以前に のナビゲーションパネルでトピックが作成されている場合は、トピック を選択します。

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

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

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

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

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

      重要

      E メールエンドポイントをサブスクライブする場合、Amazon SNSトピックの表示名と送信先の E メールアドレス (no-reply@sns.amazonaws.com など) の合計文字数は 320 UTF~ 8 文字を超えることはできません。Amazon SNSトピックの表示名を設定する前に、サードパーティーのエンコーディングツールを使用して送信アドレスの長さを確認できます。

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

  5. (オプション) [暗号化] セクションを展開し、以下の操作を実行します。詳細については、「サーバー側の暗号化による Amazon SNSデータの保護」を参照してください。

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

    2. AWS KMS キーを指定します。詳細については、「重要な用語」を参照してください。

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

      重要

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

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

      • Amazon KMSの AWS 管理 SNS (デフォルト) alias/aws/sns がデフォルトで選択されています。

        注記

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

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

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

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

        注記

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

      • AWS アカウントまたは別の AWS アカウントKMSARNからカスタムを使用するには、KMSキーフィールドにカスタムを入力します。

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

    注記

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

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

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

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

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

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

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

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

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

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

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

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

.NET
AWS SDK for .NET
注記

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

トピックを作成して、個別の名前を付けます。

using System; using System.Threading.Tasks; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; /// <summary> /// This example shows how to use Amazon Simple Notification Service /// (Amazon SNS) to add a new Amazon SNS topic. /// </summary> public class CreateSNSTopic { public static async Task Main() { string topicName = "ExampleSNSTopic"; IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient(); var topicArn = await CreateSNSTopicAsync(client, topicName); Console.WriteLine($"New topic ARN: {topicArn}"); } /// <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; } }

名前と特定の重複FIFO排除属性を使用して新しいトピックを作成します。

/// <summary> /// Create a new topic with a name and specific FIFO and de-duplication attributes. /// </summary> /// <param name="topicName">The name for the topic.</param> /// <param name="useFifoTopic">True to use a FIFO topic.</param> /// <param name="useContentBasedDeduplication">True to use content-based de-duplication.</param> /// <returns>The ARN of the new topic.</returns> public async Task<string> CreateTopicWithName(string topicName, bool useFifoTopic, bool useContentBasedDeduplication) { var createTopicRequest = new CreateTopicRequest() { Name = topicName, }; if (useFifoTopic) { // Update the name if it is not correct for a FIFO topic. if (!topicName.EndsWith(".fifo")) { createTopicRequest.Name = topicName + ".fifo"; } // Add the attributes from the method parameters. createTopicRequest.Attributes = new Dictionary<string, string> { { "FifoTopic", "true" } }; if (useContentBasedDeduplication) { createTopicRequest.Attributes.Add("ContentBasedDeduplication", "true"); } } var createResponse = await _amazonSNSClient.CreateTopicAsync(createTopicRequest); return createResponse.TopicArn; }
  • API 詳細については、 リファレンスCreateTopicの「」を参照してください。 AWS SDK for .NET API

C++
SDK C++ 用
注記

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

//! Create an Amazon Simple Notification Service (Amazon SNS) topic. /*! \param topicName: An Amazon SNS topic name. \param topicARNResult: String to return the Amazon Resource Name (ARN) for the topic. \param clientConfiguration: AWS client configuration. \return bool: Function succeeded. */ bool AwsDoc::SNS::createTopic(const Aws::String &topicName, Aws::String &topicARNResult, const Aws::Client::ClientConfiguration &clientConfiguration) { Aws::SNS::SNSClient snsClient(clientConfiguration); Aws::SNS::Model::CreateTopicRequest request; request.SetName(topicName); const Aws::SNS::Model::CreateTopicOutcome outcome = snsClient.CreateTopic(request); if (outcome.IsSuccess()) { topicARNResult = outcome.GetResult().GetTopicArn(); std::cout << "Successfully created an Amazon SNS topic " << topicName << " with topic ARN '" << topicARNResult << "'." << std::endl; } else { std::cerr << "Error creating topic " << topicName << ":" << outcome.GetError().GetMessage() << std::endl; topicARNResult.clear(); } return outcome.IsSuccess(); }
  • API 詳細については、 リファレンスCreateTopicの「」を参照してください。 AWS SDK for C++ API

CLI
AWS CLI

トピック SNS を作成するには

次のcreate-topic例では、 という名前のSNSトピックを作成しますmy-topic

aws sns create-topic \ --name my-topic

出力:

{ "ResponseMetadata": { "RequestId": "1469e8d7-1642-564e-b85d-a19b4b341f83" }, "TopicArn": "arn:aws:sns:us-west-2:123456789012:my-topic" }

詳細については、AWS 「 コマンドラインインターフェイスユーザーガイド」の「Amazon SQSおよび Amazon でのSNSコマンドラインインターフェイスの使用」を参照してください。 AWS

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

Go
SDK Go V2 用
注記

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

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions // used in the examples. type SnsActions struct { SnsClient *sns.Client } // CreateTopic creates an Amazon SNS topic with the specified name. You can optionally // specify that the topic is created as a FIFO topic and whether it uses content-based // deduplication instead of ID-based deduplication. func (actor SnsActions) CreateTopic(ctx context.Context, topicName string, isFifoTopic bool, contentBasedDeduplication bool) (string, error) { var topicArn string topicAttributes := map[string]string{} if isFifoTopic { topicAttributes["FifoTopic"] = "true" } if contentBasedDeduplication { topicAttributes["ContentBasedDeduplication"] = "true" } topic, err := actor.SnsClient.CreateTopic(ctx, &sns.CreateTopicInput{ Name: aws.String(topicName), Attributes: topicAttributes, }) if err != nil { log.Printf("Couldn't create topic %v. Here's why: %v\n", topicName, err) } else { topicArn = *topic.TopicArn } return topicArn, err }
  • API 詳細については、 リファレンスCreateTopicの「」を参照してください。 AWS SDK for Go API

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.CreateTopicRequest; import software.amazon.awssdk.services.sns.model.CreateTopicResponse; 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 CreateTopic { public static void main(String[] args) { final String usage = """ Usage: <topicName> Where: topicName - The name of the topic to create (for example, mytopic). """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String topicName = args[0]; System.out.println("Creating a topic with name: " + topicName); SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); String arnVal = createSNSTopic(snsClient, topicName); System.out.println("The topic ARN is" + arnVal); snsClient.close(); } public static String createSNSTopic(SnsClient snsClient, String topicName) { CreateTopicResponse result; 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 ""; } }
  • API 詳細については、 リファレンスCreateTopicの「」を参照してください。 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 { CreateTopicCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; /** * @param {string} topicName - The name of the topic to create. */ export const createTopic = async (topicName = "TOPIC_NAME") => { const response = await snsClient.send( new CreateTopicCommand({ Name: topicName }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '087b8ad2-4593-50c4-a496-d7e90b82cf3e', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // TopicArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:TOPIC_NAME' // } return response; };
Kotlin
SDK Kotlin の場合
注記

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

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

PHP
PHP に関する SDK
注記

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

require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient; /** * 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()); }
Python
SDK Python 用 (Boto3)
注記

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

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
  • API 詳細については、「 CreateTopicPython (Boto3) リファレンス」の「」を参照してください。 AWS SDK API

Ruby
SDK Ruby の場合
注記

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

# This class demonstrates how to create an Amazon Simple Notification Service (SNS) topic. class SNSTopicCreator # Initializes an SNS client. # # Utilizes the default AWS configuration for region and credentials. def initialize @sns_client = Aws::SNS::Client.new end # Attempts to create an SNS topic with the specified name. # # @param topic_name [String] The name of the SNS topic to create. # @return [Boolean] true if the topic was successfully created, false otherwise. def create_topic(topic_name) @sns_client.create_topic(name: topic_name) puts "The topic '#{topic_name}' was successfully created." true rescue Aws::SNS::Errors::ServiceError => e # Handles SNS service errors gracefully. puts "Error while creating the topic named '#{topic_name}': #{e.message}" false end end # Example usage: if $PROGRAM_NAME == __FILE__ topic_name = 'YourTopicName' # Replace with your topic name sns_topic_creator = SNSTopicCreator.new puts "Creating the topic '#{topic_name}'..." unless sns_topic_creator.create_topic(topic_name) puts 'The topic was not created. Stopping program.' exit 1 end end
Rust
SDK Rust の場合
注記

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

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

SAP ABAP
SDK の SAP ABAP
注記

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

TRY. oo_result = lo_sns->createtopic( iv_name = iv_topic_name ). " oo_result is returned for testing purposes. " MESSAGE 'SNS topic created' TYPE 'I'. CATCH /aws1/cx_snstopiclimitexcdex. MESSAGE 'Unable to create more topics. You have reached the maximum number of topics allowed.' TYPE 'E'. ENDTRY.
  • API 詳細については、CreateTopic「」のAWS SDKSAPABAPAPI「」を参照してください。