Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第161回 雲勉 Amazon Kinesis Data Streams と Amazon ...

第161回 雲勉 Amazon Kinesis Data Streams と Amazon Data Firehose を使ってみよう

下記、勉強会での資料です。

Avatar for iret.kumoben

iret.kumoben

May 16, 2025
Tweet

More Decks by iret.kumoben

Other Decks in Technology

Transcript

  1. 講師自己紹介 2 ▪ 中谷 尚矢(なかたに なおや)
 ▪ 所属: クラウド・インテグレーション事業部
 ▪

    経歴: 2021年新卒入社 インフラ運用保守、構築を担当
 ▪ 好きなサービス: Systems Manager(特にSSM)
 ご質問は YouTubeのコメント欄で受け付けております。
 後日回答させていただきます!
 

  2. はじめに 3 対象: これから Amazon Kinesis Data Streams + Amazon

    Data Firehose を使う方
 (以降、 Kinesis Data Streams、 Data Firehose )
 
 ゴール: • Kinesis Data Streams、Data Firehose がどのようなサービスか理解できる
 • Kinesis Data Streams、Data Firehose の動作を理解できる
 • Amazon Kinesis Data Generator を使用して、動作検証を行うことができる
 • Python、ブラウザから Kinesis Data Streams へデータを転送できるようになる

  3. アジェンダ 5 1. Kinesis Data Streams、Data Firehoseとはなにか
 2. Kinesis Data

    Streamsの使い方
 3. Data Firehoseの使い方
 4. ストリームデータの送り方

  4. データの送受信 9 ストリーミングデータを扱うための課題 
 https://aws.amazon.com/jp/what-is/streaming-data/#seo-faq-pairs#what-are-the-challenges-in-working-with-streaming-data 
 • 可用性
 データが絶えず送信されるため、低レイテンシーで高可用性なシステムが求められる •

    スケーラビリティ 
 データソースが変動しやすい場合、ピークロードに合わせて適切なシーケンシングと整合性を優先 する必要がある
 • 耐久性
 送信されるデータには時間制限があるため、高い耐障害性が求められる
  5. Kinesis Data Streams と Data Firehose 13 Kinesis Data Streams

    何十万ものソースから、1時間あたり数テラバイト (TB) におよぶデータを継続的に取得して保存するこ とができます。Kinesis Client Library (KCL)、Apache Storm、および Apache Spark Streaming などの任 意のストリーム処理フレームワークをサポートします。
 
 Data Firehose ストリーミングデータを取得して、Amazon S3 および Amazon Redshift に自動的にロードすることができ ます。これは、現在既に使用されている既存のビジネスインテリジェンスツールとダッシュボードを使用 して、リアルタイムの分析を実行することを可能にします。
 
 https://aws.amazon.com/jp/what-is/streaming-data/#seo-faq-pairs#how-can-aws-support-your-streaming-data-requirements 

  6. Kinesis Data Streams と Data Firehose 14 Kinesis Data Streams

    大規模なデータストリーミングを収集する
 多様なコンシューマーで利用できるようにデータをプールする
 
 Data Firehose 多様なデータソースからストリーミングデータを取得し、配信する
 API を使用し、直接 Data Firehose にデータを送信することも可能

  7. Kinesis Data Streams と Data Firehose 15 Q. データを S3

    に配信するなら、Kinesis Data Streams は不要? A. 条件によっては Kinesis Data Streams が必要 
 Kinesis Data Streams Data Firehose スループット 4 MB/秒 から シャード単位でスケール 1 MB/秒から オートスケール データストレージ 24時間のデータを保持 最大365日まで延長可能 なし コンシューマー / 転送先 複数のコンシューマーが 利用可能 ストリームごとに1つの転送先 Data Firehose スループット https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/limits.html Kinesis Data Stream スループット https://docs.aws.amazon.com/ja_jp/streams/latest/dev/service-sizes-and-limits.html
  8. Kinesis Data Streams の構成要素 18 データレコードの送信 
 PutRecord または PutRecords

    API を使用しデータを書き込む
 パーティションキーからハッシュ関数を用い、ハッシュキーを生成する
 ハッシュキーが含まれるシャードに、データを書き込む

  9. Kinesis Data Streams の設定 19 容量モード 
 24時間で2回まで変更可能
 • オンデマンド:シャード数を自動でスケーリングする


    • プロビジョニング:シャード数を手動で設定する
 基本的にオンデマンドを使うことが推奨される 
 下記のようなケースでは、プロビジョニングを使用する 
 • 予測しやすい容量要件を持つ予測可能なトラフィック 
 • シャード間でのデータの分散方法をきめ細かく制御したい場合
  10. Kinesis Data Streams の運用 21 シャードのスケール 
 シャードのスケールには、最大15分間の読み込みと書き込みの例外が発生する可能性がある
 オンデマンドは、30日間の書き込みピークの2倍相当までスケール無しで対応可能
 


    パーティションキー 
 パーティションキー(ハッシュキー)が固定されると、一部のシャードにリクエストが偏り、
 シャードのスケールによるスループットの改善が無駄になる
 パーティションキーの数は、シャード数より大きくすることが推奨される

  11. Data Firehose の設定 26 Lambda によるレコード変換(オプション) 
 Lambda関数と、バッファサイズを設定する
 バッファサイズは、下記のうちいずれかに到達してからLambda関数を呼び出す
 •

    バッファサイズ(0.2~3MB) • バッファ間隔(0~900s)
 バッファリングの基準 
 • 関数呼び出し後のペイロードが6MBを超えないように調整 
 • バッファ間隔を調整し、Lambda の実行回数を調整
  12. Data Firehose の設定 28 送信先設定(Amazon S3) 
 • 改行の区切り文字 


    送信前に各レコード間に改行文字を挿入可能
 • 動的パーティショニング 
 レコードを解析し、レコード内のデータに基づき、配信先プレフィクスを制御する
 JSON や区切り文字を指定した解析が可能で、 Data Firehose の組み込み機能か、
 Lambda で取得したパーティショニングキーが使用可能
 Data Firehose の組み込み機能では、JSON を JQ式を使用しキーを取得する
  13. Data Firehose の設定 29 配信バッファ 
 配信までのバッファサイズを設定する
 バッファサイズは、下記のうちいずれかに到達してから転送先に配信する
 • バッファサイズ(1~128MB、推奨5MB)

    • バッファ間隔(0~900s、推奨60s) 転送先により異なるためリファレンスを参照
 
 データレコードの圧縮 
 データ配信前にファイルを圧縮することが可能
 拡張子フォーマットを指定することも可能

  14. Data Firehose の運用 30 バッファサイズ 
 Lambda変換や、配信バッファを調整し、配信後のファイルサイズを調整する
 バッファ設定によって、AWS利用料やパフォーマンスに影響する
 
 その他の設定変更

    
 運用途中での設定変更は、配信先のデータプールの整合性を失う可能性があるので注意する
 一部の設定は構築後の変更ができないため、構築時に十分設計を行う必要がある

  15. ストリームデータのテスト送信 32 Amazon Kinesis Data Generator(以降、KDG) コードを準備せずに、Kinesis Data Streams や

    Data Firehose へテストデータを送信可能
 
 特徴
 ストリームデータの生成と送信の、コード作成が不要
 SPA のため、アプリケーションのホスティングが不要
 必要なリソースを、Amazon CloudFormation で作成
 Faker を使用し、動的なデータを再現可能

  16. ストリームデータのテスト送信 33 KDGの利用方法 
 https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html 
 1.認証用の Amazon Cognito ユーザーを作成

    
 AWS CloudFormation から必要なリソースを作成可能
 2.KDG へアクセス 
 AWS CloudFormation の出力に、URLが生成される
 3.ストリームデータテンプレートの作成 
 Faker で動的なテンプレートが作成可能
 テキストをそのまま使用することも可能

  17. ストリームデータのテスト送信 34 KDG 利用の注意点 
 • Faker は Ver.6 のガイドに従ってテンプレートを作成する


    • テンプレート上の改行は、レコードに反映されない
 • レコードは、末尾に改行コードが付与されて送信される

  18. サンプルコード 35 Python AWS SDK for Python (Boto3) から put_record

    / put_records メソッドを用し、
 レコードを送信する

  19. サンプルコード 36 JavaScript(ブラウザ / webpack) https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v3/developer-guide/building-sdk-for-browsers.html 
 ブラウザ上で AWS SDK

    for JavaScript を使用する場合は、webpack を使用して
 コードを生成する
 
 手順
 1. npm で webpack をインストール
 2. webpack 設定ファイル (webpack.config.js) を作成する
 3. package.json に、webpack のビルド設定を追加する
 4. npm run build でバンドル用の JavaScript ファイルを生成する
 5. 生成されたファイルを html 上で利用する

  20. まとめ 40 • Kinesis Data Streams は大規模なデータストリーミングを収集し、
 あらゆるコンシューマーで利用できるようにするサービス
 • Data

    Firehose はストリームデータを収集し、配信することができるサービス
 
 • Kinesis Data Streams はシャードの数を制御し、スケールすることが可能
 レコードを一定期間保持することができる
 • Data Firehose は一定のバッファ間隔で、レコードを配信することが可能
 配信時に、データ変換や圧縮などを行うことができる

  21. まとめ 41 • KDG を使用し、簡単にストリームデータの作成、送信をテストすることが可能
 
 • レコードを送信するときは、 put_record /

    put_records API を使用する
 • Python では AWS SDK for Python (Boto3) を利用する
 • ブラウザで JavaScript のコードを使用する場合は、webpack を利用し、バンドル用のJavaScript ファイルを生成する