AWS Lambdaの基礎をわかりやすく解説!
AWSは様々なサービスを有しており、それらを組み合わせることで多くの要望を実現できます。利用者の要望に応えられるよう、AWSは次々にサービスをリリースしています。
それらの中でも、利用者が多く安定した需要を誇るものにAWS Lambdaがあります。AWSが提供する、サーバーレスプログラミングの中心となるものです。今回は、AWS Lambdaの機能から使い方、利用する際の事例など基本知識についてまとめて解説します。
この記事の目次
AWS Lambdaとは
最初に、サーバーレスプログラミングに貢献する、AWS Lambdaとはどのようなサービスであるか解説します。
サーバーレスプログラミングとは
AWS Lambdaについて理解するためには、サーバーレスプログラミングについて、理解することが求められます。サーバーレスプログラミングは、その名の通り、サーバーなしにプログラムを実行する技術です。
本来、プログラミングを実行させるためには、サーバに環境を構築しなければなりません。例えば、Web系のプログラミング言語であるPHPを実行する際は、Apacheと呼ばれる環境を構築します。これは一例ですが、基本的にはプログラミング言語に沿った環境が必須です。
しかし、サーバーレスプログラミングになると、このような環境をサーバに構築しません。専用のサービスを利用して、その中でプログラムを実行するようになります。自分自身でサーバを保有することなく、プログラムを実行できるようになるため、サーバーレスプログラミングと呼ぶのです。
AWS Lambdaの概要
AWS Lambdaは、AWSでサーバーレスプログラミングを実現するためのサービスです。上記で解説したように、サーバーレスプログラミングでは、プログラムを実行するための環境が求められます。この環境を提供するのが、AWS Lambdaだとイメージすればわかりやすいでしょう。
プログラムの実行にあたっては、AWS Lambdaがプログラムを呼び出せるように所定の位置に配置します。本来、プログラムはサーバ内に配置して実行しますが、AWS LambdaではAWS内のストレージなどに配置して実行するのです。この点は、一般的なプログラミング実行と異なるため意識しておきましょう。
なお、AWS Lambdaは全てのプログラミング言語を実行できるわけではなく、2023年12月現在で、以下の実行に対応しています。
- Node.js
- Python
- Ruby
- Go
- Java
- PowerShell
- C#
これら以外のプログラミング言語は、AWS Lambdaでの実行に対応していないため、対応しているかどうかは必ず確認してから利用することを心がけましょう。
AWS Lambdaの基本的な料金体系
AWS Lambdaは従量課金制であり、プログラムを実行した分だけ料金が発生します。リクエスト数と実行時間から料金が算出されるため、AWS Lambdaにプログラムを配置するだけであれば料金は発生しません。
料金体系はリクエスト100万件につき0.2USドルで、実行時間は1ギガ秒あたり0.0000166667USドルです。非常に小さな単位で計算しづらいですが、単価は安いと理解しておいて良いでしょう。莫大な回数のリクエストが発生すると、料金が高騰する可能性はありますが、低価格で導入しやすいように考えられています。
AWS LambdaとEC2の違い
一般的にAWSでプログラムを実行する際はEC2と呼ばれるサーバーを利用します。これとAWS Lambdaを利用する場合の違いをまとめると以下のとおりです。
AWS Lambda | Amazon EC2 | |
起動時間 | 利用時のみ | 設定次第で24時間365日 |
料金体系 | プログラムの実行回数 | サーバーの起動時間 |
インスタンスタイプ | 指定は不可 | 数多くから自由に選択 |
ストレージ | S3などを利用 | EBSなどをアタッチ可能 |
ネットワーク | 制限あり | 制限なし |
インフラの管理 | すべてAWSの責任 | 一部利用者の責任 |
実行できるプログラム | 言語や時間に制限あり | 制限なし |
AWS Lambdaはメリットが多いように思われがちですが、比較してみると違いがあり、観点によってはメリットとはいえないでしょう。部分的にはデメリットがあるため、その点も考慮してどちらを利用するか検討すべきです。具体的に、どのようなメリット・デメリットがあるかは以下で解説します。
プログラム実行にAWS Lambdaを採用するメリット
一般的に、プログラムの実行はEC2と呼ばれるサーバー内に環境を作り、その中で実現します。その方法ではなく、AWS Lambdaを使用して実行する場合のメリットは以下の通りです。
コストの削減
AWS Lambdaは、プログラムを実行している時間のみ課金される仕組みです。そのため、サーバーを用いてプログラムを実行するよりも、コストを抑えやすいメリットがあります。
もし、サーバーでプログラムを実行すると、待機時間でもサーバーを起動しなければなりません。AWSは従量課金制であり、プログラムを実行していなくとも、サーバーを起動するだけでコストが発生します。結果、無駄なコストが生じやすいのです。
それに対して、AWS Lambdaはソースコードが実行される時間1ミリ秒ごとに課金されます。つまり、サーバーのように実行していない時の待機時間が発生しないのです。これによって、基本的にはAWS Lambdaのようなサーバーレスプログラミングを使うことによって、コストを抑えられるようになっています。
可用性の向上
AWS LambdaはAWSのサービスレベルに準じて、非常に安定したサービス提供が保証されています。つまり、非常に高い可用性が期待できる環境なのです。AWS全体で大規模な障害が起きない限り、安定してプログラムを実行できると考えて良いでしょう。
対して、自分自身でサーバーを用意する際は、適切な設計により可用性を高めなければなりません。サービスレベルは高いものですが、データセンターなどに障害が起きると、動作しなくなる可能性があります。そのため、複数のサーバーを契約し、利用者が障害などに備えた設計をしなければなりません。
AWS Lambdaならば、基本的にこのような実装は必要ないため、設計に詳しくなくても高い可用性を担保できます。また、複数のサーバーを用意することもなく、コスト面ではメリットがあるのです。
スケーラビリティの担保
大量の処理を受け付けた場合、AWS Lambdaは自動的に複数のインスタンスを生成して処理します。一般的なサーバーでは、このような動作の実現は難しいですが、サーバーレスプログラミングならば実現可能です。
複数のインスタンスが立ち上がるため、それぞれのインスタンスはお互いに影響しません。例えば、大量のデータを含む処理があっても、その影響を受けることなく別の処理を実行できます。同じインスタンスでは、相互に影響を受けますが、AWS Lambdaならその心配はありません。
なお、基本的にAWS Lambdaは同時に1,000個までインスタンスを立ち上げできます。非常に多くの処理を、安定して同時に処理できる仕組みなのです。
セキュリティの担保
AWSが提供するサービスであり、セキュリティはAWSが担保しています。例えば、AWS Lambdaが配置されているサーバーのセキュリティは、AWSの責任でセキュリティを担保してくれます。つまり、エンジニアはプログラムを開発したり実行したりすることに注力できます。
プログラムを実行する環境についても考慮すると、エンジニアの負担が増えかねません。特にセキュリティは、専門知識が多く作業内容も多いため、可能な限り負担を軽減したいものです。
その点で、AWS Lambdaを活用するとエンジニアの負担は大きく軽減されます。非常に重要であり負担のかかりやすい、セキュリティに関連する作業から解放されることは大きなメリットなのです。
プログラム実行にAWS Lambdaを採用するデメリット
AWS Lambdaにはメリットだけではなくデメリットがあるため、それらについても意識することが大切です。
実行時間の制限
それぞれのインスタンスには、15分までという処理時間の制限が設けられています。そのため、大量のデータを処理しなければならないなど、時間がかかる内容は実装しづらいことがデメリットです。例えば、ビッグデータ解析のように処理時間が長くなりがちなアルゴリズムは、AWS Lambdaで実装できない可能性があります。
複雑なアルゴリズムを実装する際は、必ず上限時間を意識しなければなりません。これを見落としていると、処理を実行する際にトラブルが生じる原因となってしまいます。必ずテスト実行して、処理時間を確認しましょう。
なお、もし処理時間が長くなりすぎる場合は、分割することで解決できるかもしれません。例えば、処理を3つに分割することで、インスタンスあたりの処理時間を短くできる可能性があります。
実行回数の制限
AWS Lambdaは実行回数に制限があり、同一リージョン内における同一アカウントの処理実行数は1,000回と定められています。処理回数は「平均実行時間(秒)✕呼び出し数/秒」で算出される仕組みです。例えば、平均実行時間が2秒ならば、最大で500回まで実行できます。
つまり、処理が長い場合は実行できる回数が減り、回数が多い場合は長い処理に対応できなくなります。そのため、上記で解説した実行時間の制限と組み合わせて、こちらも意識したプログラムを用意しなければなりません。もし、処理を分割しても制限に触れるならば、待機時間を設けて1秒あたりの処理回数を減らすことが求められます。
AWS Lambdaの実行イメージ
最後に、AWS Lambdaを利用する場合、どのような実行イメージになるかを紹介します。
基本的な関数の作成や実行
基本的なソースコードであれば、AWS Lambdaのコンソール画面で「関数の作成」が可能です。すべてを手入力することも、サンプルコードを利用することも可能であり、まずはこちらから試してみると良いでしょう。関数の名称や実行するランタイム(プログラミング言語のこと)を指定すれば、画面上でソースコードを簡単に記述できます。
また、編集が完了したならば、同じくコンソールから関数のテスト実行が可能です。画面上に「Test」というボタンが用意されているため、これをクリックすることで、作成した関数が動作するかどうかを確認できます。後は実行タイミングなどを設定することで、AWS Lambdaの関数を実行できる仕組みです。
外部トリガーによる実行
事前に関数を用意しておけば、後は外部トリガーによる実行が可能です。実際にAWS Lambdaを利用するならば、こちらの用途が多いと考えておきましょう。
例えば、ユーザがS3にデータを格納すると、それを検知してAWS Lambdaでファイルを処理することが可能です。圧縮されたファイルを格納すると、それを展開して所定の位置に保存する、などの作業を自動化できます。
また、Amazon EventBrigeで「ルール」を作成し、定期的に呼び出すことも可能です。外部トリガーには複数あるため、必要に応じて組み合わせて利用すると良いでしょう。
まとめ
AWSが提供するサーバーレスプログラミングのAWS Lambdaを解説しました。本来、プログラムの実行には専用の環境が必要ですが、サーバーレスプログラミングでは必要とされません。構築だけではなく管理も必要ないため、エンジニアはプログラミングにだけ集中できます。
ただ、全てのプログラミング言語を実行できるわけではなく、AWS Lambdaが対応している言語には限りがあります。それらを利用する時だけ、サーバーレスプログラミングを検討できるため、そこは注意しておきましょう。また、実行時間の上限など、一般的なサーバーには存在しない制約もあります。