Kinesis Data Firehose

【VPC外リージョンサービス】

Kinesis Data Firehose は、ストリームデータの取り込みから変換、配信までをフルマネージドで実行するサービスです。

データは Delivery Stream(デリバリーストリーム) を通じて流れ、Source(ソース) から受け取ったデータを、設定に基づいてDestination(デスティネーション) に配信します。

主なデスティネーションには、S3、OpenSearch、Redshift、Splunk(スプランク) などがあり、これらにほぼリアルタイムでデータを届けることができます。Buffering(バッファリング) の条件(サイズや時間)を柔軟に設定でき、転送前には Compression(圧縮) や暗号化、さらに Lambda を利用した Transformation(変換) によって、ETL処理を簡素化できます。

スケーリングは自動で行われるため、運用負荷は最小限に抑えられます。また、Kinesis Data Streams や Kinesis Data Analytics と連携することで、データ収集からリアルタイム分析までをシームレスに統合できます。

Kinesis Data Firehoseは、ログデータ、メトリクス、IoTデータ などを効率的に収集・変換・保存する基盤として、多くのシステムで定番のサービスとなっています。

重要用語

関連サービス

ユースケース

S3へのログ・イベントデータ自動蓄積アプリケーションやKinesis Data StreamsからのデータをほぼリアルタイムでS3に自動配信し、データレイクの入口として利用する。
OpenSearchへのログ転送アプリケーションログやアクセスログをFirehose経由でOpenSearchドメインに送り、全文検索や可視化に活用する。
データ形式変換と圧縮の自動化取り込んだJSONログをParquet形式に変換したり圧縮したうえでS3に保存し、後続のAthenaやEMRから効率よく分析できるようにする。

ベストプラクティス

バッファサイズと間隔の調整スループットとレイテンシに応じてバッファ設定を最適化する。
失敗レコードのバックアップ配信に失敗したレコードをS3に保存し、後から再処理できるようにする。
変換機能の活用Lambda変換でフォーマット変換やマスキングを行い、後続処理を簡略化する。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・配信メカニズム
 ・データ受信エンドポイント
 ・データバッファリング層
 ・データ変換処理(Lambda統合時)
 ・S3バックアップ(オプション)
【自動リトライ】デフォルト
 データ配信失敗時、最大24時間、5秒ごとに自動リトライを実行

セキュリティ

関連サービス設定内容
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
配信ストリーム設定変更履歴・暗号化/送信先設定の準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
配信ストリーム設定変更などのAPI異常検知
Kinesis Data Firehose が実行ロールを引き受ける典型的な連携パターン
実行ロールを介して連携するサービス実行ロールにアタッチするポリシー
CloudWatch Logslogs:CreateLogGroup
logs:CreateLogStream
logs:PutLogEvents
S3s3:ListBucket
s3:GetObject
s3:PutObject
s3:GetBucketLocation
s3:AbortMultipartUpload
s3:GetObjectVersion
s3:ListBucketMultipartUploads
Lambdalambda:InvokeFunction
lambda:GetFunctionConfiguration
Glueglue:GetTable
glue:GetTableVersion
glue:GetTableVersions
glue:GetDatabase
glue:GetDatabases
Redshiftredshift:DescribeClusters
OpenSearches:DescribeElasticsearchDomain
es:DescribeElasticsearchDomains
es:DescribeElasticsearchDomainConfig
es:ESHttpPost es:ESHttpPut
ec2:DescribeVpcs ec2:DescribeSubnets
ec2:DescribeSecurityGroups
ec2:CreateNetworkInterface
ec2:CreateNetworkInterfacePermission
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface
Secrets Managersecretsmanager:GetSecretValue
KMSkms:Decrypt
kms:GenerateDataKey
※)権限設計の原則

信頼ポリシー:Kinesis Firehose

  {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ログ・監視

標準メトリクス
メトリクス名説明
BackupToS3.RecordsS3バックアップレコード数
DeliveryToHTTP.RecordsHTTP配送レコード数
DeliveryToS3.BytesS3配送バイト数
DeliveryToS3.RecordsS3配送レコード数
DeliveryToHTTP.FailuresHTTP配送失敗数
DeliveryToHTTP.SuccessHTTP配送成功数
DeliveryToS3.FailuresS3配送失敗数
DeliveryToS3.SuccessS3配送成功数
ThrottledGetRecordsスロットル発生回数

制限値(固定値/ハードリミット/ソフトリミット)

固定値制限値
バッファサイズ1-128 MiB
バッファ間隔60-900秒

ハードリミット制限値
レコードサイズ最大1 MiB

ソフトリミット制限値
配信ストリーム数/リージョン50
データレート5,000レコード/秒

AWS CLIのサンプルコード

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
データ取り込み取り込まれたデータ量(GB単位)
S3パーティショニング使用時データ量(GB単位)
VPC配信VPCエンドポイント経由の配信時間
データ変換Lambda変換の実行料金
フォーマット変換ParquetやORCへの変換(GB単位)
料金計算ツール

公式ページ

AWSドキュメント Kinesis Data Firehose