目的
だんだんテンプレ化してきましたが本日も投稿です。
takezoeさんの記事、「AWS上で動作するアプリケーションをいかにローカルで開発するか?」に触発されて、
今度は、擬似的なkinesisのDocker Imageを作成できるか試してみることにしました!
成果物
参考資料
- https://docs.travis-ci.com/user/docker/
- https://github.com/mhart/kinesalite
- http://dev.classmethod.jp/cloud/aws/kinesis-put-records-cli/
- http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html
手順
1. GitHubでリポジトリを作成して、Dockerfileを用意する
FROM node
RUN npm install kinesalite
RUN mkdir -p /data
ADD kinesalite.js /
EXPOSE 4567
CMD ["node", "kinesalite"]
2. .travis.ymlを用意する
上記を参考にして、.travis.ymlを実装しました。
travis.yml
sudo: required
language: node_js
node_js:
- "4.1"
services:
- docker
before_install:
- docker build -t triplew/kinesalite ./
script:
- docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
- docker push triplew/kinesalite
docker push
については前回と同様の手順でpushしました。
3. git pushをして、travis ciを走らせる
今回もさくっと行けました^^
利用方法
実行環境
- Client ローカルのMacOS
- Server どこかのAWSとかどこかのGCPとか
- curl利用
1. docker runでコンテナを起動
docker run -d -p 4567:4567 triplew/kinesalite
2. nodeスクリプトでstreamを作成
var AWS = require('aws-sdk')
AWS.config.loadFromPath('config.json');
var kinesis = new AWS.Kinesis({endpoint: 'http://localhost:4567'})
var params = {
StreamName : "data",
ShardCount : 2
}
kinesis.createStream(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});
3. streamが作成できたかを確認
var AWS = require('aws-sdk')
AWS.config.loadFromPath('config.json');
var kinesis = new AWS.Kinesis({endpoint: 'http://localhost:4567'})
var params = {
StreamName : "data"
}
kinesis.describeStream(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});
結果出力
{ StreamDescription:
{ StreamName: 'data',
StreamARN: 'arn:aws:kinesis:us-east-1:000000000000:stream/data',
StreamStatus: 'ACTIVE',
Shards: [ [Object], [Object] ],
HasMoreShards: false,
RetentionPeriodHours: 24 } }
4. nodeスクリプトでデータを登録
var AWS = require('aws-sdk')
AWS.config.loadFromPath('config.json');
var kinesis = new AWS.Kinesis({endpoint: 'http://localhost:4567'})
var params = {
StreamName : "data",
PartitionKey: "partkey_1",
Data: "hoge"
}
kinesis.putRecord(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});
結果出力
{ ShardId: 'shardId-000000000000',
SequenceNumber: '49559695658384854135094487428892798596209045909750677506' }
使えないこともなさそうな印象ですね!
Elixirとかscalaとかからもコールできるか試してみたいところですね^^
本日はここまでとなります。