创建 Amazon SNS 主题 - Amazon Simple Notification Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

创建 Amazon SNS 主题

Amazon SNS 主题是一个逻辑访问点,可充当通信通道。利用主题,您可以对多个终端节点(例如,AWS Lambda、Amazon SQS、HTTP/S 或电子邮件地址)进行分组。

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

第一个也是最常见的 Amazon SNS 任务是创建主题。此页面显示如何使用 AWS 管理控制台、AWS SDK for Java和适用于 .NET 的 AWS 开发工具包创建主题。

在创建过程中,选择主题类型(标准或 FIFO)并命名主题。创建主题后,您无法更改主题类型或名称。所有其他配置选择在主题创建期间是可选的,您稍后可以通过编辑主题来添加或删除它们。

使用 AWS 管理控制台创建主题

  1. 登录到 Amazon SNS 控制台

  2. 执行下列操作之一:

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

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

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

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

    1. 对于 Type (类型),选择主题类型(Standard (标准)FIFO)。

    2. 输入主题的 Name (名称)。对于 FIFO topic (FIFO 主题),将 .fifo 添加到名称的末尾。

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

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

  5. (可选)展开加密部分并执行以下操作。有关更多信息,请参阅静态加密

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

    2. 指定客户主密钥 (CMK)。有关更多信息,请参阅 关键术语

      对于每个 CMK 类型,都会显示 Description (描述)Account (账户)CMK ARN

      重要

      如果您不是 CMK 的拥有者,或者您登录的账户没有 kms:ListAliaseskms:DescribeKey 权限,则无法在 Amazon SNS 控制台上查看有关 CMK 的信息。

      要求 CMK 拥有者授予您这些权限。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的 AWS KMS API 权限:操作和资源参考

      • 默认情况下,适用于 Amazon SNS (默认) alias/aws/sns 的 AWS 托管 CMK 处于选中状态。

        注意

        记住以下内容:

        • 在首次使用 AWS 管理控制台为主题的 Amazon SNS 指定 AWS 托管的 CMK 时,AWS KMS 将为 Amazon SNS 创建 AWS 托管的 CMK。

        • 或者,首次对启用 SSE 的主题使用 Publish 操作时,AWS KMS 将为 Amazon SNS 创建 AWS 托管的 CMK。

      • 要使用您的 AWS 账户中的自定义 CMK,请选择 Customer master key (CMK) (客户主密钥 (CMK)) 字段,然后从列表中选择自定义 CMK。

        注意

        有关创建自定义 CMK 的说明,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

      • 要使用您的 AWS 账户或其他 AWS 账户中的自定义 CMK ARN,请在 Customer master key (CMK) (客户主密钥 (CMK)) 字段中输入它。

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

    注意

    使用控制台创建主题时,默认策略使用 aws:SourceOwner 条件键。此密钥类似于 aws:SourceAccount。 有关 aws:SourceOwneraws:SourceAccount 之间的区别的信息,请参阅aws:SourceAccount 对比 aws:SourceOwner

  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-west-2:123456789012:MyTopic

使用 AWS SDK for Java创建主题

  1. 指定您的 AWS 凭证。有关更多信息,请参阅 适用于 Java 的 AWS 开发工具包 2.x 开发人员指南 中的设置用于开发的 AWS 凭证和区域

  2. 编写您的代码。有关更多信息,请参阅使用 适用于 Java 的开发工具包 2.x

    以下代码摘录创建主题 MyTopic 然后输出主题 ARN 以及之前成功执行的请求的 CreateTopicRequest 请求 ID。

    // Create an Amazon SNS topic. final CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyTopic"); final CreateTopicResponse createTopicResponse = snsClient.createTopic(createTopicRequest); // Print the topic ARN. System.out.println("TopicArn:" + createTopicResponse.getTopicArn()); // Print the request ID for the CreateTopicRequest action. System.out.println("CreateTopicRequest: " + snsClient.getCachedResponseMetadata(createTopicRequest));
  3. 编译并运行您的代码。

    将创建主题,并打印主题 ARN 和 CreateTopicRequest 请求 ID,例如:

    TopicArn: arn:aws:sns:us-east-2:123456789012:MyTopic CreateTopicRequest: {AWS_REQUEST_ID=1234a567-bc89-012d-3e45-6fg7h890123i}
  4. 您可以将主题 ARN 分配给要在其他操作中使用的字符串变量,例如:

    final String topicArn = "arn:aws:sns:us-east-2:123456789012:MyTopic";

有关如何使用 AWS SDK for Java 创建和发布 FIFO 主题的详细示例,请参阅使用 适用于 Java 的 AWS 开发工具包 2.x

使用 适用于 .NET 的 AWS 开发工具包创建主题

  1. 指定您的 AWS 凭证。有关更多信息,请参阅 适用于 .NET 的 AWS 开发工具包 开发人员指南 中的配置 AWS 凭证

  2. 编写您的代码。有关更多信息,请参阅使用 适用于 .NET 的 AWS 开发工具包 进行编程

    以下代码摘录创建主题 MyTopic 然后输出主题 ARN 和 CreateTopicRequest 请求 ID。

    // Create an Amazon SNS topic. CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyTopic"); CreateTopicResponse createTopicResponse = snsClient.CreateTopic(createTopicRequest); // Print the topic ARN. Console.WriteLine("TopicArn: " + createTopicResponse.TopicArn); // Print the request ID for the CreateTopicRequest action. Console.WriteLine("CreateTopicRequest: " + createTopicResponse.ResponseMetadata.RequestId);
  3. 编译并运行您的代码。

    将创建主题,并打印主题 ARN 和 CreateTopicRequest 请求 ID,例如:

    TopicArn: arn:aws:sns:us-east-2:123456789012:MyTopic CreateTopicRequest: 1234a567-bc89-012d-3e45-6fg7h890123i
  4. 您可以将主题 ARN 分配给要在其他操作中使用的字符串变量,例如:

    String topicArn = createTopicResponse.TopicArn;