AWS LambdaはAWSを代表するサービスのひとつです。
しかし、Lambdaの使い方や設定方法について詳しく説明している記事はよく見かけますが、初心者向けにわかりやすく詳しく説明した記事はあまり見かけません。
そこで、本記事ではLambdaについて初心者にもわかりやすく解説しました!
なお、本記事ではわかりやすく説明することを目的としているため、厳密には正しくないような表現をしている部分もありますのであらかじめご了承ください。
また、以下の記事ではAWSを学べるスクールを紹介しています。
本格的にAWSを学んでAWSエンジニアになりたい方は必見です。
AWS Lambdaとは?
AWS Lambdaは、自分でサーバを用意しなくてもプログラミングコードを実行できるAWSのサービスです。
Lambdaを使えば、誰でも簡単に自分のプログラムを実行できる環境を作ることができます。
Lambdaは、「あなたのプログラムを24時間いつでも実行してくれるロボット」をイメージしてください。
Lambdaに、自分のプログラムと設定項目を教えておけば、あとはこのロボットがいつでもあなたのプログラムを実行してくれます。
このロボット(Lambda)には、以下のような特徴があります。
- 作業場所はAWSが用意してくれる(サーバレス)
- 24時間いつでも狙ったタイミングで動ける(トリガーの設定)
- 何人もいて、同時に動ける(同時実行)
- 動いた分だけ報酬が必要(従量課金)
- 決まった時間にバッテリーが切れる(最大実行時間)
それぞれの詳しい内容はこの後説明します!
もちろん、例えだけでなくちゃんとした説明もしていくのでご安心ください!
Lambdaの特徴
Lambdaを、「あなたのプログラムを24時間いつでも実行してくれるロボット」という例えで説明し、このロボットの特徴をリストアップしました。
続いて、Lambdaの特徴を、先ほどのロボットの例えを交えながら詳しく解説します。
サーバレス
一般的に、何かしらのサービスを提供しるとき、プログラムをサーバーで実行できるようにしておく必要があります。
たとえば、今みなさんが見ているGoogle ChromeやSafariといったブラウザは、「検索ワードに基づいて検索結果を表示」したり、「クリックした記事の内容を表示」したりしますよね?
実はこれは、みなさんの「検索する」とか「クリックする」といった動作に対して、どこかにあるサーバーに登録されたプログラミングコードが動いて、「検索結果を表示」したり「記事の内容を表示」するといった処理を行い、その結果をブラウザがみなさんに見せているのです。
一方で、このようなサーバーを自分で用意しなくてもよいことをサーバレスといいます。
サーバーの代わりに、プログラムをLambdaに登録することでサービスの提供が可能になります。
実は、サーバーを自前で用意する場合、以下のように非常に時間やコストがかかるんですね。
- 必要な性能の見積もりが難しい(高性能すぎれば無駄コスト、低性能すぎればサーバーが落ちる)
- 発注したサーバーの納品に時間がかかる
- サーバーが使えるように環境を構築する
- サービスを開始後も、定期的なメンテナンスが必要
一方で、サーバーレスであれば、サーバーを用意する必要がないのでこれらのコストから解放されます。
先ほどのロボットの例で言えば、サーバーはロボットの作業場所です。
通常だと、この作業場所の設計から建設、機材の設置などの準備を自分で行う必要が出てきます。
しかし、Lambdaの場合であれば、この作業場所をすべてAWSが用意してくれるんですね。
トリガーの設定
Lambdaは、何かしらのトリガー(イベント、きっかけ)をもとにプログラムが実行されます。
このように、何かしらのトリガー=イベントをもとにプログラムが起動することを、イベント駆動(イベントドリブン)といいます。
Lmabdaは、AWSの様々なサービスからのイベントをトリガーとすることが可能です。
例えば、「S3へファイルがアップロードされた場合にLambda関数を実行する」ということができます。
このように、Lambdaは他のAWSサービスと組み合わせて使うことも多いです。
ロボットの例であれば、トリガーはロボットが動き出すためのスイッチの役割を表します。
同時実行
Lambdaは、同じプログラムを同時にいくつも実行することができます。
例えば最初のブラウザの例では、世界中の人が同じタイミングで検索をしているはずですよね?
そんなときに、サーバーでプログラムを順番にひとつずつ実行していては、とても処理が間に合いません。
そのため、サーバーでは同じプログラムを同時に別々で実行させることができるのです。
Lambdaでは、デフォルトの状態では同時に1000個のプログラムを実行できます。
従量課金
Lambdaは、実行時間やリクエスト数に応じて課金されます(従量課金製)。
つまり、実際に利用した分だけの料金しか発生しないため、無駄なコストが一切発生しません。
ちなみに、無料利用枠もあるため、試しに利用したい人にはうれしいですね。
Lamdbaのデメリット・制約事項
これまでLambdaの特徴やメリットを紹介してきました。
一方で、Lambdaにも制約事項や苦手なこともあります。
- 実行時間の制約
- 性能の制約
- 使用言語の制約
これらについて、詳しく説明します。
実行時間の制限
Lambda関数の実行時間は15分までとなっています。
このため、処理に時間がかかる場合には別の手段を検討する必要がありますね。
実務でも、この15分制約のせいでLambdaの利用を断念したケースがありました。
性能の制約
Lambdaは、開発者がサーバーを意識する必要がない代わりに、プログラムが実行されるサーバーはAWSが管理しています。
そのため、使用できるCPUやメモリ、ストレージなどのサーバーの性能に制限があります。
例えば、Lambdaで使用できるメモリは10GBまでです(2023年5月現在)。
このため、Lambdaで利用できる性能を超えるような処理を行いたい場合は、別の手段を考える必要があります。
使用言語の制限
Lambdaの特徴で、Lambdaは多言語対応ということを説明しました。
一方で、サポートされているプログラミング言語に制限があり、すべての言語を扱えるというわけではありません。
また、それぞれの言語に対してサポートされているバージョンにも制限があります。
例えば、Python3.6は昨年の夏にサポート対象外となりました。
このように、Lambdaでは使える言語に制限があるため、自分が使いたい言語が対応しているかを事前に確認する必要があります。
今まで使用していたバージョンが急に使えなくなったりすると、業務への影響が大きいので言語の選択は慎重にしないといけませんね。
※カスタムラインタイムという機能を用いれば一応どんな言語でも開発可能ですが、初心者向けではないため本記事では対象外とします。
Lambdaを使用する理由と目的
Lambdaを使用する理由や目的には以下のようなものがあります。
- コスト削減
- スケーラビリティの向上
- 開発の効率化
コスト削減
Lambdaを使用することで、コストの無駄を省くことができます。
Lambdaは、必要なときにだけプログラムを実行し、それ以外の時間は料金が発生しません。
サーバーレスではない場合、プログラムを実行しない時間にもサーバーを起動させておく必要があり、無駄なコストが発生してしまうんですね。
なので、Lambdaを使えばアプリケーションの実行に必要なコストを削減することができます。
スケーラビリティの向上
Lambdaを使用することで、必要なサーバーの性能を自動的に拡張することができます。
サーバーレスではない場合、どれくらいの頻度でプログラムが実行されるのかを事前に見積もって、余裕を持った性能のサーバーを用意しておく必要があるんですね。
性能が高すぎると無駄なコストに繋がりますし、性能が低すぎるといわゆるサーバーが落ちたような状況になってしまいます。
一方で、Lambdaの場合はプログラムの負荷に対して自動で調整してくれるので、急激なトラフィックの増加にも対応することが可能です。
このように、自動的にサーバーの性能を適切に拡張・縮小できる能力のことをスケーラビリティといいます。
開発の効率化
Lambdaを利用することで、開発者はサーバーの準備や管理をする必要がなくなるため、アプリケーションの開発に集中することができます。
実際にサーバーでプログラムを実行できるようにするためには、サーバーに必要なライブラリや環境をセットアップする作業も必要となり非常に大変です。
例えば、新しいPCを購入した後に、使えるように設定するのって大変ですよね?
Lambdaを使えば、それらのセットアップはAWSにお任せできるので、開発者はプログラムを作成するだけでOKです。
Lambdaの利用ケース
Lambdaの特徴はわかったけど、実際どんなときに使われているの?
Lambdaは様々なシーンで活用することができますが、具体的な利用ケースをいくつか紹介します。
サーバレスアーキテクチャの構築
Lambdaを使用することで、サーバーレスアーキテクチャを構築することができます。
サーバレスアーキテクチャとは、サーバレスのサービスを組み合わせて作成されたシステムのことです。
例えば、S3にファイルがアップロードされたら、Lambdaがそのファイルに何かしらの処理を行い、結果をDynamoDB(サーバレスのデータベースサービス)に登録する、などです。
これにより、システム全体でサーバーの準備や管理などの手間を省くことができ、効率的に開発が進められます。
バッチ処理
Lambdaは、大量のデータを扱うバッチ処理にも適しています。
バッチ処理とは、一定間隔(1日おきなど)でまとまったデータを処理する処理のことです。
例えば、AWS S3に格納されているファイルを定期的に処理するような場合に使用することができます。
ただし、大量のデータを処理するときは15分以内で処理が終わるようにする必要がありますので注意が必要です。
Webアプリケーションのバックエンド処理
AWS Lambdaは、Webアプリケーションのバックエンド処理としても使用できます。
例えば、Webページに表示されているボタンをクリックすると、Lambdaが呼び出され、必要なデータの取得や処理を行うようなケースがあるでしょう。
フロントエンドをJavaScriptのフレームワークとし、バックエンド処理にLambdaが使われることがあります。
まとめ:Lmabdaはサーバレスでプログラムを実行するサービス
以上、Lambdaの概要を説明してきました。
Lambdaは、AWSの代表的なサーバレスサービスです。
月に100万回までは無料利用枠の範囲ですので、気になる方は気軽に試してみてください!
さらにAWSを詳しく知りたいという方は、スクールでAWSを学ぶのもおすすめです。
AWSをスクールで学習するのは、以下のメリットがあります。
- 必要最低限のサービスを厳選して学習できる
- ハンズオン形式で効率的に学習できる
- AWS以外のエンジニアに必要なスキルも同時に学習できる
以下の記事では、AWSが学べるスクールを現役のエンジニア目線で4つに厳選してランキングしているので、ぜひ参考にしてみてください。
コメント