

# 情境 2：安全團隊的近乎即時資料
<a name="scenario-2"></a>

公司 *ABC2Badge* 為企業或大型活動 (如 [AWS Re: Invenent](https://reinvent.awsevents.com/)) 提供感應器和徽章。使用者會註冊活動，並收到獨一無二的徽章，感應器會在校園內感應這些徽章。當使用者通過感應器時，系統就會將他們的匿名資訊記錄到關聯式資料庫中。

在即將舉行的活動中，由於出席者眾多，活動安全團隊已請求 *ABC2Badge* 每 15 分鐘收集一次校園人潮最集中之區域的資料。這將使安全團隊有足夠的時間作出反應，並按比例將保全人員分散到人潮集中區域。鑑於安全團隊的這一新要求以及建置串流解決方案的經驗不足，為了近乎即時處理日期，*ABC2Badge* 正在尋找一個簡單但可擴展的可靠解決方案。

他們目前的資料倉儲解決方案是 [Amazon Redshift](https://aws.amazon.com/redshift/)。在檢閱 Amazon Kinesis 服務的功能時，他們發現 Amazon Kinesis Data Firehose 可以接收資料記錄串流，根據緩衝區大小和/或時間間隔對記錄進行批次處理，然後將它們插入 Amazon Redshift 中。他們建立了 Kinesis Data Firehose 交付串流並對其進行設定，以便每五分鐘將資料複製到 Amazon Redshift 資料表中。作為此新解決方案的一部分，他們對伺服器使用了 Amazon Kinesis 代理程式。Kinesis Data Firehose 每五分鐘將資料載入到 Amazon Redshift 中，商業智慧 (BI) 團隊可在其中執行分析，並每 15 分鐘將資料傳送給安全團隊。

![使用 Amazon Kinesis Data Firehose 的新解決方案](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-2.png)


*使用 Amazon Kinesis Data Firehose 的新解決方案*

## Amazon Kinesis Data Firehose
<a name="amazon-kinesis-data-firehose"></a>

[Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose) 是將串流資料載入 AWS 最簡便的方式。其可以擷取、轉換串流資料並將其載入到 [Amazon Kinesis Data Analytics](https://aws.amazon.com/kinesis/data-analytics/)、[Amazon Simple Storage Service](https://aws.amazon.com/s3/) (Amazon S3)、[Amazon Redshift](https://aws.amazon.com/redshift/)、[Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) (OpenSearch Service) 和 [Splunk](https://www.splunk.com/)。此外，Kinesis Data Firehose 還可以將串流資料載入到任何自訂 HTTP 端點，或受支援的[第三方服務提供者](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html)擁有的 HTTP 端點。

Kinesis Data Firehose 透過您原本就在使用的現有商業智慧工具和儀表板，實現近乎即時的分析。這是一項全受管無伺服器服務，可配合資料的輸送量自動進行擴展，無需持續進行管理。Kinesis Data Firehose 也可先批次處理、壓縮和加密資料後再載入，將目的地所使用的儲存空間減到最少，並提高安全性。其還可以使用 AWS Lambda 轉換來源資料並將轉換資料交付到目的地。您可以將資料生產者設定為將資料傳送到 Kinesis Data Firehose，其會自動將資料交付到您指定的目的地。

### 將資料傳送到 Firehose 交付串流
<a name="sending-data-to-a-firehose-delivery-stream"></a>

若要將資料傳送到交付串流，有多種選項。AWS 提供適用於許多常用程式設計語言的 SDK，每種都為 [Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose/) 提供 API。AWS 擁有的公用程式，可幫助將資料傳送到交付串流。Kinesis Data Firehose 已與其他 AWS 服務整合，可將資料直接從這些服務傳送到交付串流中。

### 使用 Amazon Kinesis 代理程式
<a name="using-amazon-kinesis-agent"></a>

[Amazon Kinesis 代理程式](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-agents.html)是獨立的軟體應用程式，可持續監控一組日誌檔案，以尋找要傳送到交付串流的新資料。代理程式會自動處理檔案輪換、檢查點、故障時重試，並發出 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) 指標，以便監控交付串流並進行疑難排解。可將其他組態 (例如資料預處理、監控多個檔案目錄以及寫入多個交付串流) 套用至代理程式。

代理程式可以安裝在 Linux 或基於 Windows 的伺服器上，例如 Web 伺服器、日誌伺服器和資料庫伺服器。安裝代理程式後，您只需指定代理程式將監控的日誌檔案以及其將傳送的目標交付串流。代理程式將持久可靠地向交付串流傳送新資料。

### 將 API 與 AWS SDK 和 AWS 服務結合使用作為來源
<a name="using-api-with-aws-sdk-and-aws-services"></a>

Kinesis Data Firehose API 提供兩種操作，用於將資料傳送到交付串流。`PutRecord` 在一次呼叫中傳送一個資料記錄。`PutRecordBatch` 可以在一次呼叫中傳送多個資料記錄，並且可以實現每個生產者更高的輸送量。在每種方法中，使用此方法時，必須指定交付串流的名稱和資料記錄或資料記錄陣列。如需 Kinesis Data Firehose API 操作的更多資訊和範本程式碼，請參閲[使用 AWS SDK 寫入 Firehose Delivery Stream。](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-sdk.html)

Kinesis Data Firehose 還與 [Kinesis Data Firehose ](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-kinesis-streams.html)、[CloudWatch Logs](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-logs.html)、[CloudWatch Events](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-events.html)、[Amazon Simple Notification Service](https://aws.amazon.com/sns/) (Amazon SNS)、[Amazon API Gateway](https://aws.amazon.com/api-gateway/) 和 [AWS IoT](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-iot.html) 一起執行。您可以透過可擴展、可靠的方式，將資料、日誌、事件和 IoT 資料的串流直接傳送到 Kinesis Data Firehose 目的地。

### 在交付到目的地之前處理資料
<a name="processing-data-before-delivery-to-destination"></a>

在某些情境下，您可能希望在串流資料交付到目的地之前將其轉換或增強。例如，資料生產者可能會在每個資料記錄中傳送非結構化文字，您需要在將其交付到 [OpenSearch Service](https://aws.amazon.com/opensearch-service/) 之前將其轉換為 JSON。或者，您可能希望將 JSON 資料轉換為單欄檔案格式，如 [Apache Parquet](https://parquet.apache.org/) 或 [Apache ORC](https://orc.apache.org/)，然後再將資料存放在 [Amazon S3](https://aws.amazon.com/s3/) 中。

Kinesis Data Firehose 具有內建的資料[格式轉換](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html)功能。有了這個功能，您就可以輕鬆地將 JSON 資料串流轉換為 Apache Parquet 或 Apache ORC 檔案格式。

#### 資料轉換流程
<a name="data-transformation-flow"></a>

若要啟用串流[資料轉換](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html)，Kinesis Data Firehose 會使用您建立的 Lambda 函數來轉換資料。Kinesis Data Firehose 將傳入的資料緩衝到函數的指定緩衝區大小，然後異步叫用指定的 Lambda 函數。轉換後的資料會從 Lambda 傳送到 Kinesis Data Firehose，而 Kinesis Data Firehose 會將資料交付到目的地。

#### 資料格式轉換
<a name="data-format-conversion"></a>

您還可以啟用 Kinesis Data Firehose [資料格式轉換](https://docs.aws.amazon.com/firehose/latest/dev/record-format-conversion.html)，這會將 JSON 資料串流轉換為 Apache Parquet 或 Apache ORC。此功能只能將 JSON 轉換為 Apache Parquet 或 Apache ORC.。如果您有 CSV 格式的資料，則可以透過 Lambda 函數，將該資料轉換為 JSON，然後套用資料格式轉換。

#### 資料交付
<a name="data-delivery"></a>

作為近乎即時的交付串流，Kinesis Data Firehose 可緩衝傳入的資料。達到交付串流的緩衝閾值後，資料將交付到您設定的目的地。Kinesis Data Firehose [將資料交付到每個目的地](https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#s3-object-name)的方法存在一些差異，本文將在以下章節中對此進行評論。

### Amazon S3
<a name="amazon-s3"></a>

[Amazon S3](https://aws.amazon.com/s3/) 是具備簡單 Web 服務介面的物件儲存，可讓您在 Web 上隨處存放和擷取任意數量的資料。它的設計是為了提供 99.999999999% 的耐久性，且可擴展到全球超過數兆個物件。

#### 交付到 Amazon S3 的資料
<a name="data-delivery-to-amazon-s3"></a>

對於交付到 Amazon S3 的資料，Kinesis Data Firehose 會根據交付串流的緩衝組態連接多個傳入記錄，然後將它們作為 S3 物件交付到 Amazon S3。將資料交付到 S3 的頻率由 S3 緩衝區大小 (1 MB 到 128 MB) 或緩衝區間隔 (60 秒到 900 秒) 決定，以先到者為準。

將資料交付至 S3 儲存貯體時，可能會因各種問題導致失敗。例如，儲存貯體已不存在、或 Kinesis Data Firehose 擔任的 [AWS Identity and Access Management](https://aws.amazon.com/iam/) (IAM) [角色​](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)無法存取儲存貯體。在這些情況下，Kinesis Data Firehose 會在 24 小時內持續重試，直到交付成功為止。Kinesis Data Firehose 的最長資料儲存時間為 24 小時。如果超過 24 小時仍無法交付，資料將會遺失。

### Amazon Redshift
<a name="amazon-redshift"></a>

[Amazon Redshift](https://aws.amazon.com/redshift/) 是快速、全受管的資料倉儲，可讓您使用標準 SQL 及現有的 BI 工具，以簡單且經濟實惠的方式分析所有資料。其可讓您使用精密的查詢最佳化、高效能本機磁碟的單欄式儲存及大規模平行查詢執行，對數 PB 的結構化資料執行複雜的分析查詢。 

#### 交付到 Amazon Redshift 的資料
<a name="data-delivery-to-amazon-redshift"></a>

對於向 Amazon Redshift 交付的資料，Kinesis Data Firehose 會先使用先前描述的格式，將傳入資料交付到 S3 儲存貯體中。然後，Kinesis Data Firehose 會發出 Amazon Redshift COPY 命令，以便將資料從 S3 儲存貯體載入到 Amazon Redshift 叢集。

從 S3 到 Amazon Redshift 的資料 `COPY` 操作頻率取決於 Amazon Redshift 叢集完成 `COPY` 命令的速度有多快。對於 Amazon Redshift 目的地，您可以在建立交付串流以處理資料交付失敗時，指定重試持續時間 (0—7200 秒)。Kinesis Data Firehose 在指定的時間持續時間內重試，如果不成功，則跳過特定批次的 S3 物件。略過物件的資訊會交付至 S3 儲存貯體，成為 errors/ 資料夾中的資訊清單檔案，以供手動回填使用。

以下是 Kinesis Data Firehose 到 Amazon Redshift 資料流的架構圖表。雖然此資料流是 Amazon Redshift 所獨有的，但 Kinesis Data Firehose 對於其他目的地目標都採用類似的模式。

![從 Kinesis Data Firehose 到 Amazon Redshift 的資料流](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-3.png)


*從 Kinesis Data Firehose 到 Amazon Redshift 的資料流*

### Amazon OpenSearch Service (OpenSearch Service)
<a name="amazon-elasticsearch-service"></a>

[OpenSearch Service](https://aws.amazon.com/opensearch-service/) 是一種全受管服務，可提供 OpenSearch 易於使用的 API 和即時功能以及生產工作負載所需的可用性、可擴展性和安全性。OpenSearch Service 讓您可以輕鬆部署、操作和擴展 OpenSearch，以供日誌分析、全文搜尋和應用程式監控使用。

#### 對 OpenSearch Service 的資料交付
<a name="data-delivery-to-amazon-es"></a>

對於 OpenSearch Service 的資料交付，Kinesis Data Firehose 會根據交付串流的緩衝組態對傳入的記錄進行緩衝，然後產生 OpenSearch 批次請求，以便在 OpenSearch 叢集中建立多個記錄的索引。OpenSearch Service 的資料交付頻率由 OpenSearch 緩衝區大小 (1 MB 到 100 MB) 和緩衝區間隔 (60 秒到 900 秒) 值決定，以先到者為準。

在建立交付串流時，您能夠針對 OpenSearch Service 目的地指定重試持續時間 (0–7200 秒)。Kinesis Data Firehose 會在指定的持續時間重試並略過該索引請求。略過的文件會交付至 S3 儲存貯體的 `elasticsearch_failed/` 資料夾，以供手動回填使用。

Amazon Kinesis Data Firehose 可以根據時間持續時間輪換 OpenSearch Service 索引。根據您選擇的輪換選項 (`NoRotation`、`OneHour`、`OneDay`、`OneWeek` 或 `OneMonth`)，Kinesis Data Firehose 會將部分協調世界時 (UTC) 到達時間戳記附加到您指定的索引名稱。

### 自訂 HTTP 端點或支援的第三方服務提供者
<a name="custom-http-endpoint-or-supported-third-party-sp"></a>

Kinesis Data Firehose 可以將資料傳送到自訂 HTTP 端點或支援的第三方提供者，如 Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Splunk 和 Sumo Logic。

#### 自訂 HTTP 端點或支援的第三方服務提供者
<a name="data-delivery-to-custom-http-endpoints"></a>

為了使 Kinesis Data Firehose 成功地將資料交付到自訂 HTTP 端點，這些端點必須接受請求，並使用某些 Kinesis Data Firehose 請求和回應格式傳送回應。

將資料交付到受支援的第三方服務提供者擁有的 HTTP 端點時，您可以使用整合的 AWS Lambda 服務來建立函數，將傳入記錄轉換為與服務提供者整合所期望的格式相符的格式。

對於資料交付頻率，每個服務提供者都有建議的緩衝區大小。透過與服務提供者合作，了解有關其建議緩衝區大小的詳細資訊。對於資料交付失敗處理，Kinesis Data Firehose 會先透過等待來自目的地的回應，來建立與 HTTP 端點的連接。Kinesis Data Firehose 將繼續建立連接，直到重試持續時間過期。在這之後，Kinesis Data Firehose 會將其視為資料交付失敗，然後將資料備份至 S3 儲存貯體。

## 總結
<a name="summary-3"></a>

Kinesis Data Firehose 可以持續地將串流資料交付到受支持的目的地。這是一個全受管的解決方案，需要的開發時間很少或根本不需要。對於 *ABC2Badge* 公司來説，使用 Kinesis Data Firehose 是很自然的選擇。他們已經使用 Amazon Redshift 作為資料倉儲解決方案。其資料來源不斷寫入交易日誌，因此他們能夠利用 Amazon Kinesis 代理程式串流該資料，而無需編寫任何其他程式碼。現在，*ABC2Badge* 公司已經建立感應器記錄串流，並透過 Kinesis Data Firehose 接收這些記錄，如此他們就可以將此作為安全團隊使用案例的基礎。