名前は聞いたことあるシリーズとでも題したい。前回はモノリシックとマイクロサービスのやつ。今回はAWS Lambdaを見ていくよ。
AWS Lambdaとの馴れ初めエピソード
去年あたりからQiitaでもはてなでも、海外のサイトでもちょくちょく見かけてた。でも、フロントだけで手一杯の僕には無縁だ〜〜〜とたかをくくっていた。けどもう好奇心が抑えられない。名前がかっこいい。ラムダ……。もう強がりはやめて、素直な気持ちでAWS Lambdaについて調べていくよ!
サーバレスアーキテクチャ「やぁ」
AWS Lambdaを理解する前にまず、サーバレスアーキテクチャとは何か知る必要がある。クラウドサーバの大手といえばAmazonが運営するAWS EC2だよね。こいつはクラウド上に仮想サーバをぶち上げて、時間単位で使用料金をはじき出すシステム。つまり、自分が作ったアプリケーションが使われた分だけお金払ってね〜〜という仕組み。
このモデルのいいところは、大量のアクセスが来ても仮想サーバをガンガン立ち上げて自動でスケールしまくれるってこと。そうやって処理を分散すれば、ほら処理簡単でしょ。昼のコンビニでたくさん客がレジ前に並んでたら他のレジも開放して、回転率上げまくる感じ。一人めっちゃレジ打ち早い人雇うより、こっちのがいいよね!
こういうサービスはIaaS(Infrastructure as a Service)という。ホスティングサーバと一緒で、クラウド上のOSやApache, ngixnとかのミドルウェアを管理・セキュリティアップデート等が必要になる。また、管理できる箇所がこれだけあると、それだけ設定する箇所もあるので、良いパフォーマンスを発揮しようとなるとチューニングするスキルが必要になってくる。そんなのねぇよ!!!なんだよ、天才向けのサービスかよ!!
FaaS「やぁ」
そんな僕たちはFaaS(Function as a Service)を試してみませんか。決してFaaSが単純!とか楽!とかってわけではないと思うけど、まぁ、ちょっと見てみようよ。
さっきのIaaSはInfrastractureだった部分がFunctionになったFaaS、どんなもんかというと、原則としてユーザからのアクセスなどのイベントによってプログラムが動きはじめ、それが動いているときのみ課金が行われる。なるほど、確かにさっきとちょっと違うぞ。
つまり、FaaSはイベントドリブンなアーキテクチャであることがはっきりわかる。たとえば、Suicaで改札を通るとき、Suicaを改札の読み取り部分にかざすこと(ユーザによりイベント)によってSuicaのシステムが走り、支払いが管理される。イベントドリブンなアーキテクチャは生活にありふれているわけだ。
IaaSがネットワーク・仮想マシン・OSのプラットフォームで、PaaSがアプリケーションを開発・実行するためのプラットフォーム、FaaSはスクリプトの実行環境を提供する。こうざっと見てみると全然違うね。
これだけ違うとやれることも全然違うし、これまで使用されてきた歴史も違う。率直に言って、FaaSは英語の公式ドキュメントしか存在しないのが現状らしく、難しいことをしようとしたら自力で頑張るか英語の世界を飛び回って探しまくるしかない。なかなかにチャレンジングな開発の旅になりそうだ。
ただ、Dockerなどのコンテナ環境(docker-lambda)を活用することができたり、上記した通り、料金面で利点がある。しかも、環境のチューニングが不要なのでちょっとやってみようかなと心をくすぐられるね。
というわけで、ちょっとAWS Lambdaを見てみよ〜〜
AWS Lambda「やぁ」
ここからはじっくりやっていたらキリがないので、概要だけ箇条書きで説明。
- AWS LambdaがサポートするのはNode.js, Java, C#, Go, Python
- Amazon S3バケット、Amazon Dynamo DBのテーブル内のデータを変更などのイベントに応答してコードを実行できる
- Amazon API Gatewayを使用してHTTPリクエストに応答してコードを実行
- イベントによって実行される関数で構成される
詳しくは実際にドキュメントをどうぞ。
FaaSやってみる?
結果的にAWS Lambdaじゃなくて、FaaSの記事になってしまいました。AWS Lambdaを実際に触ったらまた記事を書こう。さて、こういうFaaS型サービスはいまオプションがいろいろございまして、AWS LAmbdaのほかにも、Google Cloud Functions, Azure Functionsなどがございます。ぜひ、ひとつFaaSやってみませんか。
大変参考にしたリンク:
サーバレスアーキテクチャとは何か?~AWS LambdaとAPI Gatewayによる簡単なAPIの実装を試す (1/3):CodeZine(コードジン)