Amazon Web Services ブログ

Amazon Kinesis Data Generatorを使用してストリーミングデータソリューションをテストする

ストリーミングデータソリューションを構築する場合、ほとんどのお客様は、本番データと同様のデータを使用してストリーミングデータソリューションをテストしたいと考えています。この、データを作成してソリューションにストリーミングすることは、ソリューションをテストする際の最も退屈な作業かもしれません。

Amazon Kinesis StreamsAmazon Kinesis Firehoseを使用すると、数十万のソースから1時間にテラバイト級のデータを連続的に捉えて保存できます。 Amazon Kinesis Analyticsでは、標準SQLを使用してリアルタイムでこのデータを分析および集計することができます。 AWS Management Console(またはAWS CLIまたはAmazon Kinesis APIを使用したいくつかのコマンド)で数回クリックするだけで、Amazon KinesisストリームまたはFirehose配信ストリームを簡単に作成できます。ただし、テストデータの連続したストリームを生成するには、AWS SDKまたはCLIを使用してAmazon Kinesisにテストレコードを送信することで、連続して実行されるカスタムプロセスまたはスクリプトを作成する必要があります。この作業はソリューションを適切にテストするために必要ですが、複雑さと開発時間とテスト時間が長くなることを意味します。

テストデータを生成してAmazon Kinesisに送信するユーザーフレンドリーなツールがあれば素晴らしいとは思いませんか?そこで、Amazon Kinesis Data Generator(KDG)の出番です。

KDGの概要

KDGは、データを生成してAmazon Kinesisに送信する作業を簡素化します。このツールは、ブラウザで直接実行されるユーザーフレンドリーなUIを提供します。 KDGを使用すると、次のことができます。

  • 特定のユースケースのレコードを表すテンプレートを作成する
  • テンプレートに固定データまたはランダムデータを設定する
  • 将来の使用のためにテンプレートを保存する
  • Amazon KinesisストリームまたはFirehose配信ストリームに毎秒数千のレコードを連続して送信する

KDGはオープンソースで、GitHubのAmazon Kinesis Data Generatorリポジトリでソースコードを見つけることができます。このツールは、ブラウザで直接実行される静的なHTMLファイルとJavaScriptファイルのコレクションであるため、プロジェクトをダウンロードまたはクローンすることなくすぐに使用することができます。これはGitHubの静的サイトとして有効になっており、アクセスするための短縮URLをを用意しました。

すぐに開始するには、http://amzn.to/datagenで確認してください。

KDGの使用

KDGを始めるには、3つの簡単なステップが必要です。

  1. AWSアカウントにAmazon Cognitoのユーザーを作成します(初回のみ)
  2. このユーザーの認証情報を使用してKDGにログインします
  3. データ用のレコードテンプレートを作成します

これらの手順を完了すると、StreamsまたはFirehoseにデータを送信できます。

Amazon Cognitoユーザーの作成

KDGは、Amazon Cognitoをユーザーリポジトリとユーザー認証に使用するモバイルアプリケーションの良い例であり、AWS JavaScript SDKはブラウザから直接AWSサービスと通信します。 Amazon Cognitoを使用する独自のJavaScriptアプリケーションを構築する方法については、AWS Mobile Blogの、Use Amazon Cognito in your website for simple AWS authenticationを参照してください。

Amazon Kinesisストリームにデータを送信する前に、Amazon Cognitoユーザーをご自身のAWSアカウントで作成し、StreamsとFirehoseに書き込みができるようにします。ユーザーを作成するときは、そのユーザーのユーザー名とパスワードを作成します。これらの認証情報を使用してKDGにサインインします。アカウントにAmazon Cognitoユーザーを簡単に作成できるように、Lambda関数とCloudFormationテンプレートも用意してあります。 AWSアカウントでAmazon Cognitoユーザーを作成する方法の詳細については、Configure Your AWS Accountを参照してください。

注:初めてKDGにアクセスするときは、CloudFormationスタックの出力で提供されるURLを使用することをお勧めします。このURLには、KDGが必要とするパラメータが含まれています。 KDGはこれらのパラメータの値をローカルに保存するので、以降は、短縮URL http://amzn.to/datagenを使用してツールにアクセスできます。

KDGへのログイン

ご自身のアカウントでAmazon Cognitoのユーザーを作成したら、次はKDGにログインします。これを行うには、前に作成したユーザー名とパスワードを入力します。

メインページでは、データテンプレートを設定し、Amazon KinesisストリームまたはFirehose配信ストリームにデータを送信することができます。

基本的なコンフィグは、とても簡単です。ページのすべてのフィールドは必須です:

  • Region:ストリーミングデータを受け取るAmazon KinesisストリームまたはFirehose配信ストリームを含むAWSリージョンを選択します
  • Stream/firehose name:ストリーミングデータを受信するストリームまたは配信ストリームの名前を選択します
  • Records per second:ストリームまたは配信ストリームに1秒ごとに送信するレコードの数を入力します
  • Record template:KDGによって送信される各レコードに使用される生データまたはデータ構造を表すテンプレートを入力します。データのテンプレートの作成については、この記事の後半の、レコードテンプレートの作成、を参照してください。

1秒あたりのレコード数を設定するときは、KDGをアプリケーションの負荷テスト用のデータプロデューサーにはならないと考えてください。ただし、ブラウザの1つのタブから数千のレコードを簡単に送信することができます。これは、ほとんどのアプリケーションで十分なデータです。テストでは、KDGは単一のAmazon Kinesisストリームに毎秒8万レコードを記録しましたが、状況により異なる場合が充分あります。レコードを生成する最大レートは、コンピュータのスペックとレコードテンプレートの複雑さによって異なります。

ストリームまたは配信ストリームが適切に拡大/縮小されていることを確認します。

  • Amazon Kinesisストリームに1,000レコード/秒または1 M​​B /秒
  • Firehose配信ストリームに5,000レコード/秒または5 MB /秒

確認を怠ると、Amazon Kinesisはレコードを拒否してしまい、希望のスループットを達成できません。シャードを追加してストリームに容量を追加する方法の詳細については、ストリームをリシャーディングする、を参照してください。配信ストリームの容量を増やす方法については、Amazon Kinesis Firehose Limits、を参照してください。

レコードテンプレートの作成


Record Templateフィールドはフリーテキストのフィールドで、単一のストリーミングデータレコードを表す任意のテキストを入力できます。 Amazon Kinesisに送信される各レコードが同一になるように、1行の静的データを作成することもできますし、テキストをテンプレートとしてフォーマットすることもできます。

この場合、KDGは、レコードを送信する前に、テンプレートの一部を偽のデータまたはランダムなデータで置き換えます。これにより、データストリームに送信される各レコードにランダム性または変動性を与えることができます。 KDGは、オープンソースライブラリであるFaker.jsを使用して、偽のデータを生成します。詳細については、GitHubのfaker.jsプロジェクトページを参照してください。このライブラリがどのように機能するかを見る最も簡単な方法は、例を見ることでしょう。

気象センサのInternet of Things(IoT)デバイスから送信されるレコードをシミュレートするには、各レコードをJSONでフォーマットする必要があります。以下は、最終的な記録がどのように見えるかの例です:

{
	"sensorId": 40,
	"currentTemperature": 76,
	"status": "OK"
}

この使用例では、50個のセンサーの1つからデータを送信することをシミュレートしたいので、sensorIDフィールドは1〜50の整数にすることができます。温度値は10〜150の範囲で設定できるため、currentTemperatureフィールドには 範囲。 最後に、ステータス値はOK、FAIL、WARNの3つの値のいずれかになります。 KDGテンプレート形式では、レコードをAmazon Kinesisに送信する前に、置き換える必要のある項目を囲むために、マスタッシュ構文(二重中括弧)を使用します。 レコードをモデル化するために、テンプレートは次のようになります。

{
    "sensorId": {{random.number(50)}},
    "currentTemperature": {{random.number(
        {
            "min":10,
            "max":150
        }
    )}},
    "status": "{{random.arrayElement(
        ["OK","FAIL","WARN"]
    )}}"
}

もう1つの例を見てみましょう、Apacheアクセスログから行を表す一連のレコードをシミュレートしてみます。 単一のApacheアクセスログエントリは次のようになります。

76.0.56.179 - - [29/Apr/2017:16:32:11 -05:00] "GET /wp-admin" 200 8233 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0 rv:6.0; CY) AppleWebKit/535.0.0 (KHTML, like Gecko) Version/4.0.3 Safari/535.0.0"

次の例は、Apacheアクセスログのテンプレートを作成する方法を示しています。

{{internet.ip}} - - [{{date.now("DD/MMM/YYYY:HH:mm:ss Z")}}] "{{random.weightedArrayElement({"weights":[0.6,0.1,0.1,0.2],"data":["GET","POST","DELETE","PUT"]})}} {{random.arrayElement(["/list","/wp-content","/wp-admin","/explore","/search/tag/list","/app/main/posts","/posts/posts/explore"])}}" {{random.weightedArrayElement({"weights": [0.9,0.04,0.02,0.04], "data":["200","404","500","301"]})}} {{random.number(10000)}} "-" "{{internet.userAgent}}"

独自のテンプレートを作成する方法の詳細については、KDGドキュメントの、Record Template、を参照してください。

KDGは、作成したテンプレートをローカルのブラウザストレージに保存します。 同じコンピュータで同じブラウザを使用している限り、最大5つのテンプレートを再利用できます。

まとめ

ストリーミングデータソリューションのテストは今までにないほど簡単になります。 今すぐGitHubのKDGホストUIまたはAmazon Kinesis Data Generatorページをご覧ください。 このプロジェクトはApache 2.0ライセンスの下でライセンスされていますので、必要に応じて自由にクローンして変更してください。 そしてもちろん、GitHubを介してイシューやプルリクエストをお寄せください。

また、ご不明な点がございましたら、ぜひご質問をお寄せ下さい。

原文:Test Your Streaming Data Solution with the New Amazon Kinesis Data Generator(翻訳:半場光晴)