ボクココ

個人開発に関するテックブログ

Amazon Lambda と Kinesis についての調査

最近、AWSがアツい。

というのも今までは EC2 をベースにいかに大規模処理の分散を工夫するか (RDS, Elastic~) とか、いかにデプロイをカッコ良くするか(OpsWorks, BeanStack, CodeDeploy) や、 S3, Route53 などのものの印象が強かった。

しかし、近年になってそうした EC2 ベースでなくとも強力なAWSが出てきたので、これらは是非チェックしておきたい事項になっている。

今回紹介したいのは Amazon LambdaAmazon Kinesis の2つ。この2つでどんなことが作れるのかは、以下の記事をまず参照していただきたい。

池澤あやかさんにお願い! AWS Summit Tokyo 2015「デベロッパーカンファレンス」を盛り上がるアプリを一緒につくってください!

これ、素人向きかと思ったらかなりガチな最新トレンド取り入れた興味深いテーマになっている。池澤さんが羨ましすぎる。。

以下は上記記事に加えて自分が調べた内容だ。

Amazon Kinesis

スマホやセンサーデータ、ログデータなど、同時期に大量の通信が走る場合サーバ負荷が一気にかかる。それらを一気に引き受けてくれる担い手となるのが、このAmazon Kinesis だ。

Amazon Kinesis に送られたデータは最大24時間まで保存されているので、その期間の間までに何かしらでデータを取ってきてどっかに保存したりするのが一般的な使い方。その取ってき方は後述するAmazon Lambda の他にRESTで取ってきたりAWS CLI 使ったりAWS SDKから取ってきたりいろいろ。それらをDynamoDBに突っ込んだりすればおk。

直接DynamoDBとかに突っ込めばいいんじゃないかって話もあるかもしれないけど、ある程度のデータだったらそれでも問題ない。が、先ほど述べたようなセンサーデータやログデータなど、一気に押し寄せてくるデータを扱う場合はこのKinesis をまず受け皿にすることでどんなに大量に同時アクセスが来ても対応できるスケーラブルな環境を構築することが可能ってわけだ。

まとめると、Kinesis は大量データの受け皿と一時的な保存。この役割を担う。

日本語ドキュメントがあるので、興味あればぜひ。

docs.aws.amazon.com

Amazon Lambda

去年から話題になっているのがこのAmazon Lambda。これは簡単に言えばAWSにコードを置いてAWS内で実行するための仕組みだ。

こうすると何が嬉しいのか? もちろんEC2などのサーバを用意する必要がなくなるということはあるが、それよりもAWS内のイベントを拾ってそのタイミングでコードを実行できるということが魅力的だ。

例えばAmazon S3に画像がアップロードされたタイミング。このタイミングでAmazon Lambda内で画像をリサイズして保存するといったことがわざわざ自分のサーバを用意しなくても可能になる。

Lambdaではどんな環境でコードを実行できるか?

Amazon Lambdaではどんなコードを実行できるか? Amazon Lambda内ではデフォルトで Node.js, ImageMagick, AWS SDK がデフォルトでインストールされている。 それにプラスしてお好きなNode.js の NPMモジュールを取り込んでzipとしてアップロードできるので、色々なコードが実行できることがわかるだろう。

Lambdaではどんなイベントをキャッチできるのか?

これもかなり色々な種類がある。現在サポートしているのは以下のサービスだ。

Amazon S3, Amazon DynamoDB, Amazon Kinesis, Amazon SNS, and Amazon Cognito

DynamoDBにデータが保存されたタイミング、 SNSで通知を送ったタイミング、 Cognito でIDが発行されたタイミングなど、あらゆる場面でコードの実行が可能だ。

そして先ほど紹介したAmazon Kinesis もイベントとして登録可能だ。

ただAmazon Kinesis に関してはプル型のイベントとなっていて、Kinesisにデータが突っ込まれたタイミング、ではなくてAmazon Lambdaが定期的にpollingして、取ってきたデータ複数Amazon Lambdaで処理できる内容となっている。だからこそ大量データをKinesisで一旦受け取って、Lambdaでまとめて処理、みたいなことが可能な訳だ。この組み合わせがアツい。

Lambdaで受け取ったデータはLambdaのNode.js内のコードで他のあらゆるAWSサービスとの連携が可能だし、普通のNode.jsコードなので自分のサーバと連携することもできる。

やり方次第でありとあらゆることができそうな、可能性を感じるAWSサービスだ。

Lambdaは最新すぎて日本語ドキュメントはないので、興味ある方は英語でがんばって。そのうち日本語も出るでしょう。 S3 のリサイズのサンプルや、Kinesisとの連携サンプルもここに載っている。ゆくゆくはNode.js以外の言語もサポートされるようになるような様子は見せている。

http://docs.aws.amazon.com/lambda/latest/dg/lambda-dg.pdf

終わりに

"EC2は高い"そういうイメージが強いけども、こうしたサービスは100万件まで無料とかかなり気前のいい感じになっている。AWS初心者の方は是非とも他のサービス、特に (SES, SNS, S3, Route53, Cognito) あたりはチェックしていただきたい。

やけにお金かかるのはAWSでサービス構築(サーバとか全て)やった場合だけな気がする。