Kinesis Data GeneratorでKinesis Data Streamsにテストデータを投入する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
背景
Kinesisを使ったストリーミングデータ処理を効率的に開発して動作確認するためには、テストデータを継続的に投入する必要があります。
今回はAWS公式のKinesis Data Generatorというツールを使う方法をご紹介します。
How It Works
Kinesis Data GeneratorのCFnでCognito関連リソースを作成し、自身のAWSアカウントに対するKinesisの権限をブラウザアプリに発行できるようにします。
CFn実行時に指定するユーザー名とパスワードでCognito UserPoolsのユーザを作成して、Cognito Federated Identityから以下の権限を取得できるようにカスタムリソースを作成・実行します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:*:*:stream/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": [
                "arn:aws:firehose:*:*:deliverystream/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "mobileanalytics:PutEvents",
                "cognito-sync:*",
                "cognito-identity:*",
                "ec2:DescribeRegions",
                "firehose:ListDeliveryStreams",
                "kinesis:ListStreams"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
CFn実行後、Kinesis Data GeneratorのSPAからUserPoolsへの接続情報を入力してログインします。あとはテストデータのテンプレートを作成して実行ボタンを押すと、SPA内でテストデータを生成して直接Kinesis Data Analyticsにテストデータを投入し続けてくれます。
Kinesis Data Generatorのドキュメントにも記載されていますが、このテンプレート機能はFaker.jsを使って実現されています。テンプレートを作成する際は、そちらのドキュメントを参照しましょう。
この方法の利点
- CFnで展開するだけで簡単に利用を始められる
 - AWS公式ツールなので安心できる
 - テンプレートを使ったランダムなテストデータを作成できる
 - テストデータを投入し続けられる
 
手順
事前準備
AWSアカウントの作成とログインと、CFn実行に必要な権限があるか確認をしておきます。
オプションで、テストデータを投入したいKinesis Data Streamsのリソースを作成しておけばスムーズな動作確認ができます。
リソースの展開
ドキュメントをブラウザで表示し、"Create a Cognito User with CloudFormation"をクリックします。

クリックするとCFnの画面に遷移します。テンプレートURLを確認して次の画面に進みます。

CFnが作成するユーザー名とパスワードを入力します。ここで入力した値は、後ほどKinesis Data Generatorのログイン時に利用するので、忘れないようにしてください。
なお、CFnのパラメータセクションは以下のようになっています。
  "Parameters" : {
    "Username": {
      "Description": "The username of the user you want to create in Amazon Cognito.",
      "Type": "String",
      "AllowedPattern": "^(?=\\s*\\S).*$",
      "ConstraintDescription": " cannot be empty"
    },
    "Password": {
      "Description": "The password of the user you want to create in Amazon Cognito.",
      "Type": "String",
      "NoEcho": true,
      "AllowedPattern": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{6,}$",
      "ConstraintDescription": " must be at least 6 alpha-numeric characters, and contain at least one number"
    }
  },

パラメータを入力したらスタックを作成します。成功すると、以下の画像のようにURLが出力されます。

Generatorを使ってデータを投入する
CFnスタックにあるリンクをクリックして、Kinesis Data Generatorの画面に遷移します。CFnを実行した際Parametersに入力したユーザー名とパスワードでログインします。

ログイン後、以下のフォームでリージョン、Kinsis Data Streams名、データ投入速度を入力します。

あとはテンプレートを入力すれば準備完了なのですが、実際に送信するまえにテンプレートのテストをしましょう。
AWS公式ブログのサンプルを入力してみます。
{
    "sensorId": {{random.number(50)}},
    "currentTemperature": {{random.number(
        {
            "min":10,
            "max":150
        }
    )}},
    "status": "{{random.arrayElement(
        ["OK","FAIL","WARN"]
    )}}"
}
入力したテンプレートに問題が無ければ、以下のようにデータのサンプルが表示されます。

問題なければ、"Send data"をクリックしてデータの投入を開始しましょう。

まとめ
AWS公式の開発補助ツール Kinesis Data Generatorの使い方を例示しました。このツールを活用して、効率的にKiensisアプリケーションを作成しましょう。







