【自習】AWS Firehose

PMする上で必要になってきたのでおさらい

https://docs.aws.amazon.com/firehose/?icmpid=docs_homepage_analytics

## **Amazon Kinesis Data Firehoseとは？**

**リアルタイムでデータを収集し、他のAWSサービスやデータストアに転送するための完全マネージドサービス**。  
大量のデータをリアルタイムに取り込み、最小限の設定で簡単に保存・分析環境へとデータを送信できる。

## **Firehoseの主な特徴**

1. **リアルタイムデータ転送**
   - データをリアルタイムでストリーミングし、最短で数秒以内に転送。
   - 例: ログデータ、IoTデータ、クリックストリーム。

2. **シンプルな設定**
   - データの取り込み、バッファリング、転送が簡単に設定可能。
   - コードを書く必要がほとんどない。

3. **柔軟な転送先**
   - **Amazon S3**: データを長期保存。
   - **Amazon Redshift**: データウェアハウスでの分析。
   - **Amazon OpenSearch Service（旧 Elasticsearch Service）**: データの検索・可視化。
   - **CloudWatch Logs**: ログデータのモニタリング。
   - **サードパーティツール**: 独自のエンドポイントに転送。

4. **データ変換と処理**
   - AWS Lambdaを統合して、転送前にデータを加工やフィルタリング。

5. **スケーラビリティ**
   - 自動的にスケールして、数MBから数GBのデータを処理可能。

6. **課金体系**
   - 使用したデータ量に基づく従量課金制。

## **Firehoseの主な用途**

#### **1. ログデータの収集と保存**
- **シナリオ**: Webサーバーやアプリケーションからのログを収集し、Amazon S3に保存。
- **特徴**:
  - 簡単にスケーラブルなログ収集パイプラインを構築可能。
  - 保存したデータはAthenaやRedshiftで分析。

#### **2. IoTデータの処理**
- **シナリオ**: センサーやIoTデバイスからのデータをリアルタイムで収集。
- **特徴**:
  - データをAmazon OpenSearch Serviceに転送して可視化。
  - Lambdaでデータ加工も可能。

#### **3. アプリケーションのクリックストリーム解析**
- **シナリオ**: ユーザーのWebサイトやアプリでの操作をリアルタイムに収集。
- **特徴**:
  - Redshiftにデータを送信し、BIツールで分析。

#### **4. 不正アクセスやトラフィックの監視**
- **シナリオ**: ネットワークトラフィックやセキュリティログを分析。
- **特徴**:
  - データをCloudWatch LogsやOpenSearch Serviceに送信。

## **Firehoseのデータ転送先と特徴**

| **転送先**                | **主な用途**                                                                  |
|---------------------------|------------------------------------------------------------------------------|
| **Amazon S3**             | 長期データ保存、バックアップ。AthenaやEMRでの分析に利用。                      |
| **Amazon Redshift**       | データウェアハウスとして大量データの分析。BIツールと連携。                     |
| **Amazon OpenSearch**     | データの検索やリアルタイムの可視化（例: Kibanaダッシュボード）。               |
| **CloudWatch Logs**       | ログデータのモニタリングと分析。                                              |
| **サードパーティサービス** | 独自のエンドポイントや外部システムへのデータ転送。                            |

### **Firehoseの導入手順**

#### **1. Firehoseデリバリーストリームの作成**
1. AWSコンソールで「Amazon Kinesis Data Firehose」を開く。
2. 「デリバリーストリームを作成」をクリック。
3. データ転送先を選択（例: S3、Redshift、CloudWatch Logs）。

#### **2. 転送先の設定**
- **Amazon S3**: 保存先バケットを指定。
- **Amazon Redshift**: テーブルスキーマとクラスターを設定。
- **Amazon OpenSearch Service**: ドメインを指定。

#### **3. データ変換（オプション）**
- AWS Lambda関数を設定し、転送前にデータを加工。
  - 例: JSONデータをCSV形式に変換。

#### **4. バッファ設定**
- 転送前にデータを一時的にバッファリング。
  - 時間間隔（例: 60秒ごと）またはデータサイズ（例: 5MBごと）で設定可能。

#### **5. データ送信**
- アプリケーションやサービスからデータをFirehoseに送信。
  - AWS SDKやKinesis Agentを利用。

#### **6. モニタリングと調整**
- CloudWatchメトリクスを使って、Firehoseの状態を監視。
- 必要に応じて設定を調整。

## **Firehoseの料金体系**

1. **データ処理**
   - `$0.035/GB`（データの取り込み量に応じた課金）。

2. **データ変換**
   - Lambda関数を使用した場合、別途Lambdaの実行料金が発生。

3. **転送コスト**
   - 転送先（例: S3、Redshift）で発生するストレージやクエリ料金。

## **Firehoseのメリットとデメリット**

#### **メリット**
1. **シンプルで使いやすい**
   - コード不要で簡単にデータストリーミングを設定可能。

2. **リアルタイム処理**
   - 数秒以内にデータを転送。

3. **スケーラブル**
   - データ量が増加しても自動的にスケール。

4. **柔軟なデータ変換**
   - Lambdaを使ったカスタム変換が可能。

#### **デメリット**
1. **コスト増加**
   - データ量が多い場合、処理コストが高くなる。

2. **転送先に依存**
   - データの保存や分析は転送先のサービス（例: S3、Redshift）に依存。

3. **制約がある変換**
   - 複雑なデータ変換には追加のLambda処理が必要。

## **Firehoseのベストプラクティス**

1. **データのバッファリング設定**
   - 転送頻度を調整して、コストを最適化。

2. **Lambdaでの事前データ処理**
   - 必要なデータのみを転送することで効率化。

3. **転送先の統合**
   - 転送先に応じたデータ形式で保存（例: Redshiftなら列指向）。

4. **モニタリングの徹底**
   - CloudWatchでエラーやスループットを監視し、早期に問題を特定。

## 感想
発注する時にこの辺りの話が出て「？」となったけれど、なんとなくイメージはついた。