AWS Lambdaの特徴と用途

はじめに

AWS Lambdaの登場でAWS界隈のシステム開発の現場は大きく変わりました。今までのEC2を使った開発から、Lambdaを使った開発に大きくシフトしているのです。
Lambdaを採用する大きな理由は、マネージドサービスであるため保守・運用の手間がかからないことです。そしてEC2に比べて、堅牢で低コストなシステムを作ることができるからです。
この記事ではLambdaのメリットや制限等の特徴と用途を簡単に解説していきます。

AWS Lambdaのメリット

Lambdaは、サーバレスのプログラム実行環境です。従来のEC2インスタンスでプログラムを実行するのに比べて次のメリットがあります。

保守・運用に手間がかからない

Lambdaはマネージドサービスです。実行環境がAWSによって用意されるため、OSやフレームワークなどの保守は必要としません。

高負荷に耐えられる

Lambdaによるプログラムの実行は、必要に応じてスケーリングします。そのため、高負荷に耐えられます。

コスト削減ができる

Lambdaは、実行時間に対する課金です。稼働中はずっとコストが生じるEC2インスタンスでの運用に比べて、コストを削減ができます。

AWS Lambdaの制限

ステートレスである

アップロードしたLambda関数は、都度、実行され、実行が終わると破棄されるステートレスな構成です。前回実行したときの状態などを保持することができません。

最大稼働時間は5分

Lambda関数には、最大稼働時間があります。設定できる最大時間は5分です。それ以上、時間がかかることはありません。
これらの制限から考えると、Lambdaに向いてる用途は、継続的な処理ではなく、「必要に応じて、少しだけ動く処理」です。最大稼働時間内で完了する処理するものがLambdaの用途として挙げられます。

イベントドリブン型のプログラミング

Lambdaはイベントの発生によって、実行が開始されます。イベントとなりうるのは、AWSの様々なサービスです。例えば、「アラームによって一定時間が経過した」「S3にファイルがアップロードされた」などです。

また「API Gateway」というサービスと組み合わせると、HTMLフォームやAjax通信などによるリクエストをLambdaで処理することができます。つまり、 WebシステムやWebサービスの構築もLambdaの用途の1つです。

AWS Lambdaの用途である拡張性、保守性に優れたシステム構築

Lambdaプログラミングは、わずかな時間で処理が完了する小さな関数を、たくさん組み合わせてシステム全体を作るのが基本です。
組み合わせるときは、キューイングサービスであるSQSや通知サービスであるSNSトピックを使うと、Lambda関数同士を疎結合にできます。そのためLambdaの用途として、拡張性・保守性に優れたシステムを構築することが挙げられます。

EC2インスタンス運用上の課題を克服するAWS Lambda

EC2インスタンスは、単純な仮想サーバーです。OSやプログラムの実行環境、フレームワーク、ライブラリなどをインストールして、プログラムの実行環境を整える必要があります。こうしたEC2インスタンスを使ったアプリケーションの実行環境の構築は、手間がかかる作業です。

また、運用や管理も大変です。例えば、OSやフレームワーク、ライブラリなどの脆弱性が発見されたなら、その脆弱性を塞ぐためのアップデートをするのはするのはユーザーの責任です。

また、EC2には性能の問題もあります。EC2インスタンスは、起動したときに選んだ「インスタンスタイプ(CPU、メモリ、ディスクIO、ネットワークなどのスペック)」によって性能が決まります。EC2インスタンスを一時停止すれば、インスタンスタイプを変えることができますが、稼働中は固定です。そのため急激な負荷増に耐えられないことがあり、負荷を予測して適切なインスタンスタイプで起動しておくとか、負荷分散機能であるELB(Elastic Load Balancing)と、負荷に応じてインスタンス数を自動的に変更できるオートスケーリングという仕組みを組み合わせて、動的にEC2インスタンスの数を増減するような構成をとるなどの工夫が必要です。
こうしたEC2インスタンスで運用する場合の手間を軽減するのがLambdaの用途です。

アップロードした関数を実行してくれるAWS Lambda

Lambdaは、サーバレスアーキテクチャと呼ばれ、実行環境としてEC2インスタンスのような仮想サーバーを必要としません。実行環境となるサーバシステムは、AWSによって実行の都度、用意されます。そのため、サーバシステムの保守・運用をする必要がありません。

また、負荷が高まれば自動的にスケールされるため、負荷増のときの対応も考えずに済みます(実際には、スケールできる同時実行数などに制限があります)。
Lambdaでプログラムを実行するために必要なのは、実行したいプログラムを関数として実装し、Lambdaにアップロードするだけです。実行の段階になると、それらの実行環境(コンテナ)が自動的に作られ、実行してくれますます。
Lambdaの実行環境としては、「Javascript」「Java」「C#」「Python」の4種類の環境が提供されています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です