本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SNS 主题是一个逻辑访问点,可充当通信通道。主题允许您对多个终端节点(例如 Amazon SQS AWS Lambda、HTTP/S 或电子邮件地址)进行分组。
要广播使用需要其消息的多个其他服务(例如,结算和执行系统)的消息创建器系统(例如,电子商务网站)的消息,您可以为创建器系统创建主题。
第一个也是最常见的 Amazon SNS 任务是创建主题。本页显示了如何使用 AWS Management Console AWS SDK for Java、和, AWS SDK for .NET 来创建主题。
在创建过程中,您可以选择主题类型(标准或 FIFO)并命名主题。创建主题后,无法更改主题类型或名称。在创建主题期间,所有其他配置选项都是可选的,您可以稍后对其进行编辑。
重要
请勿在主题名称中添加个人身份信息 (PII) 或其他机密或敏感信息。其他 Amazon Web Services 可以访问主题名称,包括 CloudWatch 日志。主题名称不适合用于私有或敏感数据。
要使用创建主题 AWS Management Console
在 Amazon SNS 中创建主题为消息分发奠定了基础,使您能够发布可以扇出给多个订阅用户的消息。此步骤对于配置主题的类型、加密设置和访问策略至关重要,可确保主题符合组织的安全、合规性和运营要求。
登录 Amazon SNS 控制台
。 -
请执行以下操作之一:
-
如果 AWS 账户 之前未在您的主题下创建过任何主题,请阅读主页上对 Amazon SNS 的描述。
-
如果 AWS 账户 之前已在您的下方创建过主题,请在导航面板上选择主题。
-
-
在 Topics(主页)页面上,选择 Create topic(创建主题)。
-
在 Create topic(创建主题)页面上,在 Details(详细信息)部分中,执行以下操作:
-
对于 Type(类型),选择主题类型(标准或者FIFO)。
-
输入主题的名称。对于 FIFO 主题,将 .fifo 添加到名称的末尾。
-
(可选)输入主题的显示名称。
重要
订阅电子邮件端点时,Amazon SNS 主题显示名称和发送电子邮件地址(例如 no-reply@sns.amazonaws.com)的组合字符计数不得超过 320 个 UTF-8 字符。在为 Amazon SNS 主题配置显示名称之前,您可以使用第三方编码工具验证发送地址的长度。
-
(可选)对于 FIFO 主题,您可以选择基于内容的消息重复数据删除以启用默认的消息重复数据删除。有关更多信息,请参阅 FIFO 主题的 Amazon SNS 消息重复数据删除。
-
-
(可选)展开加密部分并执行以下操作。有关更多信息,请参阅 使用服务器端加密保护 Amazon SNS 数据安全。
-
选择启用加密。
-
指定密 AWS KMS 钥。有关更多信息,请参阅 关键术语。
对于每个 KMS 类型,都会显示 Description(描述)、Account(账户)和 KMS ARN。
重要
如果您不是 KMS 的拥有者,或者您登录的账户没有
kms:ListAliases
和kms:DescribeKey
权限,则无法在 Amazon SNS 控制台上查看有关 KMS 的信息。要求 KMS 的拥有者授予您这些权限。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS KMS API 权限:操作和资源参考。
-
默认选择适用于 Amazon SNS 的 AWS 托管 KMS(默认)alias/aws/sns。
注意
记住以下内容:
-
首次使用为主题指定适用于 Amazon SNS 的 AWS 托管 KMS 时, AWS KMS 会为亚马逊 SNS 创建 AWS 托管 KMS。 AWS Management Console
-
或者,在启用 SSE 的情况下首次对主题使用
Publish
操作时, AWS KMS 会为 Amazon SNS 创建 AWS 托管 KMS。
-
-
要使用 AWS 账户中的自定义 KMS,请选择 KMS 密钥字段,然后从列表中选择自定义 KMS。
注意
有关创建自定义密钥的说明 KMSs,请参阅《AWS Key Management Service 开发者指南》中的创建密钥
-
要使用来自您的 AWS 账户或其他账户的自定义 KMS ARN,请将其输入到 KMS 密钥字段中。 AWS
-
-
-
(可选)默认情况下,只有主题拥有者才能发布或订阅主题。要配置其他访问权限,请展开访问策略部分。有关更多信息,请参阅Amazon SNS 中的 Identity and Access Management 和用于 Amazon SNS 访问控制的示例案例。
注意
使用控制台创建主题时,默认策略使用
aws:SourceOwner
条件键。此密钥类似于aws:SourceAccount
。 -
(可选)要配置 Amazon SNS 重试失败消息传输尝试的方式,请展开 Delivery retry policy (HTTP/S)(传输重试策略 (HTTP/S))部分。有关更多信息,请参阅 Amazon SNS 消息传输重试。
-
(可选)要配置 Amazon SNS 如何记录向其发送的消息 CloudWatch,请展开传送状态记录部分。有关更多信息,请参阅 Amazon SNS 消息传输状态。
-
(可选)要将元数据标签添加到主题中,请展开标签部分,输入一个键和值(可选),然后选择添加标签。有关更多信息,请参阅 Amazon SNS 主题标记。
-
选择创建主题。
主题已创建并显示
MyTopic
页面。主题的名称、ARN、(可选)显示名称和主题所有者的 AWS 账户 ID 显示在详细信息部分中。
-
将主题 ARN 复制到剪贴板,例如:
arn:aws:sns:us-east-2:123456789012:MyTopic
使用 AWS SDK 创建主题
要使用 S AWS DK,必须使用您的凭据对其进行配置。有关更多信息,请参阅《工具参考指南》和《工具参考指南》中的共享配置AWS SDKs 和凭据文件。
以下代码示例演示如何使用 CreateTopic
。
- 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中的。
-