Q: Amazon Kinesis Streams とは何ですか?

Amazon Kinesis Streams を使用すると、特定のニーズに合わせてストリーミングデータを処理、分析するカスタムアプリケーションを構築することができます。クリックストリーム、アプリケーションログ、ソーシャルメディアなどのさまざまなタイプのデータを何十万ものソースから Amazon Kinesis ストリームに連続して追加できます。ほんの数秒後には、Amazon Kinesis アプリケーションで、ストリームからデータを読み取って処理できます。

Q: Amazon Kinesis Streams では何を管理しますか?

Amazon Kinesis Streams では、データスループットのレベルでデータをストリーミングするために必要なインフラストラクチャ、ストレージ、ネットワーキング、設定が管理されます。データストリームのためのハードウェア、ソフトウェア、その他のサービスのプロビジョニング、デプロイ、継続的保守を心配する必要はありません。さらに、Amazon Kinesis Streams では、3 つのアベイラビリティーゾーンでデータが同期的にレプリケートされるため、可用性とデータ耐久性が高まります。

Q: Amazon Kinesis Streams でできることは何ですか?

Amazon Kinesis Streams を使用すると、データ生成元からすばやくデータを移動して連続的にデータを処理し、データストアに送る前にデータを変換したり、メトリクスや分析をリアルタイムで実行したり、他の処理のためにさらに複雑なデータストリームを取得したりできます。以下に示しているのは、Amazon Kinesis Streams の一般的なユースケースです。

  • 高速化されたログおよびデータフィードの取得: データがまとまるまで待つのではなく、データ生成元でデータが生成されたらすぐに Amazon Kinesis ストリームにデータをプッシュできるので、データ生成元で障害が発生してもデータが失われません。たとえば、システムログやアプリケーションログを連続的にストリームに追加し、すぐに処理できます。
  • リアルタイムのメトリクスとレポート: Amazon Kinesis ストリームデータからリアルタイムでメトリクスを抽出してレポートを生成できます。例えば、Amazon Kinesis アプリケーションは、データがストリーミングされると同時にシステムログおよびアプリケーションログのメトリクスやレポートの処理を行うことができ、データバッチを受け取るまで待つ必要はありません。
  • リアルタイムのデータ分析: Amazon Kinesis Streams では、ストリーミングデータの分析をリアルタイムで実行できます。たとえば、クリックストリームを Amazon Kinesis ストリームに追加し、Amazon Kinesis アプリケーションでリアルタイムに分析して、時間や日の単位ではなく分単位でデータを詳しく調べることができます。
  • 複雑なストリーム処理: Amazon Kinesis アプリケーションおよびデータストリームの Directed Acyclic Graph (DAG) を作成できます。このシナリオでは、1 つ以上の Amazon Kinesis アプリケーションがさらに処理を行うために別の Amazon Kinesis ストリームにデータを追加でき、ストリームを連続的な段階で処理できます。

Q: Amazon Kinesis Streams を使用するにはどうすればよいですか?

アマゾン ウェブ サービスにサインアップした後、次の方法で Amazon Kinesis Streams の使用を開始できます。

Q: Amazon Kinesis Streams の制限事項は何ですか?

Amazon Kinesis ストリームのスループットは、ストリーム内のシャードの数を増やすことによって制限なしにスケールするように設計されています。ただし、Amazon Kinesis Streams を使用する際に考慮する必要のある特定の制限があります。

  • デフォルトでは、ストリームのレコードにアクセスできるのは、ストリームに追加された時点から最大 24 時間です。拡張データ保持を有効にすることにより、この制限を最大 7 日間まで上げることができます。
  • 1 つのレコード内のデータ BLOB(Base64 エンコーディング前のデータペイロード)の最大サイズは、1 メガバイト (MB) です。
  • シャードは 1 秒あたり最大 1,000 件の PUT レコードをサポートできます。

他の API レベルの制限事項の詳細については、Amazon Kinesis Streams の制限を参照してください。

Q: Amazon Kinesis Streams と Amazon SQS の違いは何ですか?

Amazon Kinesis Streams では、ビッグデータのストリーミングをリアルタイムで処理できます。レコードを並べ替えることができ、複数の Amazon Kinesis アプリケーションに対して同じ順序でレコードを読み取ったり再生したりできます。Amazon Kinesis クライアントライブラリ(KCL)は特定のパーティションキーに対するすべてのレコードを同じレコードプロセッサに提供し、同じ Amazon Kinesis ストリームから読み取る複数のアプリケーションの構築を容易にします(たとえばカウント、集計、フィルタリングの実行など)。

Amazon Simple Queue Service(Amazon SQS)は、コンピューター間でやり取りされるメッセージを保存するための、信頼性のある、拡張性の高い、ホスティングされたキューを提供しています。Amazon SQS を使用すると、分散したアプリケーションコンポーネント間でデータを簡単に移動でき、自動化されたワークフローのようなメッセージレベルでの確認/失敗セマンティクスを備えたメッセージを独立して処理するアプリケーションを構築できます。

Q: Amazon Kinesis Streams および Amazon SQS はそれぞれどのような場合に使用しますか?

Amazon Kinesis Streams は次のような要件のユースケースにお勧めします。

  • 関連性のあるレコードを同じレコードプロセッサにルーティングする場合(MapReduce のストリーミングなど)。たとえば、特定のキーに対するすべてのレコードを同じレコードプロセッサにルーティングすると、カウントや集計が簡単になります。
  • レコードを並べ替える場合。例えば、ログステートメントの順序を維持しながら、アプリケーションホストから処理/アーカイブホストにログデータを転送できます。
  • 複数のアプリケーションが同じストリームを同時に使用する機能。例えば、リアルタイムダッシュボードを更新するアプリケーションと、データを Amazon Redshift にアーカイブするアプリケーションがあるものとします。両方のアプリケーションで、同じストリームからのデータを同時に、独立して使用できます。
  • レコードを数時間後に同じ順序で使用する機能。例えば、請求アプリケーションと、請求アプリケーションから何時間か後に実行する監査アプリケーションがあるものとします。Amazon Kinesis Streams ではデータを最大で 7 日間保存されるので、請求アプリケーションより最大 7 日間後に監査アプリケーションを実行できます。

Amazon SQS は次のような要件のユースケースに推奨されます。

  • メッセージングセマンティクス(メッセージレベルの確認/失敗など)および可視性タイムアウト。例えば、作業項目のキューがあり、各項目の正常な完了を個別に追跡するものとします。Amazon SQS は確認/失敗を追跡するので、アプリケーションでは永続的なチェックポイント/カーソルを保持する必要がありません。Amazon SQS は、確認されたメッセージを削除し、失敗したメッセージは設定されている可視性タイムアウトの後で再配信します。
  • 個別メッセージの遅延。例えば、ジョブキューがあり、遅延のある個別のジョブをスケジュールする必要があるものとします。Amazon SQS では、個々のメッセージに最大で 15 分の遅延を設定できます。
  • 読み取り時における同時性/スループットの動的な拡張。例えば、作業キューがあり、バックログが解消されるまでリーダーを追加する必要があるものとします。Amazon Kinesis Streams では、十分な数のシャードにスケールアップできます (ただし、前もって十分なシャードを準備しておく必要があります)。
  • Amazon SQS の機能を利用した透過的な拡張。例えば、負荷の一時的な上昇や事業の自然な成長の結果として、バッファ要求や負荷が変化するような場合です。各バッファ要求は個別に処理できるので、ユーザーがプロビジョニングを指示しなくても、Amazon SQS は透過的に拡張して負荷を処理できます。


Q: シャードとは何ですか?

シャードとは、Amazon Kinesis ストリームの基本的なスループットの単位です。1 シャードは、1 MB/秒のデータ入力と 2 MB/秒のデータ出力の能力を提供します。1 つのシャードは 1 秒当たり最大 1,000 件の PUT レコードをサポートできます。ストリームを作成するときに、必要なシャードの数を指定します。たとえば、2 シャードのストリームを作成できます。このストリームは、データ入力のスループットが 2 MB/秒、データ出力のスループットが 4 MB/秒で、1 秒間に最大 2,000 件の PUT レコードに対応できます。Amazon Kinesis Streams でのシャードレベルのメトリクスをモニタリングし、ストリームのリシャーディングによって、ストリームに対しデータスループットの変化に応じたシャードの追加や削除を行えます。

Q: レコードとは何ですか?

レコードとは、Amazon Kinesis ストリームに保存されるデータの単位です。レコードは、シーケンス番号パーティションキー、データ BLOB で構成されています。データ BLOB はデータ生成元がストリームに追加する、処理対象のデータです。データ BLOB(Base64 エンコーディング前のデータペイロード)の最大サイズは、1 メガバイト (MB) です。

Q: パーティションキーとは何ですか?

パーティションキーは、レコードを分離してストリームの異なるシャードにルーティングするために使用されます。パーティションキーは、データを Amazon Kinesis ストリームに追加するときにデータ生成元によって指定されます。たとえば、2 つのシャード(シャード 1 とシャード 2)で構成されるストリームがあるものとします。2 つのパーティションキー(キー A とキー B)を使用し、キー A のレコードはすべてシャード 1 に追加され、キー B のレコードはすべてシャード 2 に追加されるように、データ生成元を設定できます。

Q: シーケンス番号とは何ですか?

シーケンス番号とは、各レコードの一意の識別子です。データ生成元が PutRecord または PutRecords オペレーションを呼び出してデータを Amazon Kinesis ストリームに追加すると、Amazon Kinesis によってシーケンス番号が割り当てられます。同じパーティションキーのシーケンス番号は一般的に、時間の経過とともに大きくなります。PutRecord または PutRecords リクエスト間の期間が長くなるほど、シーケンス番号は大きくなります。


Q: Amazon Kinesis ストリームの作成方法を教えてください。

アマゾン ウェブ サービスにサインアップした後、Amazon Kinesis Management Console または Amazon Kinesis CreateStream オペレーションを使用して Amazon Kinesis ストリームを作成できます。

Q: Amazon Kinesis ストリームのスループットはどのように決定されますか?

Amazon Kinesis ストリームのスループットは、ストリーム内のシャードの数によって決まります。次に、ストリームで必要なシャードの数の初期値を推定する手順を説明します。リシャーディングによってストリーム内のシャードの数を動的に調整できます。

  1. ストリームに書き込まれるレコードの平均サイズをキロバイト(KB)単位で推定し、最も近い KB 値に切り上げます。(average_data_size_in_KB
  2. 1 秒当たりにストリームに書き込まれるレコード数を推定します。(number_of_records_per_second
  3. ストリームからのデータを同時に独立して使用する Amazon Kinesis アプリケーションの数を決定します。(number_of_consumers
  4. 入力書き込み帯域幅の KB 数を計算します(incoming_write_bandwidth_in_KB)。これは、average_data_size_in_KBnumber_of_records_per_seconds を掛け合わせた値です。
  5. 出力読み取り帯域幅の KB 数を計算します(outgoing_read_bandwidth_in_KB)。これは、incoming_write_bandwidth_in_KBnumber_of_consumers を掛け合わせた値です。

その後、次の式を使用してストリームで必要な初期シャード数(number_of_shards)を計算できます。

number_of_shards = max (incoming_write_bandwidth_in_KB/1000, outgoing_read_bandwidth_in_KB/2000)

Q: Amazon Kinesis ストリームに要求できる最小スループットはどれくらいですか?

Amazon Kinesis ストリームのスループットはシャードの単位で増減します。ストリームの最小スループットは 1 シャードであり、1 MB/秒のデータ入力と 2 MB/秒のデータ出力を提供します。

Q: Amazon Kinesis ストリームに要求できる最大スループットはどれくらいですか?

Amazon Kinesis ストリームのスループットは、制限なしにスケールするように設計されています。デフォルトでは、各アカウントはリージョンごとに 10 シャードをプロビジョニングできます。Amazon Kinesis Streams の制限フォームを使用して、単一リージョン内で 10 より多くのシャードを申請できます。

Q: レコードのサイズは Amazon Kinesis ストリームのスループットにどのように影響しますか?

シャードは、1 MB/秒のデータ入力速度を提供し、1 秒間に最大 1,000 件の PUT レコードをサポートします。したがって、レコードのサイズが 1 KB より小さい場合、シャードの実際のデータ入力速度は 1 MB/秒より小さくなり、1 秒間の PUT レコードの最大数によって制限されます。


Q: Amazon Kinesis ストリームにデータを追加するにはどうすればよいですか?

PutRecord および PutRecords オペレーション、Amazon Kinesis Producer Library (KPL) または Amazon Kinesis Agent 経由で、Amazon Kinesis ストリームにデータを追加できます。

Q: PutRecordPutRecords の違いは何ですか?

PutRecord オペレーションは、1 度の API 呼び出しで単一のデータレコードを許可し、PutRecords オペレーションは、1 度の API 呼び出しで複数のデータレコードを許可します。PutRecord および PutRecords オペレーションの詳細については、PutRecord および PutRecords をご覧ください。

Q: Amazon Kinesis Producer Library (KPL) とは何ですか?

Amazon Kinesis Producer Library (KPL) とは、Amazon Kinesis ストリームにデータを格納するのに役立つ、使いやすく、高度な設定が可能なライブラリです。KPL は、最低限のクライアントリソースを使用して、高いプロデューサースループットを素早く実現できる、シンプルで非同期の、信頼のおけるインターフェイスを提供します。

Q: Amazon Kinesis API にアクセスするにはどのようなプログラミング言語とプラットフォームを使用できますか?

Amazon Kinesis API はアマゾン ウェブ サービス SDK で使用できます。アマゾン ウェブ サービス SDK 用のプログラミング言語またはプラットフォームのリストについては、「Tools for Amazon Web Services」を参照してください。

Q: Amazon Kinesis Producer Library (KPL) では、どのプログラミング言語を使用できますか?

Amazon Kinesis Producer Library (KPL) のコアは、C++ モジュールで構築されており、最近の C++ コンパイラを使用して、任意のプラットフォームで動作するようにコンパイルできます。ライブラリは、現在 Java インターフェイスで利用できます。他のプログラミング言語でのサポートも予定されています。

Q: Amazon Kinesis Agent とは何ですか?

Amazon Kinesis Agent は、データの収集および Amazon Kinesis ストリームへのデータの送信を容易にする、事前に構築された Java アプリケーションです。このエージェントは、ウェブサーバー、ログサーバーおよびデータベースサーバーなど、Linux ベースのサーバー環境にインストールできます。エージェントによって特定のファイルがモニタリングされ、継続的にデータがストリームに送られます。詳細については、Writing with Agents を参照してください。

Q: Amazon Kinesis Agent ではどのプラットフォームがサポートされていますか?

Amazon Kinesis Agent では現在 Amazon Linux または Red Hat Enterprise Linux がサポートされています。

Q: Amazon Kinesis Agent はどこから入手できますか?

次のコマンドとリンクを使用して Amazon Kinesis Agent をダウンロードおよびインストールできます。

Amazon Linux の場合: sudo yum install –y aws-kinesis-agent

Red Hat Enterprise Linux の場合: sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

GitHub から: awlabs/amazon-kinesis-agent

Q: Amazon Kinesis Agent を使用するにはどうすればよいですか?

Amazon Kinesis Agent をサーバーにインストールした後、ディスクの特定のファイルを監視するように設定すると、新しいデータを Amazon Kinesis ストリームに継続的に送信するようになります。詳細については、Writing with Agents を参照してください。

Q: データ生成元が Amazon Kinesis ストリームにデータを追加している間にストリームの容量制限を超えた場合はどうなりますか?

Amazon Kinesis ストリームの容量制限は、ストリーム内のシャードの数によって決定します。データスループットまたは PUT レコードの数によって、この制限を超える可能性があります。容量制限を超えている間、PUT データの呼び出しは ProvisionedThroughputExceeded 例外で拒否されます。このような状況がストリームの入力データ速度の一時的な上昇によるものである場合は、データ生成元が再試行することによって最終的に要求は完了します。一方、ストリームの入力データ速度が高い状態が継続している場合は、ストリーム内のシャードの数を増やして、PUT データの呼び出しが常に成功するのに十分な容量を提供する必要があります。いずれの場合も、Amazon CloudWatch メトリクスを使用することで、ストリームの入力データ速度の変化および ProvisionedThroughputExceeded 例外の発生を把握できます。

Q: PutRecord または PutRecords の呼び出しの間の Amazon Kinesis ストリームのデータスループットに対してカウントされるデータは何ですか?

データ BLOBパーティションキー、およびストリーム名が、PutRecord または PutRecords の呼び出しに必要なパラメータです。データ BLOB のサイズ (Base64 エンコーディングの前に)、およびパーティションキーのサイズが、Amazon Kinesis ストリームのデータスループットに対してカウントされます。これは、ストリーム内のシャードの数によって決まります。


Q: Amazon Kinesis アプリケーションとは何ですか?

Amazon Kinesis アプリケーションとは、Amazon Kinesis ストリームからのデータを読み取って処理するデータコンシューマです。アプリケーションは、Amazon Kinesis API または Amazon Kinesis クライアントライブラリ(KCL)を使用して構築できます。

Q: Amazon Kinesis クライアントライブラリ(KCL)とは何ですか?

Java/Python/Ruby/Node.js/.NET の Amazon Kinesis クライアントライブラリ (KCL) はビルド済みのライブラリであり、これを使用すると Amazon Kinesis ストリームからデータを読み取って処理する Amazon Kinesis アプリケーションを簡単に作成できます。KCL は、ストリームボリュームの変化への適応、ストリーミングデータの負荷分散、分散サービスの調整、データ処理の耐障害性などの複雑な問題に対応します。KCL を利用することで、アプリケーションの構築中にビジネスロジックに集中できます。

Q: Amazon Kinesis コネクタライブラリとは何ですか?

Amazon Kinesis コネクタライブラリはビルド済みのライブラリで、これを使用することにより、Amazon Kinesis Streams を他の AWS の各種サービスやサードパーティ製ツールと簡単に統合できるようになります。Java/Python/Ruby/Node.js/.NET の Amazon Kinesis クライアントライブラリ (KCL) は、Amazon Kinesis コネクタライブラリを使用するために必要です。このライブラリの現在のバージョンでは、Amazon DynamoDBAmazon RedshiftAmazon S3Elasticsearch に対するコネクタが提供されています。またライブラリには、各タイプのサンプルコネクタと、サンプルを実行するための Apache Ant ビルドファイルも含まれています。

Q: Amazon Kinesis Storm Spout とは何ですか?

Amazon Kinesis Storm Spout はビルド済みのライブラリで、Amazon Kinesis Streams と Apache Storm を簡単に統合できます。Amazon Kinesis Storm Spout の現在のバージョンは、Amazon Kinesis ストリームからデータをフェッチし、そのデータをタプルとして送出します。信頼性が高くスケーラブルなストリームキャプチャ、ストレージ、および再生サービスとして Amazon Kinesis Streams を活用するには、Spout を Storm トポロジに追加します。

Q: Amazon Kinesis クライアントライブラリ (KCL)、Amazon Kinesis コネクタライブラリ、Amazon Kinesis Storm Spout は、どのようなプログラミング言語で使用できますか?

Amazon Kinesis クライアントライブラリ (KCL) は、現在 JavaPythonRubyNode.js.NET で利用可能です。現在、Amazon Kinesis コネクタライブラリAmazon Kinesis Storm Spout は Java で使用できます。他のプログラミング言語でのサポートも予定されています。

Q: Amazon Kinesis アプリケーションには Amazon Kinesis クライアントライブラリ(KCL)を使用する必要があるのですか?

いいえ。Amazon Kinesis API を使用して Amazon Kinesis アプリケーションを構築することもできます。ただし、可能な場合は Java/Python/Ruby/Node.js/.NET の Amazon Kinesis クライアントライブラリ (KCL) を使用することをお勧めします。KCL は分散ストリーム処理に関係する作業量の多いタスクを実行し、Amazon Kinesis アプリケーション開発の生産性を向上させるからです。

Q: Amazon Kinesis クライアントライブラリ (KCL) と Amazon Kinesis アプリケーションとの交信はどのように行われますか?

Java | Python | Ruby | Node.js | .NET の Amazon Kinesis クライアントライブラリ (KCL) が、Amazon Kinesis Streams と Amazon Kinesis アプリケーションの間の仲介役として機能します。KCL は IRecordProcessor インターフェイスを使用してアプリケーションと交信します。アプリケーションでこのインターフェイスを実装すると、KCL はこのインターフェイスのメソッドを使用してアプリケーションのコードを呼び出します。

KCL を使用して Amazon Kinesis アプリケーションを構築する方法の詳細については、「Developing Consumer Applications for Amazon Kinesis Using the 」をご覧ください。

Q: Amazon Kinesis クライアントライブラリ(KCL)によって生成されるワーカーおよびレコードプロセッサとは何ですか?

Amazon Kinesis アプリケーションは複数のアプリケーションインスタンスを持つことができ、ワーカーは各アプリケーションインスタンスに対応する処理ユニットです。レコードプロセッサは、Amazon Kinesis ストリームのシャードからのデータを処理する処理ユニットです。1 つのワーカーは 1 つまたは複数のレコードプロセッサに対応します。1 つのレコードプロセッサは 1 つのシャードに対応し、そのシャードからのデータレコードを処理します。

起動時に、アプリケーションは Java/Python/Ruby/Node.js/.NET の Amazon Kinesis クライアントライブラリ (KCL) を呼び出してワーカーをインスタンス化します。この呼び出しは、アプリケーションの設定情報(ストリーム名や AWS の認証情報など)を KCL に提供します。また、この呼び出しは IRecordProcessorFactory の実装に対してリファレンスを渡します。KCL はこのファクトリを使用して、ストリームからのデータを処理するために必要なときに、新しいレコードプロセッサを作成します。KCL はこれらのレコードプロセッサと IRecordProcessor を使用して交信します。

Q: Amazon Kinesis クライアントライブラリ(KCL)は Amazon Kinesis アプリケーションによって処理されるデータレコードをどのようにして追跡するのですか?

Java/Python/Ruby/Node.js/.NET の Amazon Kinesis クライアントライブラリ (KCL) は、各 Amazon Kinesis アプリケーションAmazon DynamoDB テーブルを自動的に作成し、リシャーディングイベントやシーケンス番号チェックポイントなどの状態情報を追跡および管理します。DynamoDB テーブルはアプリケーションと同じ名前なので、アプリケーションの名前が同じリージョン内の同じアカウントにある既存の DynamoDB テーブルと競合していないことを確認する必要があります。

同じアプリケーション名と関連付けられたすべてのワーカーは、連係して同じ Amazon Kinesis ストリームを処理していると見なされます。同じアプリケーションコードの追加のインスタンスを実行するときに、アプリケーション名が異なる場合、KCL は 2 番目のインスタンスを、同じストリームを処理するまったく別のアプリケーションと見なします。

Amazon Kinesis Streams に関するコストに加えて、Amazon DynamoDB テーブルに関するコストもアカウントに請求されることに注意してください。

KCL がアプリケーションの状態を追跡する方法の詳細については、「Tracking Amazon Kinesis Application state」を参照してください。

Q: Amazon Kinesis クライアントライブラリ(KCL)を使用して Amazon Kinesis アプリケーションの処理能力を自動的にスケールアップする方法を教えてください。

Amazon Kinesis アプリケーションの複数のインスタンスを作成し、これらのアプリケーションインスタンスを Auto Scaling グループの一部である Amazon EC2 インスタンスのセットで実行します。処理の需要が増加すると、アプリケーションインスタンスを実行する Amazon EC2 インスタンスが自動的にインスタンス化されます。Java/Python/Ruby/Node.js/.NET の Amazon Kinesis クライアントライブラリ (KCL) は、この新しいインスタンスのワーカーを生成し、レコードプロセッサを過負荷になった既存のインスタンスからこの新しいインスタンスに自動的に移動します。

Q: Amazon Kinesis ストリーム内にデータがあるのに GetRecords の呼び出しが空の結果を返すのはなぜですか?

可能性のある理由の 1 つは、現在のシャード反復子によって指定されている位置にレコードがないことです。このようなことは、シャード反復子タイプとして TRIM_HORIZON を使用している場合であっても発生する可能性があります。Amazon Kinesis ストリームはデータの連続したストリームを表します。ループ内で GetRecords オペレーションを呼び出す必要があります。そうすれば、データレコードが格納されている位置にシャード反復子が進んだときに、データレコードが返されます。

Q: GetRecords オペレーションに返される "ApproximateArrivalTimestamp" とは何ですか?

レコードには、"ApproximateArrivalTimestamp" と呼ばれる値が含まれています。その値は、レコードが Amazon Kinesis によって正常に受信および保存された時に設定されます。このタイムスタンプにはミリ秒での精度があり、タイムスタンプの精度についての保証はありません。例えば、シャードの中またはストリーム全体のレコードには順序が入れ替わっているタイムスタンプがあるかもしれません。

Q: Amazon Kinesis アプリケーションがストリームからデータを読み取っている間に Amazon Kinesis ストリームの容量制限を超えた場合はどうなりますか?

Amazon Kinesis ストリームの容量制限は、ストリーム内のシャードの数によって決定します。データスループットまたは READ データの呼び出しの数によって、この制限を超える可能性があります。容量制限を超えている間、READ データの呼び出しは ProvisionedThroughputExceeded 例外で拒否されます。このような状況がストリームの出力データ速度の一時的な上昇によるものである場合は、Amazon Kinesis アプリケーションによりが再試行され、最終的に要求は完了します。一方、ストリームの出力データ速度が高い状態が継続している場合は、ストリーム内のシャードの数を増やして、READ データの呼び出しが常に成功するのに十分な容量を提供する必要があります。いずれの場合も、Amazon CloudWatch メトリクスを使用することで、ストリームの出力データ速度の変化および ProvisionedThroughputExceeded 例外の発生を把握できます。


Q: Amazon Kinesis ストリームのスループットを変更する方法を教えてください。

ストリームのスループットを変更するには 2 つの方法があります。UpdateShardCount API または AWS マネジメントコンソールを使用して、ストリーム内のシャードの数をスケールするか、ストリーム内のシャードの数を調整 (リシャーディング) することで Amazon Kinesis ストリームのスループットを変更することができます。

Q: UpdateShardCount または AWS マネジメントコンソールを使用して Amazon Kinesis ストリームのスループットを変更するには、どれくらい時間がかかりますか?

通常のスケールリクエストの場合は、数分で完了します。大きなスケールリクエストの方が小さいものより長く時間がかかります。

Q: UpdateShardCount の制限事項は何ですか?

UpdateShardCount の制限事項の詳細については、Amazon Kinesis Streams Service API リファレンスを参照してください。

Q: UpdateShardCount またはリシャーディングによって Amazon Kinesis ストリームのスループットを変更している間も、Amazon Kinesis Streams を使用できますか?

はい。UpdateShardCount またはリシャーディングによってストリームのスループットを変更している間も、Amazon Kinesis ストリームへのデータの追加およびストリームからのデータの読み取りを続けることができます。

Q: リシャーディングとは何ですか?

リシャーディングとは、一連のシャードの分割や結合を使用してストリームをスケールするために使用するプロセスのことです。シャードの分割では、1 つのシャードが 2 つのシャードに分割されて、ストリームのスループットが上がります。シャードの結合では、2 つのシャードが 1 つのシャードに結合されて、ストリームのスループットが下がります。詳細については、Amazon Kinesis Streams 開発者ガイドResharding a Stream を参照してください。

Q: リシャーディングによる Amazon Kinesis ストリームのスループットの変更は、どれくらいの頻度で実行でき、どれくらい時間がかかりますか?

シャードの分割や結合などのリシャーディングオペレーションにかかる時間は、数秒間です。一度に実行できるリシャーディングオペレーションは 1 つだけです。したがって、シャードが 1 つだけの Amazon Kinesis ストリームの場合、シャードを分割してスループットを 2 倍にするには数秒かかります。1000 シャードのストリームの場合、1000 個のシャードを分割してスループットを 2 倍にするには 30 K 秒(8.3 時間)かかります。スループットの追加が必要になる場合は、早めにストリームのスループットを増やしておくことをお勧めします。

Q: Amazon Kinesis ストリームのデータ保持期間を変更するにはどうしたらよいですか?

Amazon Kinesis のデータは、デフォルトで最大 24 時間保存されます。拡張データ保持を有効にすることにより、データ保持期間を最大 7 日間まで延長できます。

データ保持期間の変更に関する詳細は、データ保持期間を変更するをご覧ください。

Q: Amazon Kinesis ストリームの動作とパフォーマンスをモニタリングするにはどうすればいいですか?

Amazon Kinesis Streams マネジメントコンソールには、Amazon Kinesis ストリームのデータの入力および出力のスループットなど、動作とパフォーマンスの重要なメトリクスが表示されます。また Amazon Kinesis Streams は Amazon CloudWatch とも統合できるため、ストリームおよびストリーム内のシャードの CloudWatch メトリクスの収集、表示、分析が行えます。Amazon Kinesis Streams のメトリクスの詳細については、Amazon CloudWatch による Amazon Kinesis Streams のモニタリングを参照してください。

すべてのストリームレベルのメトリクスは無料であることにご注意ください。すべての有効なシャードレベルのメトリクスは Amazon CloudWatch 料金で課金されます。

Q: Amazon Kinesis ストリームへのアクセスを管理および制御する方法を教えてください。

Amazon Kinesis Streams は、AWS の各種サービスとリソースへのユーザーアクセスを安全に制御できるサービスである AWS Identity and Access Management (IAM) と統合しています。例えば、特定のユーザーまたはグループだけに Amazon Kinesis ストリームへのデータの追加を許可するポリシーを作成できます。ストリームのアクセスの管理と制御に関する詳細については、IAM により Amazon Kinesis Streams リソースへのアクセスを制御するをご覧ください。

Q: セキュリティの分析と動作のトラブルシューティングのために Amazon Kinesis ストリームに対して行われた API 呼び出しのログを記録する方法を教えてください。

Amazon Kinesis は、ユーザーのアカウントに対する AWS API の呼び出しを記録してログファイルを提供するサービスである Amazon CloudTrail と統合できます。API 呼び出しのログおよびサポートされる Amazon Kinesis API のリストの詳細については、「AWS CloudTrail を使用した Kinesis API 呼び出しのログ記録」を参照してください。

Q: Amazon Kinesis ストリームおよびストリームに関するコストを効率よく管理する方法を教えてください。

Amazon Kinesis Streams では、リソースとコストの管理が容易になるように Amazon Kinesis ストリームにタグを付けることができます。タグは、AWS リソースの整理に役立つ、キーと値のペアとして表されるユーザー定義のラベルです。例えば、コストセンター別にストリームをタグ付けることにより、コストセンターに基づいて Amazon Kinesis Streams のコストを分類および追跡できます。Amazon Kinesis Streams のタグ付けの詳細については、「Amazon Kinesis Streams のタグ付け」を参照してください。

Q: シャード制限の利用状況はどのように把握したらよいですか?

アカウントに対するシャード制限の利用状況は、DescribeLimits API を使用して把握できます。 DescribeLimits API は、お使いのアカウントのシャード制限と開いているシャードの数を返します。シャード制限を引き上げる必要がある場合は、制限の引き上げをリクエストしてください。


Q: Kinesis Streams を使用すると、データはどれくらい安全ですか?

Kinesis はデフォルトで安全に保護されています。アカウントとストリームの所有者のみが、自分が作成した Kinesis リソースにアクセスできます。Kinesis は、データへのアクセスを制御するためにユーザー認証をサポートしています。AWS IAM ポリシーを使用して、ユーザーおよびユーザーのグループに選択的に権限を付与できます。HTTPS プロトコルを使用して SSL エンドポイント経由で、Kinesis からのデータの格納と取得を安全に行うことができます。セキュリティをより高める必要がある場合は、AWS KMS マスターキーでサーバー側の暗号化を使用して、ストリームに保存されているデータを暗号化できます。AWS KMS を使用すると、AWS で生成された KMS マスターキーを暗号化に使用できます。また、必要に応じて、独自のマスターキーを AWS KMS で使用することもできます。最後に、独自の暗号化ライブラリを使用して、データを Kinesis に格納する前にクライアント側のデータを暗号化することができます。


Q: Kinesis ストリームに格納したデータは暗号化できますか?

はい。Kinesis ストリームに格納したデータを暗号化するには、2 つのオプションがあります。サーバー側の暗号化を使用することができます。これは、ストリームからデータの格納と取得を行う際に自動的にデータを暗号化および復号化する、完全に管理された機能です。または、クライアント側で暗号化と復号化を行うことで、暗号化されたデータをストリームに書き込むこともできます。

Q: クライアント側の暗号化の代わりにサーバー側の暗号化を使用するのはなぜですか?

お客様がクライアント側の暗号化よりもサーバー側の暗号化を選択することがよくあるのは、次のいずれかの理由によります。

  • クライアント側の暗号化を実施するのが難しい
  • クライアント側の暗号化の上に 2 つ目のセキュリティレイヤーが必要
  • クライアント側の鍵管理スキームを実装するのが難しい

Q: サーバー側の暗号化とは何ですか?

Kinesis Streams のサーバー側の暗号化は、ユーザーが指定した AWS KMS マスターキー (CMK) を使用して自動的にデータを暗号化してから、ストリームストレージレイヤーに書き出し、ストレージから取得した後でデータを復号化します。ストリームの書き込みや読み取りを行うユーザーが、ストリームでの暗号化のために選択されたキーを使用する権限を持っている場合を除き、暗号化によって書き込みが不可能になり、ペイロードとパーティションキーは判読不能になります。その結果、サーバー側の暗号化によって、データを管理する社内のセキュリティおよびコンプライアンス要件を容易に満たすことができます。

サーバー側の暗号化を使用すれば、クライアント側のアプリケーション (プロデューサーとコンシューマ) が暗号化を認識する必要がなく、CMK や暗号化操作を管理する必要がありません。データは Kinesis Streams サービス内で保管中も移動中も暗号化されています。サーバー側の暗号化機能で使用される CMK はすべて、AWS KMS によって提供されます。AWS KMS を使用すると、AWS で管理された Kinesis 用の CMK (「ワンクリック」暗号化方式)、AWS KMS で生成された独自の CMK、または暗号化のためにインポートした CMK を、簡単に使用できます。

Q: サーバー側の暗号化の入門ガイドはありますか?

はい。ユーザードキュメントの中に入門ガイドがあります。

Q: サーバー側の暗号化は、アプリケーションと Kinesis Streams とのやり取りに影響しますか?

その可能性はあります。これは、暗号化に使用するキーと、そのキーへのアクセスを制御する権限によって異なります。

  • AWS で管理された Kinesis 用の CMK (キーエイリアス = aws/kinesis) を使用する場合、このキーを使用して暗号化を有効または無効にすることで、アプリケーションは影響を受けません。
  • 独自の AWS KMS マスターキーや AWS KMS サービスにインポートしたマスターキーなどの異なるマスターキーを使用する場合と、ストリームのプロデューサーとコンシューマが暗号化に使用する AWS KMS CMK を使用する権限を持っていない場合、PUT リクエストと GET リクエストは失敗します。サーバー側の暗号化を使用するには、AWS KMS キーのポリシーを、メッセージの暗号化と復号化を許可するように設定する必要があります。AWS KMS の権限の例と詳細については、『AWS Key Management Service 開発者ガイド』の「AWS KMS API のアクセス権限: アクションとリソースのリファレンス」、または Kinesis Streams のサーバー側の暗号化のユーザードキュメントのアクセス権限のガイドラインを参照してください。

Q: サーバー側の暗号化の使用に伴って追加料金は発生しますか?

はい。ただし、AWS で管理された Kinesis 用の CMK を使用しており、KMS API 使用料金の無料利用枠を超えていない場合、サーバー側の暗号化の使用は無料です。次に、リソース別のコストについて説明します。

キー:

  • AWS で管理された Kinesis 用の CMK (エイリアス= "aws/kinesis") は無料です。
  • ユーザーが生成した KMS キーは、KMS キー料金の対象となります。詳細はこちらをご覧ください

KMS API の使用:

  • API 使用料金は、カスタマイズされたものを含め、CMK ごとに適用されます。データキーを更新している場合は、Kinesis Streams により約 5 分ごとに KMS が呼び出されます。1 か月を 30 日とした場合、Kinesis Streams により開始される KMS API コールの料金の合計は、数ドル未満の金額となります。この料金は、データプロデューサーとデータコンシューマーで使用するユーザー認証情報の数に応じてスケールされます (ユーザー認証情報ごとに AWS KMS に対する一意の API コールが必要なため)。IAM ロールを認証に使用する場合、各 assume-role コールにより一意のユーザー認証情報が生成されます。assume-role コールで返されるユーザー認証情報をキャッシュして、KMS の料金を節約することができます。

Q: Kinesis Streams のサーバー側の暗号化は、どの AWS リージョンで利用できますか?

Kinesis Streams のサーバー側の暗号化は、AWS GovCloud リージョンと、中国 (北京) リージョンを除くすべてのパブリックリージョンでご利用いただけます。

Q: ストリームからのサーバー側の暗号化の開始、更新、または削除するにはどうすればよいですか?

これらの操作はすべて、AWS マネジメントコンソールを使用するか AWS SDK を使用して実行できます。詳細については、Kinesis Streams のサーバー側の暗号化の入門ガイドを参照してください。

Q: サーバー側の暗号化にはどの暗号化アルゴリズムが使用されていますか?

Kinesis Streams は、暗号化に AES-GCM 256 アルゴリズムを使用します。

Q: 既にデータ (プレーンテキストまたは暗号文) が書き込まれているストリームを暗号化すると、暗号化を更新した場合にストリーム内のすべてのデータが暗号化または復号化されますか?

いいえ。ストリームに新しく書き込まれたデータだけが、新しい暗号化アプリケーションによって暗号化されます (または、復号化されたままになります)。

Q: Kinesis Streams のサーバー側の暗号化によって何が暗号化されますか?

サーバー側の暗号化によって、メッセージのペイロードと、ストリームプロデューサーアプリケーションによって指定されたパーティションキーが暗号化されます。

Q: サーバー側の暗号化はシャード固有の機能ですか? それともストリーム固有の機能ですか?

サーバー側の暗号化はストリーム固有の機能です。

Q: 特定のストリームを暗号化するために使用する CMK は変更できますか?

はい。AWS マネジメントコンソールまたは AWS SDK を使用すると、特定のストリームに適用する新しいマスターキーを選択できます。

Q: データの暗号化ライフサイクルは、サーバー側の暗号化が有効になっている Kinesis ストリームに送信した時点と取得した時点から辿ることはできますか?

以下に、Kinesis Streams が AWS KMS CMK を使用して、メッセージを暗号化してから PUT パスに格納する方法と、GET パスで取得された後に復号化する方法を示しています。サーバー側の暗号化が有効になっているストリームで putRecord(s) または getRecords を呼び出すと、Kinesis と AWS KMS が次のアクション (復号化を含む) を実行します。

  1. お客様の Kinesis プロデューサーアプリケーション (クライアント) から HTTPS 経由で SSL を使用して、データが Kinesis に送信されます。
  2. データは Kinesis で受信されて RAM に格納されます。暗号化はレコードのペイロードとパーティションキーに適用されます。
  3. Kinesis が Input Keying Material (IKM) を要求し、お客様の選択した KMS マスターキーを使用して IKM のコピーが暗号化されます。
  4. AWS KMS が IKM を作成し、マスターキーを使用してそれを暗号化し、プレーンテキストの IKM と暗号化された IKM の両方を Kinesis に送信します。
  5. Kinesis がプレーンテキストの IKM を使用して、レコードごとに固有のデータキーを導出します。
  6. Kinesis がデータキーを使用してペイロードとパーティションキーを暗号化し、メモリからプレーンテキストのキーを削除します。
  7. Kinesis が暗号化されたデータに暗号化された IKM を追加します。
  8. プレーンテキストの IKM は、5 分後に期限が切れるまで再利用のためにメモリにキャッシュされます。
  9. Kinesis が暗号化されたメッセージをバックエンドストアに配信します。ここで、メッセージは getRecords 呼び出しによって取得可能な状態で保管されます。

getRecords を呼び出すと、Kinesis と AWS KMS は次のアクション (復号化を含む) を実行します。

  1. getRecords 呼び出しが行われると、Kinesis のフロントエンドがバックエンドサービスから暗号化されたレコードを取得します。
  2. Kinesis が、お客様のリクエストによって生成されたトークンを使用して KMS にリクエストを行います。AWS KMS がそれを承認します。
  3. Kinesis が、レコードと共に格納されている暗号化された IKM を復号化します。
  4. Kinesis が、復号化された IKM からレコードごとのデータキーを再作成します。
  5. 承認されている場合、Kinesis がペイロードを復号化し、メモリからプレーンテキストのデータキーを削除します。
  6. Kinesis が、レコードをリクエストしている Kinesis のコンシューマ (クライアント) に、SSL および HTTPS を介してペイロードを配信します。

 


Q: Amazon Kinesis Streams は AWS 無料利用枠の対象ですか?

いいえ。現在、Amazon Kinesis Streams は AWS 無料利用枠の対象になっていません。AWS 無料利用枠は、AWS サービスのグループの試用を無料で提供するプログラムです。AWS 無料利用枠の詳細については、「AWS Free Tier」を参照してください。

Q: Amazon Kinesis Streams の費用はどれくらいですか?

Amazon Kinesis Streams ではシンプルな従量課金制を使用しています。前払い料金や最低料金はなく、使用したリソースに対してのみお支払いいただきます。Amazon Kinesis Streams のコストには 2 つのコアディメンションおよび 1 つのオプションのディメンションがあります。

  • Amazon Kinesis ストリーム内のシャードの数によって決まる、時間あたりのシャード費用。
  • データ生成元がストリームに追加する 25 KB のペイロードユニット数によって決まる、PUT ペイロードユニットの費用。
  • オプションの拡張データ保持のコストはストリームにかかったシャード時間によって決まります。 

Amazon Kinesis Streams の費用の詳細については、Amazon Kinesis Streams の料金を参照してください。

Q: PutRecord オペレーションの代わりに PutRecords オペレーションを使用することで、PUT ペイロードユニットの費用は変わりますか?

PUT ペイロードユニットの料金は、Amazon Kinesis ストリームに追加された 25 KB のペイロードユニット数に基づき計算されます。PUT ペイロードユニットの費用は、PutRecords オペレーションでも、PutRecord オペレーションでも同じです。

Q: "CLOSED" 状態にあるシャードに対して請求されますか?

リシャーディングの後、シャードは "CLOSED" 状態になるかもしれません。"CLOSED" 状態のシャードには請求されません。

Q: Amazon Kinesis Streams の費用以外に、Amazon Kinesis Streams を使用する時に発生する費用はありますか?

Amazon Kinesis アプリケーションを実行するために Amazon EC2 を使用する場合は、Amazon Kinesis Streams の費用に加えて Amazon EC2 リソースの費用が請求されます。

Amazon Kinesis クライアントライブラリ (KCL) では、レコード処理の状態情報を追跡するために Amazon DynamoDB テーブルが使用されます。KCL を Amazon Kinesis アプリケーションに使用する場合、Amazon Kinesis Streams の費用に加えて Amazon DynamoDB リソースの費用が請求されます。

拡張シャードレベルのメトリクスを有効にする場合、Amazon Kinesis Streams の費用に加えて、有効化されたシャードレベルのメトリクスに関連付けられた Amazon CloudWatch の費用が請求されます。

これら 3 つは一般的なケースですが、すべてではないことにご注意ください。