AWSを学び始めたばかりの頃、言葉の意味を直感的に理解しにくい場合がありますが、私の場合、そのような言葉の一つが「AWS Lambda」や「サーバーレス」でした。
実際に手を動かして見ないとなかなかわかりにくい部分もありますが、そもそも、どういう機能があるのかがわからないと、手を動かしてみようとも思いません。
今回は、Lambdaとは何なのか?、また、関連するキーワードとして触れられるサーバーレス、Faasについても、わかりやすく説明します。
FaaSとは?サーバーレスとは?AWS Lambdaとは?
FaaSとは?
AWS Lambdaといえば、FaaS(Function as a Service)と表現されますが、FaaSとは何でしょうか?
一言でいうと「サーバーを必要としない、クラウド上の、プログラムの開発・実行環境」と言えます。
SaaS(Software as a Service)であれば、ソフトウェアをクラウドからサービスとして提供し、IaaS(Infrastructure as a Service)であれば、システムインフラをクラウドからサービスとして提供しますが、FaaSはFunction(ファンクション:機能)、つまり、プログラムによって実現できる機能をクラウドからサービスとして提供しているというわけです。
サーバーレスとは?
通常、プログラムを実行する場合、サーバーを構築し、OSやアプリケーションを設定した上で、プログラムの開発・実行を行いますが、サーバーレスというのは、そのサーバー側で必要な構築作業や各種設定作業等の必要がないことを意味します。
したがって、開発者は、サーバーの構築や、OS・アプリケーションの設定等の準備作業に手間を要することなく、プログラムの開発に集中することができるわけです。
AWSでは、Lambda以外にもAmazon Fargate、Amazon SQS、Amazon SNS、Amazon API Gateway等、様々なサーバーレスサービスが提供します。
AWS Lambdaとは?
ここまでの説明で、だいたい掴めたかもしれませんが、AWS Lambdaとは「EC2(サーバー)を必要としない、AWSクラウド上の、プログラムの開発・実行環境」となります。
以下のように、プログラムだけでなく、そのプログラムのトリガーは何で(何によって実行されるのか?)、実行結果はどこに送られるのかについて定義することが可能です。他にもメモリやタイムアウト等、プログラム実行に関連する値を調整することができます。
それでは、AWS Lambdaの何が便利なのでしょうか?「構築時」、「運用時」、「コスト」の観点から、AWS Lambdaのメリットを見ていきましょう。
AWS Lambdaの何がいいのか?
コスト面でのメリット
コストの観点から、AWS Lambdaの利用を検討されている方も多いのではないでしょうか?
例えば、EC2(サーバー)をたてて、その上でプログラムを実行しようとする場合、仮に、そのプログラムを実行しても、実行しなくてもEC2を起動している以上、EC2側の料金は課金されることになります。
一方で、AWS Lambdaの場合は、プログラムの「実行時間」と「リクエスト数」で料金が決まります。
下記の計算例のとおり、例えば、1ヶ月間で5千万回ものリクエストが想定される場合でも、15ドルもしません。
【 計算例 】
設計時のメリット
AWS Lambdaでは、その他のAWSサービスと連携することが可能です。下記のように様々なサービスに発生した何らかのイベントをトリガーにして、プログラムを実行できるようになっています。
例えば、
- CloudWatchでエラーを検出した場合に、Lambdaで特定のプログラムを実行する。
- S3上でオブジェクトの作成時や削除時にイベントをLambda関数に送信し、プログラムを実行する。
- RDSで何らかのイベントが発生した場合、RDSからAmazon SNSに通知が送信され、その通知でLambdaの特定プログラムを呼び出す
等、他のAWSサービスとの連携により、様々な処理を実行する事が可能で、システム構築の自由度を最大限に広げてくれます。
構築・開発時のメリット
前述しているとおり、とにかく、サーバー側の設計、構築作業が一切必要ない事は大きなメリットです。
また、様々なプログラミング言語の中からお好きなプログラミング言語を選択することが可能です。仮に、ご利用のプログラミング言語が、Lambdaの標準で使用できない場合でも、「カスタムランタイム」でbashをAWS Lambdaの関数として実行することが可能です。
Lambdaでは環境変数を作成することも可能ですので、例えば、同じプログラムを環境変数だけを変更して別の処理で使い回すことも可能です。
また、CloudWatchと連携していますので、実行ログも確認することができますので、デバッグについても問題ありません。
運用時のメリット
AWS Lambdaは複数のアベイラビリティーゾーンで関数を実行し、1 つのゾーンでサービスの中断が発生した場合にも、関数をイベントの処理に使用できることが保証されていますので、この点においても安心です。
例えば、EC2の場合、AutoScalingと組み合わせて複数のEC2を起動することで、システムの可用性を維持したりしますが、その設定にかかる手間、また、そのコストは非常に大きなものになります。
AWS Lambdaであれば、運用の面でも構成がシンプルになり、かつ、その設定に要する手間やコストも最小化できます。
AWS Lambdaのユースケース
AWS Lambdaの特徴を説明してきましたが、実際にどのようなシステムで、どのように使われているのでしょうか?
Lambdaは、様々なシーンで利用されますので、なかなか、ユースケースを特定することは難しいですが、その中でも、よく目にするシステム構成について、3例をご紹介します。
API Gateway × Lambda × DynamoDB
Lambdaの使った構成の中でも定番中の定番と言って良いのではないでしょうか?SAAやDVAなど、認定資格試験の中でも頻出の構成です。
S3でHTML、CSS、Javascript等、静的なリソースをホスティングします。ウェブブラウザで実行されるJavascriptはAPI Gateway + Lambda + DynamoDB で構築されたパブリックバックエンド API からデータを送受信します。
この構成は、EC2やRDSを利用したWebアプリケーションの定番構成に比べて、大幅にコストを削減することができます。
Lambda × S3
S3には「S3イベント」という、S3で発生した何らかのイベントをトリガーにして、別のAWSサービスをトリガーすることができます。
この例もLambdaを使ったよくあるユースケースで、S3にオブジェクトを保存したタイミングで、S3イベントでLambdaを実行するように予め設定しておきます。Lambda側では、保存したオブジェクトを圧縮してS3のストレージ料金が上がるのを抑えたり、リサイズすることで写真サイズを揃えたりすることができます。
S3 × Lambda × Glue × Redshift
こちらは、データ分析の準備作業として必要になるETL処理をLambdaを含めていくつかのAWSサービスで構築している例です。
例えば、S3上に分析対象のデータが保存された場合、S3イベントがそれを検知し、Lambdaのプログラムが実行されます。
プログラムの内容としては、ETL処理を行う、Glueや、Glueの実行に必要になるGlue Data catalogの実行内容が定義される形になります。
最終的にGlueを経由して、データウェアハウス(DWH)であるRedshiftにデータがロードされる、という流れになります。
まとめ
Lambda、サーバーレス、FaaSの概念について理解頂けましたでしょうか?
Lambdaの使い方次第で、システムの自由度は大きく広がりますし、往々にして、EC2を導入してシステムを構築するよりも、障害が発生しにくかったり、金額としても安価になります。
今後は、Lambdaを含めたサーバーレス系のサービスを活用したシステム構築が、さらに普及し、サーバーレス環境の構築、開発ができる人材に対する需要も確実に増えると見込まれています。
まずは、上記で紹介した、ユースケース等からLambdaを実際に使い始めてみるのはいかがでしょうか?