Kinesis Data GeneratorでKinesis Data Streamsにテストデータを投入する

背景

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アプリケーションを作成しましょう。

参考リンク