1. ホーム
  2. 記事一覧
  3. 【徹底解説】サーバーレスサービスLambdaとは

2022.12.29

【徹底解説】サーバーレスサービスLambdaとは

Lambdaとはサーバーレスサービスです。サーバーレスとはサーバーを自身で管理する必要がなくなるということです。サーバーを管理するのはサーバーレスを提供しているクラウドサービスです。こちらの記事で詳しくサーバーレスについて解説していますのでご参照ください。

https://envader.plus/article/36

今回はサーバーレスサービス(FaaS)の一種Lambdaについて解説します。

Lambdaとは

冒頭で記述した通りLambdaとはサーバレスサービスの一種です。具体的にLambdaは、プログラムを実行する環境を提供しているサービスです。サーバーなどの管理はAWSが管理するので利用者はプログラムだけに注力して開発することができます。

なぜLambdaか?

Amazon EC2との違いはEC2は仮想サーバーで利用者はミドルウェアやアプリケーションサーバーなどのインストールしなければいけません。Amazon EC2はサーバーを利用している時間単位で課金計算されます。

その点、AWS Lambdaはプログラムを実行できる環境を提供しているのでソフトウェアのインストールを利用者が行う必要がありません。課金対象はプログラムを実行している時間で計算されます。

Lambdaのメリット

  • 保守、運用、管理の負担がない
  • 従量課金制
  • 自動スケーリング
  • 様々なトリガーがある
  • サポート言語が豊富
  • カスタムランタイム

保守、運用、管理の負担がない

Lambdaは実行環境がAWSによって用意されるため、OSやフレームワークなどの保守は必要としません。サーバやミドルウェアの管理を自分ですることなく、サーバの運用もAWS側が負担するので保守、運用に手間がかかりません。

従量課金制

AWSは基本従量課金制でLambdaはリクエストがあった時間だけが課金対象となるため稼働中はずっとコストが生じるEC2インスタンスでの運用に比べて、無駄のないコスト運用ができます。

自動スケーリング

自動スケーリングは、負荷に応じてリソースを自動的に追加および削除できる機能です。 Lambdaでもリクエストに応じて自動でスケーリングします。リクエスト数に上限はありません。

様々なトリガーがある

Lambda関数の作成には追加料金はかかりません。また実行トリガーとなる関数も豊富なので様々な改善や障害に素早く対応できます。

サポート言語が豊富

選択できるサポート言語も豊富にあります。一般的に使用されているプログラミング言語Java,Ruby,Pythonなど選択できます。サポートされていない言語も次で説明するカスタムランタイムという機能で使用可能になります。

カスタムランタイム

AWS LambdaでいうカスタムランタイムとはLambdaでサポートされていない言語、すなわちどのプログラミング言語でも実装することができるということです。ランタイムは関数が呼び出されたときに Lambda 関数のハンドラメソッドを実行するプログラムです。関数のセットアップコードの実行、環境変数からのハンドラ名の読み取りLambda ランタイム API からの呼び出しイベントの読み取りを行います。そしてイベントデータを関数ハンドラに渡し、ハンドラからのレスポンスを Lambda に戻します。

AWS Lambdaでサポートされているランタイムと非推奨とされているランタイムを紹介します。(2022年12月現在)

サポートランタイム非推奨ランタイム
Python 3.9Python 3.6
Python 3.8Python 2.7
Python 3.7.NET Core 2.1
Ruby 2.7Ruby 2.5
Node.js 16Node.js 10
Node.js 14Node.js 8.10
Node.js 12Node.js 4.3
.NET Core 3.1Node.js 6.10
.NET 6.NET Core 1.0
.NET 5.NET Core 2.0
Java 11Node.js 4.3 Edge
Java 8Node.js 0.10
Go 1.x

Lambdaデメリット

  • 実行時間上限が15分
  • 同時実行数、実行時間の制限
  • エラー解析が複雑
  • Labda単体で使用できない

実行時間上限が15分(900秒)

Lambdaの実行時間は15分以内です。そのため、15分以上の時間がかかる処理を実行することができません。処理時間が15分以上にならないよう処理を分割して並列化する処理設計が必要です。とはいえ、並列化すると次に説明する同時実行数の制限に引っかかる可能性があるのでこの点も考慮しながら対応しなければなりません。

同時実行数、実行時間の制限

同時実行数とは1秒間に同時に実行することができる関数の上限のことです。例えば、Lambdaの場合、実行に10秒かかる関数が毎秒1件ずつ起動される場合は、最大の同時実行数が10となります。Lambdaでは上限値は同一アカウントの同一リージョン内で1,000までとなっています。上限に達すると、それ以上の関数の呼び出しは制限されます。

エラー解析が複雑

ランタイムの大部分がLambda内部に隠蔽されているため、問題が発生した時の解析が難しくなります。

Lambda単体で使用できない

Lambda関数を実行するには、他のサービスリソースで処理を起動させるきっかけとなるトリガーを設定する必要があります。

他のサービスリソース例

  • Event Bridge

    AWSリソースの状態変化への対応に役立ちます。例えば、Lambda 関数を自動的に呼び出しEC2インスタンスの状態を記録することができます。

  • Amazon S3 (Amazon Simple Storage Service)

    オブジェクトに関する詳細を含むイベントで関数を呼び出します。なのでオブジェクトを作成または削除するときに、イベントを Lambda 関数に送信できます。

  • Amazon DynamoDB

    Lambda 関数を使用して、Amazon DynamoDBのレコードを処理します。DynamoDB テーブルが更新されるたびに追加の作業を実行することができます。

サーバレスであるLambdaが解決する問題・課題

ITシステムのアジリティを向上させやすくなりコスト面、開発時間を踏まえて、新開発のチャレンジをしやすくなります。また自動でスケールされため、冗長化の考慮、対応などは最小限で済むようになります。なんといっても、サーバーの構築や運用、保守にかかる手間が不要となりサーバーダウンによる障害対応などが軽減されるので開発全体の負担が軽減になります。

まとめ

今回はサーバーレスサービスであるLambdaについて紹介しました。Lambdaは、EC2インスタンスのような仮想サーバーを必要としません。プログラム実行環境は、AWSによって用意されます。そのため、サーバーの保守・運用をする必要がありません。また豊富なトリガーやサポート言語が用意されています。必要に応じてEC2インスタンスとLambdaをうまく利用して、より安くより良い方法で開発を進めていきましょう。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事