创建亚马逊SNS主题 - Amazon Simple Notification Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建亚马逊SNS主题

Amazon SNS 主题是充当通信渠道的逻辑接入点。主题允许您对多个终端节点(例如 Amazon AWS Lambda SQS、HTTP /S 或电子邮件地址)进行分组。

要广播使用需要其消息的多个其他服务(例如,结算和执行系统)的消息创建器系统(例如,电子商务网站)的消息,您可以为创建器系统创建主题。

Amazon 的第一个也是最常见的SNS任务是创建主题。本页显示如何使用 AWS Management Console AWS SDK for Java、和 AWS SDK for .NET ,创建主题。

在创建过程中,您可以选择主题类型(标准或FIFO)并命名该主题。创建主题后,无法更改主题类型或名称。在创建主题期间,所有其他配置选项都是可选的,您可以稍后对其进行编辑。

重要

请勿在主题名称中添加个人身份信息 (PII) 或其他机密或敏感信息。其他 Amazon Web Services 可以访问主题名称,包括 CloudWatch 日志。主题名称不适合用于私有或敏感数据。

要使用创建主题 AWS Management Console

  1. 登录 Amazon SNS 控制台

  2. 请执行以下操作之一:

    • 如果 AWS 账户 之前未在您下创建过任何主题,请阅读主页SNS上的 Amazon 描述。

    • 如果 AWS 账户 之前已在您的下方创建过主题,请在导航面板上选择主题

  3. Topics(主页)页面上,选择 Create topic(创建主题)。

  4. Create topic(创建主题)页面上,在 Details(详细信息)部分中,执行以下操作:

    1. 在 “类型” 中,选择主题类型(标准FIFO)。

    2. 输入主题的名称。对于FIFO主题,请在名称末尾添加 .fifo

    3. (可选)输入主题的显示名称

      重要

      订阅电子邮件终端节点时,亚马逊SNS主题显示名称和发送电子邮件地址(例如 no-reply@sns.amazonaws.com)的组合字符数不得超过 320 UTF -8 个字符。在为 Amazon SNS 主题配置显示名称之前,您可以使用第三方编码工具来验证发送地址的长度。

    4. (可选)对于FIFO主题,您可以选择基于内容的消息重复数据删除来启用默认的消息重复数据删除。有关更多信息,请参阅 针对FIFO主题的 Amazon SNS 消息重复数据删除

  5. (可选)展开加密部分并执行以下操作。有关更多信息,请参阅 使用服务器端加密保护 Amazon SNS 数据

    1. 选择 Enable encryption(启用加密)

    2. 指定密 AWS KMS 钥。有关更多信息,请参阅 关键术语

      对于每KMS种类型,都会显示描述账户KMSARN和。

      重要

      如果您不是的所有者KMS,或者您使用不具有kms:ListAliaseskms:DescribeKey权限的账户登录,则将无法在 Amazon SNS 控制台KMS上查看相关信息。

      要求的所有者授KMS予您这些权限。有关更多信息,请参阅《AWS Key Management Service 开发者指南》中的 “AWS KMS API权限:操作和资源参考”。

      • 默认选择亚马逊 AWS 托管 KMSSNS(默认)别名/aws/sns

        注意

        记住以下内容:

        • 首次使用KMS为主题指定亚马逊 AWS 托管时, AWS KMS 会创建SNSKMS适用于亚马逊的 AWS 托管SNS。 AWS Management Console

        • 或者,在您首次对SSE启用状态的主题使用Publish操作时, AWS KMS 会创建KMS适用于 Amazon 的 AWS 托管SNS。

      • 要使用 AWS 账户KMS中的自定义项,请选择KMS关键字段,然后KMS从列表中选择自定义字段。

        注意

        有关创建自定义密钥的说明KMSs,请参阅《AWS Key Management Service 开发者指南》中的创建密钥

      • 要使用您 AWS 账户或其他账户KMSARN中的自定义设置,请在KMS密钥字段中输入该自定义项。 AWS

  6. (可选)默认情况下,只有主题拥有者才能发布或订阅主题。要配置其他访问权限,请展开访问策略部分。有关更多信息,请参阅Amazon 中的身份和访问管理 SNSAmazon SNS 访问控制的示例案例

    注意

    使用控制台创建主题时,默认策略使用 aws:SourceOwner 条件键。此密钥类似于 aws:SourceAccount

  7. (可选)要配置 Amazon 如何SNS重试失败的消息传送尝试,请展开传送重试策略 (HTTP/S) 部分。有关更多信息,请参阅 Amazon SNS 消息传送重试次数

  8. (可选)要配置 Amazon 如何SNS记录向其发送的消息 CloudWatch,请展开 “传送状态记录” 部分。有关更多信息,请参阅 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 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详细信息,请参阅 “AWS SDK for .NET API参考 CreateTopic” 中的。

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详细信息,请参阅 “AWS SDK for C++ API参考 CreateTopic” 中的。

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 命令行界面用户指南》SNS中的在 Amazon SQS 和 Amazon 上使用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(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(context.TODO(), &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详细信息,请参阅 “AWS SDK for Go API参考 CreateTopic” 中的。

Java
SDK适用于 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详细信息,请参阅 “AWS SDK for Java 2.x API参考 CreateTopic” 中的。

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详细信息,请参阅CreateTopic中的 Kotlin AWS SDK API 参考

PHP
SDK for PHP
注意

还有更多相关信息 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详细信息,请参阅CreateTopic中的 AWS SDKPython (Boto3) 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详细信息,请参见CreateTopic中的 Rust AWS SDK API 参考

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 SDK以供SAPABAPAPI参考