“実行したい処理”だけを開発すればいい!サーバレスのすごさ
LambdaはAWSでは「サーバレスコンピューティングとアプリケーション」と出てきます。つまり、Lambdaはサーバレスを実現するためのサービスということ。ではサーバレスとはなんぞや、となるとサーバがないんだろうなという見当はつくものの、それはいったいどういうことなんでしょうか。
「サーバレスは、プログラムを実行するためのサーバがいらない、ということ。それを実現するのが、プログラムの実行環境を提供するサービスであるLambdaなんです」
分かったような分からないような。
これをもうちょっと具体化した例でイメージしてみることにします。WebアプリケーションをLambdaで実装するケースはなかなかレアそうな気がしますが、(うちの上司に説明したら一番分かってくれたので)Webアプリケーションでたとえてみます。
AWS上でWebアプリケーションを稼働させる場合、まずEC2インスタンスを立ち上げ、WindowsやLinuxの環境を構築します。そしてWebサーバが必要です。さらに、動的なシステムにするとしたらJavaなどのプログラムを実行するためのWebアプリケーションサーバも構築する必要があります(WebアプリケーションサーバがWebサーバをかねているケースも多いとかはいったん置いておきましょう)。で、このWebアプリケーションサーバ上で動かすためのプログラム(データをDBに登録するなど)を開発するわけです。
ところが、Lambdaならば、Webサーバもアプリケーションサーバもなしで、このプログラムだけを開発すれば、その実行環境が用意されているから、動かせる、ということ。それは、すごすぎます。
だから、サーバがいらない、サーバレス、ということなんですね。ちなみにLambdaはJava、Node.js、C#、Pythonのプログラミング言語に対応しているので、各種「機能」(プログラム)はこの言語で開発すればOK、ということのようです。
Lambdaで具体的に何ができるの?
「Lambdaは、なんらかのイベントが起きたら、あらかじめ設定した処理(機能=関数)が実行される環境と言うこともできますね」
ほほぅ。つまりWebアプリケーションサーバの例を引きずりますが、Webサイトへのアクセス(リクエスト)というイベントをきっかけに、設定した処理(データベースへの登録など)が実行される、ってことですね。
イベントとしては、AWSのストレージであるS3やデータベースDynamoDB、Kinesisストリームが対応しているそうですが、ふむふむなるほどと分かったふりをして先に進みましょう。
ただ、先ほどの例はあくまで例。じゃあこれをなにに使うかというと…
- S3のイベント発生(ファイルアップロードなど)をトリガーにデータ処理をおこなう
- リアルタイムのストリーミングデータを処理する
- データの抽出、変換、ロードする
- バックエンド処理をおこなう
などがLambdaのサイトに挙がっていますが、イマイチイメージがわきません。「あくまで一例ですが、S3に画像ファイルがアップロードされたら、リサイズしたサムネイル画像を生成する、とかは分かりやすいですかね。あとは、ログなどのストリーミングデータを分析したり、IoTセンサーからのデータを受け取った後、DBに登録したり、違うシステムに引き渡したりといった処理にも使えます。実はちょっとしたWebサイトをLambdaで構築してみたっていうブログも結構ありますよ」
Webサーバもあったとは!もはや活用の幅が広すぎてなんだか分かりません。
とはいえ、一番分かりやすい「S3にアップされた画像のサムネイル化」で考えると、S3に画像ファイルがアップされるのを監視するためのサーバを用意して、監視し続けるプログラムを用意して、ファイルがアップされたことを検知したら、リサイズする処理を行う必要があったのが、Lambdaならこの「リサイズする処理」だけを作ればOKということ。便利だすごいぞと騒がれるのも納得です。
Lambdaのメリットは?
これだけでも十分すごいんですが、Lambdaのメリットはほかにもありそうです。「サーバの運用管理がいらなくなることは当然ですよね。あとは料金も処理が動いた時間だけ課金されるようになるので、もっとコストを削減できるようになると思います」
従量課金はAWS自体のメリットですが、それでもサーバを起動していれば(処理が行われていない時間も)課金対象になります。一方、Lambdaならリクエストがあったらその時間だけが課金対象となり100万リクエストにつき0.2USドルと、ちょっと桁間違ってるんじゃないかなという感じの安さ。
しかもしかも、毎月100万リクエストまで無料なんです。くり返します。毎月100万リクエストまで無料です!もう正直意味がわかりません。実はLambdaの料金体系はリクエスト数と処理の実行時間に対して課金されたりとちょっと複雑なのですが、とにかく安いのだということだけは確かでしょう。
まとめ
プログラミングなど実際の開発に近いジャンルのサービスだけあって、少しとらえどころがないというか、理解しにくいものでもありますが、改めてお聞きして、世の中がこちらに流れていくのもそりゃ当然だよな、という気持ちになりました。EC2などのインスタンスで、いわゆるオンプレのような構成をクラウド上に構築するのではなく、Lambdaを活用してサーバレスな構成をとると、クラウドのメリットを最大限に享受できるようになると言われています。まさにクラウドネイティブ!Alexaのスキル開発もLambdaを使いますし、セキュリティオートメーション(ログを監視して異常があったら自動でポートを閉じたりする、セキュリティの自動化のこと)でもLambdaが活躍している様子。
Lambdaは汎用性も柔軟性も高くて、かなり何でもできる、とは思いますが、向き不向きも当然あります。オンプレミスのシステムも全部サーバレスにできそう?という疑問に対しては「まずはそのままの構成でクラウドに移行して、徐々にできるところからサーバレスを取り入れていきましょう」というのが優等生的な回答なのかな、とも。もちろんソニーネットワークコミュニケーションズでも、これってLambdaでできるの?既存システムをサーバレス化したい、みたいなご相談も承っております。川上さんはじめ、頼れるエンジニアの皆さんが丁寧にお答えしますので、詳しく聞きたい方はぜひお問い合わせください!