クラウド 元SEママの情シスなりきりAWS奮闘記

「Lambda」ってなにがスゴイんですか?

2018年3月20日掲載

こんにちは。シイノキです。花粉症の季節がやってまいりました。花粉が落ち着くまで、我が家の洗濯物は部屋干しです。

このところ番外編が続いていた本コラムですが、久しぶりに本編であるAWSの勉強に戻りたいと思います。記念すべき(?)復帰第1弾のテーマは「Lambda(ラムダ)」。これまでのコラムでも何度か登場しており、AWSを調べていると割と頻繁に見かけるサービスです。「Lambda」が発表されたのは2014年。正直すでに「最新の注目技術!」という感じではないようにも思えますが、逆にだれでも使いやすいようにこなれてきたのでは…?と淡い期待を抱いております。

ところが、肝心のLambdaもクラウドネイティブでサーバレスでなんかスゴそうだぞというところまでたどり着いたものの、具体的にいったいなにができるのかが分かりません。AWS公式サイトを覗きましたが…
「AWS Lambdaを使用すれば、サーバのプロビジョニングや管理なしでコードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。」

3回声に出して読み上げたところで、理解するのを諦めました。とはいえ「Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます」というのはやっぱりなんだかすごそうです。そこで今回も「マネージドクラウド with AWS」のエンジニアである川上さんをつかまえて聞いてきました。「すみません。Lambdaってなにがスゴイんですか?」

“実行したい処理”だけを開発すればいい!サーバレスのすごさ

LambdaはAWSでは「サーバレスコンピューティングとアプリケーション」と出てきます。つまり、Lambdaはサーバレスを実現するためのサービスということ。ではサーバレスとはなんぞや、となるとサーバがないんだろうなという見当はつくものの、それはいったいどういうことなんでしょうか。
「サーバレスは、プログラムを実行するためのサーバがいらない、ということ。それを実現するのが、プログラムの実行環境を提供するサービスであるLambdaなんです」
分かったような分からないような。

これをもうちょっと具体化した例でイメージしてみることにします。WebアプリケーションをLambdaで実装するケースはなかなかレアそうな気がしますが、(うちの上司に説明したら一番分かってくれたので)Webアプリケーションでたとえてみます。

AWS上でWebアプリケーションを稼働させる場合、まずEC2インスタンスを立ち上げ、WindowsやLinuxの環境を構築します。そしてWebサーバが必要です。さらに、動的なシステムにするとしたらJavaなどのプログラムを実行するためのWebアプリケーションサーバも構築する必要があります(WebアプリケーションサーバがWebサーバをかねているケースも多いとかはいったん置いておきましょう)。で、このWebアプリケーションサーバ上で動かすためのプログラム(データをDBに登録するなど)を開発するわけです。

ところが、Lambdaならば、Webサーバもアプリケーションサーバもなしで、このプログラムだけを開発すれば、その実行環境が用意されているから、動かせる、ということ。それは、すごすぎます。

これまでは・・・サーバや実行環境の構築が大変! サーバレスなら・・・おこないたい処理のみ開発すればOK!

だから、サーバがいらない、サーバレス、ということなんですね。ちなみに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の料金体系はリクエスト数と処理の実行時間に対して課金されたりとちょっと複雑なのですが、とにかく安いのだということだけは確かでしょう。

マネージドクラウド with AWS

はじめてのAWSから 一歩進んだ活用までトータルサポート

まとめ

プログラミングなど実際の開発に近いジャンルのサービスだけあって、少しとらえどころがないというか、理解しにくいものでもありますが、改めてお聞きして、世の中がこちらに流れていくのもそりゃ当然だよな、という気持ちになりました。EC2などのインスタンスで、いわゆるオンプレのような構成をクラウド上に構築するのではなく、Lambdaを活用してサーバレスな構成をとると、クラウドのメリットを最大限に享受できるようになると言われています。まさにクラウドネイティブ!Alexaのスキル開発もLambdaを使いますし、セキュリティオートメーション(ログを監視して異常があったら自動でポートを閉じたりする、セキュリティの自動化のこと)でもLambdaが活躍している様子。

Lambdaは汎用性も柔軟性も高くて、かなり何でもできる、とは思いますが、向き不向きも当然あります。オンプレミスのシステムも全部サーバレスにできそう?という疑問に対しては「まずはそのままの構成でクラウドに移行して、徐々にできるところからサーバレスを取り入れていきましょう」というのが優等生的な回答なのかな、とも。もちろんソニーネットワークコミュニケーションズでも、これってLambdaでできるの?既存システムをサーバレス化したい、みたいなご相談も承っております。川上さんはじめ、頼れるエンジニアの皆さんが丁寧にお答えしますので、詳しく聞きたい方はぜひお問い合わせください!

「Lambda」ってなにがスゴイんですか?

SHARE
シェアシェア ポストポスト
「Lambda」ってなにがスゴイんですか?
SHARE
ポスト シェア