

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Amazon SNS 事件散發至 AWS 事件分叉管道
<a name="sns-fork-pipeline-as-subscriber"></a>


|  | 
| --- |
| 對於事件封存和分析，Amazon SNS 現在建議使用其與 Amazon Data Firehose 的原生整合。您可以訂閱 Firehose 交付串流至 SNS 主題，這可讓您將通知傳送至封存和分析端點，例如 Amazon Simple Storage Service (Amazon S3) 儲存貯體、Amazon Redshift 資料表、Amazon OpenSearch Service (OpenSearch Service) 等。搭配使用 Amazon SNS 與 Firehose 交付串流是全受管且無程式碼的解決方案，不需要您使用 AWS Lambda 函數。如需詳細資訊，請參閱[散發到 Firehose 交付串流](sns-firehose-as-subscriber.md)。 | 

您可以使用 Amazon SNS 建置事件驅動型應用程式，這些應用程式會使用訂閱者服務自動執行工作，以回應發佈者服務所觸發的事件。這個架構模式可讓服務更具重複使用性、互通性和可擴展性。不過，可能需要投入更多勞力將事件分支到管道中處理，以滿足常見的事件處理需求，例如事件儲存、備份、搜尋、分析和重播。

為了加速事件驅動型應用程式的開發，您可以向 Amazon SNS 主題訂閱 AWS 由事件分叉管道提供支援的事件處理管道。 AWS 事件分叉管道是一組開放原始碼[巢狀應用程式](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html)，以[AWS 無伺服器應用程式模型](https://aws.amazon.com/serverless/sam/) (AWS SAM) 為基礎，您可以直接從[AWS 事件分叉管道套件](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) （選擇**顯示建立自訂 IAM 角色或資源政策的應用程式**) 中部署 AWS 。

如需 AWS 事件分叉管道使用案例，請參閱 [部署和測試 Amazon SNS 事件分支管道範例應用程式](sns-deploy-test-fork-pipelines-sample-application.md)。

**Topics**
+ [AWS 事件分叉管道的運作方式](#how-sns-fork-works)
+ [部署 AWS 事件分叉管道](#deploying-sns-fork-pipelines)
+ [部署和測試 Amazon SNS 事件分支管道範例應用程式](sns-deploy-test-fork-pipelines-sample-application.md)
+ [訂閱 Amazon SNS 主題 AWS 的事件分叉管道](sns-subscribe-event-fork-pipelines.md)

## AWS 事件分叉管道的運作方式
<a name="how-sns-fork-works"></a>

AWS Event Fork Pipelines 是一種無伺服器設計模式。不過，它也是一組以 SAM AWS 為基礎的巢狀無伺服器應用程式 （您可以直接從 AWS Serverless Application Repository (AWS SAR) 部署到 ， AWS 帳戶 以豐富您的事件驅動平台）。因應您的架構要求，您可以單獨部署這些巢狀應用程式。

**Topics**
+ [事件儲存和備份管道](#sns-fork-event-storage-and-backup-pipeline)
+ [事件搜尋和分析管道](#sns-fork-event-search-and-analytics-pipeline)
+ [事件重播管道](#sns-fork-event-replay-pipeline)

下圖顯示由三個巢狀應用程式補充 AWS 的事件分叉管道應用程式。您可以根據您的架構需求，從 SAR 上的 AWS AWS 事件分叉管道套件獨立部署任何管道。

![AWS 事件分叉管道架構，顯示如何透過三個不同的管道篩選和處理 Amazon SNS 主題的事件：事件儲存和備份、事件搜尋和分析，以及事件重播。這些管道描述為垂直堆疊方塊，每個都獨立處理來自相同 Amazon SNS 主題的事件。](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/images/sns-fork-pipeline-as-subscriber-how-it-works.png)


每個管道都訂閱同一個 Amazon SNS 主題，讓它本身可在事件發佈到主題時平行處理這些事件。每個管道各自獨立，而且可以設定自己的[訂閱篩選政策](sns-subscription-filter-policies.md)。這可讓管道只處理它有感興趣的事件子集 (而不是發佈到該主題的所有事件)。

**注意**  
由於您將三個 AWS Event Fork Pipelines 與一般事件處理管道一起放置 （可能已訂閱 Amazon SNS 主題），因此您不需要變更目前訊息發佈者的任何部分，即可在現有工作負載中利用 AWS Event Fork Pipelines。

### 事件儲存和備份管道
<a name="sns-fork-event-storage-and-backup-pipeline"></a>

下圖顯示[事件儲存和備份管道](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-event-storage-backup-pipeline)。您可以讓此管道訂閱您的 Amazon SNS 主題，以自動備份流經您系統的事件。

此管道包含緩衝 Amazon SNS 主題交付事件的 Amazon SQS 佇列、自動輪詢佇列中這些事件並將其推送至串流的 AWS Lambda 函數，以及持久備份串流載入事件的 Amazon S3 儲存貯體。 Amazon SNS 

![Fork-Event-Storage-Backup-Pipeline，旨在處理和備份來自 Amazon SNS 主題的事件。流程從事件發散到 Amazon SQS 佇列的 Amazon SNS 主題開始。 Amazon SQS 然後，Lambda 函數會處理這些篩選的事件，將它們轉送至 Data Firehose。Firehose 串流負責緩衝、轉換和壓縮事件，然後再將其載入 Amazon S3 備份儲存貯體。最後，Amazon Athena 可用來查詢儲存的資料。圖表使用一系列圖示和箭頭來說明從一個服務到下一個服務的流程，清楚地標記管道的每個元件。](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/images/sns-fork-event-storage-and-backup-pipeline.png)


若要微調 Firehose 串流的行為，您可以將它設定為將事件載入到儲存貯體之前，先緩衝、轉換和壓縮事件。隨著事件載入，您可以透過 Amazon Athena 使用標準 SQL 查詢來查詢儲存貯體。您也可以將管道設定為重複使用現有的 Amazon S3 儲存貯體，或建立新的儲存貯體。

### 事件搜尋和分析管道
<a name="sns-fork-event-search-and-analytics-pipeline"></a>

下圖顯示[事件搜尋和分析管道](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-event-search-analytics-pipeline)。您可以讓此管道訂閱您的 Amazon SNS 主題，對搜尋網域中流經您系統的事件編製索引，然後對事件進行分析。

此管道包含緩衝 Amazon SNS 主題所交付事件的 Amazon SQS 佇列、輪詢佇列事件並將其推送至 串流的 AWS Lambda 函數、編製 Firehose 串流所載入事件索引的 Amazon OpenSearch Service 網域，以及存放無法在搜尋網域中編製索引之無效字母事件的 Amazon S3 儲存貯體。 Amazon SNS 

![AWS 架構中的事件搜尋和分析管道。從左側開始，Amazon SNS 主題會接收所有事件。然後，這些事件會透過代表「展開篩選事件」的虛線排入 Amazon SQS 佇列。從佇列中，事件由 Lambda 函數處理，然後轉送到 Data Firehose 串流。Data Firehose 會將事件導向兩個目的地：一個路由會導向 Amazon Elasticsearch Service 進行索引，另一個路由會將無法處理的或「無效字母」事件傳送至 Amazon S3 無效字母儲存貯體。在最右側，Elasticsearch Service 的輸出會饋送至 Kibana 儀表板，以進行分析和視覺化。整個流程是水平配置的，每個元件都由顯示資料流程方向的行連接。](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/images/sns-fork-event-search-and-analytics-pipeline.png)


若要調整 Firehose 串流的事件緩衝、轉換和壓縮，您可以設定此管道。

您也可以設定管道是否應該重複使用 中的現有 OpenSearch 網域， AWS 帳戶 或為您建立新的網域。隨著搜尋網域中編製事件的索引，您可以使用 Kibana 對您的事件進行分析，並即時更新視覺化儀表板。

### 事件重播管道
<a name="sns-fork-event-replay-pipeline"></a>

下圖顯示[事件重播管道](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-event-replay-pipeline)。若要記錄您的系統在過去 14 天已處理的事件 (例如當您的平台需要從故障中復原時)，您可以讓此管道訂閱 Amazon SNS 主題，然後重新處理事件。

此管道包含緩衝 Amazon SNS 主題所交付事件的 Amazon SQS 佇列，以及從佇列輪詢事件並將其重新驅動至您一般事件處理管道的 AWS Lambda 函數，該管道也會訂閱您的主題。 Amazon SNS 

![流程圖格式的事件重播管道。從左到右，從 Amazon SNS 主題開始，該主題會將篩選的事件分佈到兩個平行程序。上方流程代表您的一般事件處理管道，其中包含處理事件的 Amazon SQS 佇列。標示為「fork-event-replay-pipeline」的較低流程包含 Amazon SQS 重播佇列，其中事件會在 Lambda 重播函數處理之前暫時存放。此 Lambda 函數能夠根據是否啟用或停用重播功能，將事件重新驅動到一般事件處理管道，或保留它們以進行重播。圖表也指出運算子可以控制啟用或停用事件重播功能。](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/images/sns-fork-event-replay-pipeline.png)


**注意**  
預設情況下，重播函數會停用，不會轉送您的事件。如果您需要重新處理事件，則必須啟用 Amazon SQS 重播佇列做為 AWS Lambda 重播函數的事件來源。

## 部署 AWS 事件分叉管道
<a name="deploying-sns-fork-pipelines"></a>

[AWS 事件分叉管道套件](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) （選擇**顯示建立自訂 IAM 角色或資源政策的應用程式**) 可作為 中的一組公有應用程式 AWS Serverless Application Repository，您可以在其中使用[AWS Lambda 主控台](https://console.aws.amazon.com/lambda/)手動部署和測試這些應用程式。如需使用 AWS Lambda 主控台部署管道的資訊，請參閱 [訂閱 Amazon SNS 主題 AWS 的事件分叉管道](sns-subscribe-event-fork-pipelines.md)。

在生產案例中，我們建議在整體應用程式的 AWS SAM 範本中嵌入 AWS 事件分叉管道。巢狀應用程式功能可讓您將 資源新增至 `[AWS::Serverless::Application](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template.html#serverless-sam-template-application)` AWS SAM 範本，並參考 AWS SAR `ApplicationId`和巢狀應用程式的 `SemanticVersion` 。

例如，您可以將下列 YAML 程式碼片段新增至 AWS SAM 範本的 `Resources`區段，以使用事件儲存和備份管道做為巢狀應用程式。

```
Backup:   
    Type: AWS::Serverless::Application
  Properties:
    Location:
      ApplicationId: arn:aws:serverlessrepo:us-east-2:123456789012:applications/fork-event-storage-backup-pipeline
      SemanticVersion: 1.0.0
    Parameters: 
      #The ARN of the Amazon SNS topic whose messages should be backed up to the Amazon S3 bucket.
      TopicArn: !Ref MySNSTopic
```

當您指定參數值時，您可以使用 AWS CloudFormation 內部函數來參考範本中的其他資源。例如，在上述 YAML 程式碼片段中， `TopicArn` 參數會參考 AWS SAM 範本中其他位置`MySNSTopic`定義的`[AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)`資源 。如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[內部函數參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html)。

**注意**  
SAR AWS 應用程式的 AWS Lambda 主控台頁面包含**複製為 SAM 資源**按鈕，可將巢狀 AWS SAR 應用程式所需的 YAML 複製到剪貼簿。