

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

# 将 AWS 事件分叉管道订阅到 Amazon SNS 主题
<a name="sns-subscribe-event-fork-pipelines"></a>

为了加快事件驱动型应用程序的开发，您可以订阅 Amazon SNS 主题的事件处理管道（由事件 AWS 分叉管道提供支持）。 AWS Event Fork Pipelines 是一套基于[AWS 无服务器应用程序模型](https://aws.amazon.com/serverless/sam/) (SA AWS M) 的开源[嵌套](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html)应用程序，您可以直接从 Ev [AWS ent Fork Pipelines 套件](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines)（选择**显示创建自定义 IAM 角色或资源策略的应用程序**）将其部署到您的 AWS 账户中。有关更多信息，请参阅 [AWS 事件分叉管道的工作原理](sns-fork-pipeline-as-subscriber.md#how-sns-fork-works)。

本节介绍如何使用部署管道，然后 AWS 管理控制台 将 AWS 事件分叉管道订阅 Amazon SNS 主题。在开始之前，请[创建 Amazon SNS 主题](sns-create-topic.md)。

要删除构成管道的资源，请在 AWS Lambda 控制台的**应用程序**页面上找到管道，展开 **SAM 模板部分**，选择**CloudFormation堆栈**，然后选择**其他操作**，**删除堆栈**。

# 订阅事件存储与备份管道并将其部署到 Amazon SNS
<a name="deploy-event-storage-backup-pipeline"></a>


|  | 
| --- |
| 对于事件归档和分析，Amazon SNS 现在建议使用其与 Amazon Data Firehose 的本机集成。您可以将 Firehose 传输流订阅 SNS 主题，这样您就可以向存档和分析终端节点发送通知，例如亚马逊简单存储服务 (Amazon S3) 存储桶、亚马逊 Redshift 表、亚马逊 OpenSearch 服务（服务）等。OpenSearch 将 Amazon SNS 与 Firehose 传输流配合使用是一种完全托管且无需代码的解决方案，您无需使用任何功能。 AWS Lambda 有关更多信息，请参阅 [扇出到 Firehose 传输流](sns-firehose-as-subscriber.md)。 | 

本教程说明如何部署[事件存储与备份管道](sns-fork-pipeline-as-subscriber.md#sns-fork-event-storage-and-backup-pipeline)并为该管道订阅 Amazon SNS 主题。此过程会自动将与管道关联的 AWS SAM 模板转换为 CloudFormation 堆栈，然后将该堆栈部署到您的 AWS 账户。此过程还会创建和配置构成事件存储与备份管道的资源集，包括以下内容：
+ Amazon SQS 队列
+ Lambda 函数
+ Firehose 传输流
+ Amazon S3 备份存储桶

有关将流配置为以 Amazon S3 存储桶作为目标的更多信息，请参阅 *Amazon Data Firehose API Reference* 中的 `[S3DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_S3DestinationConfiguration.html)`。

有关转换事件以及配置事件缓冲、事件压缩和事件加密的详细信息，请参阅 *Amazon Data Firehose 开发人员指南*中的[创建传输流](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)。

有关筛选事件的更多信息，请参阅本指南中的 [Amazon SNS 订阅筛选策略](sns-subscription-filter-policies.md)。

1. 登录 [AWS Lambda 控制台](https://console.aws.amazon.com/lambda/)。

1. 在导航面板上，选择 **Functions (函数)**，然后选择 **Create function (创建函数)**。

1. 在 **Create function (创建函数)** 页面上，执行以下操作：

   1. 依次选择 **Browse serverless app repository（浏览无服务器应用程序存储库）**、**Public applications（公共应用程序）**、**Show apps that create custom roles or resource policies（显示创建 IAM 角色或资源策略的应用程序）**。

   1. 搜索 `fork-event-storage-backup-pipeline`，然后选择该应用程序。

1. 在 **fork-event-storage-backup-pipelin** e 页面上，执行以下操作：

   1. 在 **Application settings (应用程序设置)** 部分中，输入 **Application name (应用程序名称)**（例如，`my-app-backup`）。
**注意**  
对于每个部署，应用程序名称必须唯一。如果您重复使用应用程序名称，则部署将仅更新先前部署的 CloudFormation 堆栈（而不是创建新的堆栈）。

   1. （可选）对于 **BucketArn**，请输入加载传入事件的 Amazon S3 存储桶的 ARN。如果您未输入值，则会在您的 AWS 账户中创建一个新的 Amazon S3 存储桶。

   1. （可选）对于 **DataTransformationFunctionArn**，输入用于转换传入事件的 Lambda 函数的 ARN。如果您不输入值，则将禁用数据转换。

   1. （可选）输入以下**LogLevel**设置之一以执行应用程序的 Lambda 函数：
      + `DEBUG`
      + `ERROR`
      + `INFO`（默认值）
      + `WARNING`

   1. 对于 **TopicArn**，输入要订阅此分叉管道实例的 Amazon SNS 主题的 ARN。

   1. （可选）对于**StreamBufferingIntervalInSeconds**和 **StreamBufferingSizeInMBs**，输入用于配置传入事件缓冲的值。如果您不输入任何值，则使用 300 秒和 5 MB。

   1. （可选）输入以下**StreamCompressionFormat**设置之一以压缩传入的事件：
      + `GZIP`
      + `SNAPPY`
      + `UNCOMPRESSED`（默认值）
      + `ZIP`

   1. （可选）对于 **StreamPrefix**，输入字符串前缀以命名存储在 Amazon S3 备份存储桶中的文件。如果您不输入值，则不使用任何前缀。

   1. （可选）对于 **SubscriptionFilterPolicy**，输入 JSON 格式的 Amazon SNS 订阅筛选策略，用于筛选传入的事件。筛选策略决定在 OpenSearch 服务索引中对哪些事件进行索引。如果您不输入值，则不使用筛选（为所有事件编制索引）。

   1. （可选）对于 **SubscriptionFilterPolicyScope**，输入字符串`MessageBody`或`MessageAttributes`以启用基于负载或基于属性的邮件筛选。

   1. 选择 **I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications (我确认此应用程序创建自定义 IAM 角色和资源策略并部署嵌套应用程序)**，然后选择 **Deploy (部署)**。

在 “**部署状态 *my-app***” 页面上，Lambda 会显示 “**您的应用程序正在部署中**” 状态。

在**资源**部分中， CloudFormation 开始创建堆栈并显示每个资源的 **CREATE\$1IN\$1PROGRESS** 状态。该过程完成后， CloudFormation 将显示 “**创建\$1完成**” 状态。

部署完成后，Lambda 将显示 **Your application has been deployed（您的应用程序已部署完成）**状态。

发布到您的 Amazon SNS 主题的消息将存储在由事件存储与备份管道自动预置的 Amazon S3 备份存储桶中。

# 订阅事件搜索与分析管道并将其部署到 Amazon SNS
<a name="deploy-event-search-analytics-pipeline"></a>


|  | 
| --- |
| 对于事件归档和分析，Amazon SNS 现在建议使用其与 Amazon Data Firehose 的本机集成。您可以将 Firehose 传输流订阅 SNS 主题，这样您就可以向存档和分析终端节点发送通知，例如亚马逊简单存储服务 (Amazon S3) 存储桶、亚马逊 Redshift 表、亚马逊 OpenSearch 服务（服务）等。OpenSearch 将 Amazon SNS 与 Firehose 传输流配合使用是一种完全托管且无需代码的解决方案，您无需使用任何功能。 AWS Lambda 有关更多信息，请参阅 [扇出到 Firehose 传输流](sns-firehose-as-subscriber.md)。 | 

本教程说明如何部署[事件搜索与分析管道](sns-fork-pipeline-as-subscriber.md#sns-fork-event-search-and-analytics-pipeline)并为该管道订阅 Amazon SNS 主题。此过程会自动将与管道关联的 AWS SAM 模板转换为 CloudFormation 堆栈，然后将该堆栈部署到您的 AWS 账户。此过程还会创建和配置构成事件搜索与分析管道的资源集，包括以下内容：
+ Amazon SQS 队列
+ Lambda 函数
+ Firehose 传输流
+ 亚马逊 OpenSearch 服务域名
+ Amazon S3 死信存储桶

有关将流配置为以索引作为目标的更多信息，请参阅《Amazon Data Firehose API Reference》**中的 `[ElasticsearchDestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ElasticsearchDestinationConfiguration.html)`。

有关转换事件以及配置事件缓冲、事件压缩和事件加密的详细信息，请参阅 *Amazon Data Firehose 开发人员指南*中的[创建传输流](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)。

有关筛选事件的更多信息，请参阅本指南中的 [Amazon SNS 订阅筛选策略](sns-subscription-filter-policies.md)。

1. 登录 [AWS Lambda 控制台](https://console.aws.amazon.com/lambda/)。

1. 在导航面板上，选择 **Functions (函数)**，然后选择 **Create function (创建函数)**。

1. 在 **Create function (创建函数)** 页面上，执行以下操作：

   1. 依次选择 **Browse serverless app repository（浏览无服务器应用程序存储库）**、**Public applications（公共应用程序）**、**Show apps that create custom roles or resource policies（显示创建 IAM 角色或资源策略的应用程序）**。

   1. 搜索 `fork-event-search-analytics-pipeline`，然后选择该应用程序。

1. 在 **fork-event-search-analytics-pipelin** e 页面上，执行以下操作：

   1. 在 **Application settings (应用程序设置)** 部分中，输入 **Application name (应用程序名称)**（例如，`my-app-search`）。
**注意**  
对于每个部署，应用程序名称必须唯一。如果您重复使用应用程序名称，则部署将仅更新先前部署的 CloudFormation 堆栈（而不是创建新的堆栈）。

   1. （可选）对于 **DataTransformationFunctionArn**，输入用于转换传入事件的 Lambda 函数的 ARN。如果您不输入值，则将禁用数据转换。

   1. （可选）输入以下**LogLevel**设置之一以执行应用程序的 Lambda 函数：
      + `DEBUG`
      + `ERROR`
      + `INFO`（默认值）
      + `WARNING`

   1. （可选）对于 **SearchDomainArn**，输入 OpenSearch 服务域的 ARN，该域是一个配置所需计算和存储功能的集群。如果您不输入值，则使用默认配置创建新域。

   1. 对于 **TopicArn**，输入要订阅此分叉管道实例的 Amazon SNS 主题的 ARN。

   1. 对于 **SearchIndexName**，输入用于事件搜索和分析的 OpenSearch 服务索引的名称。
**注意**  
以下配额适用于索引名称：  
不能包含大写字母
不能包含以下字符：`\ / * ? " < > | ` , #`
不能以下列字符开头：`- + _`
不能为以下内容：`. ..`
长度不能超过 80 个字符
长度不能超过 255 个字节
不能包含冒号（来自 OpenSearch 服务 7.0）

   1. （可选）为 OpenSearch 服务索引的轮换周期输入以下**SearchIndexRotationPeriod**设置之一：
      + `NoRotation`（默认值）
      + `OneDay`
      + `OneHour`
      + `OneMonth`
      + `OneWeek`

      索引轮换将时间戳附加到索引名称，从而促进旧数据的到期。

   1. 对于 **SearchTypeName**，输入用于在索引中组织事件的 OpenSearch 服务类型的名称。
**注意**  
OpenSearch 服务类型名称可以包含任何字符（空字节除外），但不能以开头`_`。
对于 S OpenSearch ervice 6.x，每个索引只能有一个类型。如果您为具有其他类型的现有索引指定新类型，Firehose 会返回运行时错误。

   1. （可选）对于**StreamBufferingIntervalInSeconds**和 **StreamBufferingSizeInMBs**，输入用于配置传入事件缓冲的值。如果您不输入任何值，则使用 300 秒和 5 MB。

   1. （可选）输入以下**StreamCompressionFormat**设置之一以压缩传入的事件：
      + `GZIP`
      + `SNAPPY`
      + `UNCOMPRESSED`（默认值）
      + `ZIP`

   1. （可选）对于 **StreamPrefix**，输入字符串前缀以命名存储在 Amazon S3 死信存储桶中的文件。如果您不输入值，则不使用任何前缀。

   1. （可选）对于 **StreamRetryDurationInSecons**，输入 Firehose 无法索引服务索引中的 OpenSearch 事件时的重试持续时间。如果您不输入值，则使用 300 秒。

   1. （可选）对于 **SubscriptionFilterPolicy**，输入 JSON 格式的 Amazon SNS 订阅筛选策略，用于筛选传入的事件。筛选策略决定在 OpenSearch 服务索引中对哪些事件进行索引。如果您不输入值，则不使用筛选（为所有事件编制索引）。

   1. 选择 **I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications (我确认此应用程序创建自定义 IAM 角色和资源策略并部署嵌套应用程序)**，然后选择 **Deploy (部署)**。

在 “**部署状态 *my-app-search***” 页面上，Lambda 会显示 “**您的应用程序正在部署中**” 状态。

在**资源**部分中， CloudFormation 开始创建堆栈并显示每个资源的 **CREATE\$1IN\$1PROGRESS** 状态。该过程完成后， CloudFormation 将显示 “**创建\$1完成**” 状态。

部署完成后，Lambda 将显示 **Your application has been deployed（您的应用程序已部署完成）**状态。

发布到您的 Amazon SNS 主题的消息将在事件搜索和分析管 OpenSearch 道自动配置的服务索引中编制索引。如果该管道无法为事件编制索引，它会将其存储在 S3 死信存储桶中。

# 使用 Amazon SNS 集成，部署事件重播管道
<a name="deploy-event-replay-pipeline"></a>

本教程说明如何部署[事件重播管道](sns-fork-pipeline-as-subscriber.md#sns-fork-event-replay-pipeline)并为该管道订阅 Amazon SNS 主题。此过程会自动将与管道关联的 AWS SAM 模板转换为 CloudFormation 堆栈，然后将该堆栈部署到您的 AWS 账户。此过程还会创建和配置构成事件重播管道的资源集，包括一个 Amazon SQS 队列和一个 Lambda 函数。

有关筛选事件的更多信息，请参阅本指南中的 [Amazon SNS 订阅筛选策略](sns-subscription-filter-policies.md)。

1. 登录 [AWS Lambda 控制台](https://console.aws.amazon.com/lambda/)。

1. 在导航面板上，选择 **Functions (函数)**，然后选择 **Create function (创建函数)**。

1. 在 **Create function (创建函数)** 页面上，执行以下操作：

   1. 依次选择 **Browse serverless app repository（浏览无服务器应用程序存储库）**、**Public applications（公共应用程序）**、**Show apps that create custom roles or resource policies（显示创建 IAM 角色或资源策略的应用程序）**。

   1. 搜索 `fork-event-replay-pipeline`，然后选择该应用程序。

1. 在 **fork-event-replay-pipeline** 页面中，执行以下操作：

   1. 在 **Application settings (应用程序设置)** 部分中，输入 **Application name (应用程序名称)**（例如，`my-app-replay`）。
**注意**  
对于每个部署，应用程序名称必须唯一。如果您重复使用应用程序名称，则部署将仅更新先前部署的 CloudFormation 堆栈（而不是创建新的堆栈）。

   1. （可选）输入以下**LogLevel**设置之一以执行应用程序的 Lambda 函数：
      + `DEBUG`
      + `ERROR`
      + `INFO`（默认值）
      + `WARNING`

   1. （可选 **ReplayQueueRetentionPeriodInSeconds**）输入 Amazon SQS 重播队列保留消息的时间长度（以秒为单位）。如果您不输入值，则使用 1209600 秒（14 天）。

   1. 对于 **TopicArn**，输入要订阅此分叉管道实例的 Amazon SNS 主题的 ARN。

   1. 对于 **DestinationQueueName**，输入 Lambda 重播函数向其转发消息的 Amazon SQS 队列的名称。

   1. （可选）对于 **SubscriptionFilterPolicy**，输入 JSON 格式的 Amazon SNS 订阅筛选策略，用于筛选传入的事件。筛选策略决定缓冲哪些事件以进行重播。如果您不输入值，则不使用筛选（缓冲所有事件以进行重播）。

   1. 选择 **I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications (我确认此应用程序创建自定义 IAM 角色和资源策略并部署嵌套应用程序)**，然后选择 **Deploy (部署)**。

在 “**部署状态 *my-app-replay***” 页面上，Lambda 会显示 “**您的应用程序正在部署中**” 状态。

在**资源**部分中， CloudFormation 开始创建堆栈并显示每个资源的 **CREATE\$1IN\$1PROGRESS** 状态。该过程完成后， CloudFormation 将显示 “**创建\$1完成**” 状态。

部署完成后，Lambda 将显示 **Your application has been deployed (您的应用程序已部署完成)**状态。

将在由事件重播管道自动预置的 Amazon SQS 索引中缓冲发布到您的 Amazon SNS 主题的消息以进行重播。

**注意**  
默认情况下，禁用重播。要启用重播，请导航到 Lambda 控制台上的函数页面，展开 **Designer** 部分，选择 **SQS** 磁贴，然后在 **SQS** 部分中，选择 **Enabled（启用）**。