事前準備
Redshiftの作成は省略します。
いい記事がたくさんあるので。。。
Redshiftにテーブルを作成
今回はこんなテーブルを作りました。
create table logs (
id int not null,
value varchar(30) not null,
created_at timestamp not null
);
Kinesis streamsの作成
名前はlog-stream、Number of shards は1にしました。

Firehoseの作成
名前はlog-stream-firehoseにしました。
SourceでKinesis streamを選択、さっき作ったlog-streamを選んで

Step2: Process records
全てデフォルトで。。
Step3: Choose destination
Select destination
Amazon Redshiftを選択

Amazon Redshift destinationに事前に準備したRedshiftの情報を設定した後
Redshiftのセキュリティグループを編集してFirehoseからアクセスを許可します。
(水色の箱にFirehose IP addressが書かれているのでそれを許可してやる)
intermediate S3 destination
RedshiftにCOPYコマンドでデータを転送する前に一度S3にあげる先みたいです。
今回は新しく作りました。
Amazon Redshift COPY command
Step 4: Configure settings
全てデフォルト値で。IAM roleも今回新しく作りました。
動作確認
AWS コマンドラインインターフェイスをつかってデータを登録してみます。
こんなファイルを作成
{
"Records": [
{
"Data": "{\"id\": 12345, \"value\": \"click\", \"created_at\": \"2018-09-05 00:00:00\"}",
"PartitionKey": "124"
}
],
"StreamName": "log-stream"
}
AWS CLIでデータを登録
$ aws kinesis put-records --cli-input-json file:///tmp/event.json
こんな値が帰ってきたら成功です
{
"FailedRecordCount": 0,
"Records": [
{
"ShardId": "shardId-000000000000",
"SequenceNumber": "xxxxx"
}
]
}
ちょっと待ってからRedshiftでlogsテーブルをselectしてみると。。
select * from logs;
id | value | created_at
-------+-------+---------------------
12345 | click | 2018-09-05 00:00:00
注意点
JSONのキーはダブルクォーテーションで囲む
[トラブルシューティング]
(https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/troubleshooting.html#data-not-delivered-to-rs)