AWSの中でも、広く活用されているのがAWS Lambdaです。FaaSのひとつで、サーバーのプロビジョニングが不要で、コードを実行するコンピューティング環境がオンデマンドで提供されることが主なポイントです。自社でのサーバー管理が不要な点や、コスト削減につながりやすい点など多くのメリットがあります。
そこで今回はAWS Lambdaとは何か、メリットや注意点、活用方法などを解説します。 AWS Lambdaの導入を検討されている方はぜひご覧ください。
目次
AWS Lambda(ラムダ)は、Amazonが提供するクラウドサービスAWS(Amazon Web Services)のうち、サーバーレスで使用できるコンピューティングサービスのことです。AWS Lambdaは、サーバーのプロビジョニングを必要とせずにコードを実行することができます。従来のコンピューティング方式では、アプリケーションを実行するためにサーバーリソースをプロビジョニングする必要がありました。しかし、AWS Lambdaではコードを実行するための基盤が自動的に用意されており、実行時間に応じた従量課金制のため、非活性時にはコストがかかりません。
まずは、AWS Lambdaについてさらに詳しく理解できるよう、クラウドの利用形態のひとつであるFaaSとサーバーレスの仕組み、そしてAWS Lambdaの概要や特徴について解説します。
AWS Lambdaは、クラウドの利用形態のひとつである、FaaSに該当するサービスです。
クラウドには、以下のような種類があります。
IaaSは、サーバやーストレージなどのインフラをサービスとして提供するもの、SaaSは開発されたソフトウェアをインターネットを通じて提供するものです。
FaaSは、インターネットを通じてサーバーを利用し、プログラムを実行できるもので、アプリケーションやシステム開発に必要なフレームワークが備わっているサービスです。そのため、サーバーレスでアプリケーションを開発することができます。
サーバーレスとは、サーバーを使わずにアプリケーションを開発できる、というわけではありません。
本来、アプリケーションを開発する際は、自社でサーバーを準備する必要があります。そのため、開発者がサーバーを管理しなければなりません。
サーバーレスのサービスを利用すれば、ベンダーがサーバーを準備して管理してくれます。アプリケーションコードとそれに関連する依存関係やライブラリをAWS Lambdaにアップロードするだけで、ユーザーはコンピューティングリソースのプロビジョニングやメンテナンスを気にする必要がありません。インターネットを通じてベンダーが提供するサーバーを利用でき、開発者はサーバー管理が一切不要になるため開発に専念できるのです。
サーバーレスについては以下の記事で詳しく解説しています。ぜひご覧ください。
AWS Lambdaは、サーバーレスでプログラムを実行できるFaaSのひとつです。AWS上でプログラムコードを定義し、Lambda側にアップロードすれば、インターネットを通じてプログラムを実行できます。
具体的には、ファイルアップロード時の処理やストリーミングデータ処理、データの抽出・変換、バックエンド処理などが可能です。
なお、AWS Lambda単体ではLambda関数の実行はできないため、処理を起動させるきっかけとなるトリガーを、ほかのサービスリソースを使って設定する必要があります。
AWSについて、詳しくは以下をご覧ください。
AWS Lambdaは、Python言語によるLambda関数の実装をサポートしています。具体的には、Python 3.9、Python 3.8、Python 3.7の各バージョンでLambda関数を記述できます。
Lambda関数では、event変数にイベントデータ(トリガーされた際の入力データ)が、context変数に実行コンテキストの情報が格納されます。
AWS Lambdaは、実行するプログラムの関数(ハンドラー)とそのプログラムが実行される契機となるイベントソース(トリガー)を定義することで動作します。
関数は次の手順で作成しましょう。
以上の手順でプログラムコードを書くだけで、AWS Lambdaは実行ができます。このように簡単に実行できる点がやはり大きなメリットでしょう。
関数を実行するイベントトリガーは、AWS各サービスのイベントを設定できます。例えば、S3バケットへのファイルアップロード時に画像認識処理を行うなどが可能です。
AWS Lambdaの料金に関する特徴は、以下のとおりです。
プログラムを実行しない限り料金は発生せず、使用量に応じて料金が異なります。1カ月につき100万リクエストまでは無料であるため、小規模な利用であればほとんど費用がかかりません。
AWS Lambdaのコストメリットを理解できるよう、料金形態について解説します
AWS Lambdaの料金形態は、使用した分だけ料金が発生する従量課金制です。関数に対するリクエスト数と、コードの実行時間に応じて料金が発生します。プログラムを作成しても、プログラムが実行されない限り料金は発生しません。
サーバーの運用コストもかからないため、プログラム管理にかかるコストを大幅に削減できるのが特徴です。
AWS Lambdaには、1カ月につき100万リクエストまでは無料という無料利用枠が設けられています。利用料についても、2024年4月時点でリクエスト100万件あたり0.20USドルと、気軽に導入しやすい低価格です。
無料で利用できる時間は、Lambda関数に割り当てるメモリ量によって異なります。128MBから10,240MBまで、任意のメモリサイズを1MB単位で関数に割り当てられる仕組みです。
参考:AWS「AWS Lambda 料金」
AWS Lambdaには、以下のようなメリットがあります。
AWS Lambdaは実行基盤の管理が不要であるため、コストや管理にかかる手間の削減、安全性の担保などを実現しやすいのが魅力です。
また、障害のリスクを軽減でき、一般的な開発環境がカバーされているため、使いやすいというメリットもあります。
ここでは、それぞれのメリットについて解説します。
前述のとおりAWS Lambdaは、リクエスト数とコードの実行時間に応じて料金が発生する従量課金制を採用しています。処理が行われなければ、起動しても料金は発生しません。Lambda関数に割り当てられたメモリ量の範囲内であれば、自動でリソースが割り当てられ、追加料金もかからないのが特徴です。そのため、イベント数が多かったり実行時間が長かったりしない限りは、コスト削減につながります。
さらに、専用のサーバーを用意して管理する必要がありません。サーバー管理には多くの費用がかかるため、AWS Lambdaを利用することで、その分のコストを抑えられます。
AWSは、世界トップクラスのセキュリティ専門家チームを擁しており、システムを24時間体制でモニタリングしています。AWS Lambdaでは、実行基盤をAWS側で管理しているため、自社で管理する場合に比べて、セキュアな実行環境を簡単に実現しやすいのがメリットです。
管理の手間もかからないため、開発者はコーディングやテストといったコア業務に注力できます。
AWS Lambdaでは、AWSのサービス同士を疎結合にしやすいという特徴があります。疎結合とは、システムの構成要素をそれぞれ独立性が高い状態にすることです。疎結合にすることで、アプリケーション同士の関連性が薄くなり、障害が発生した際にトラブルが拡大するリスクを軽減できます。
自社でサーバーを用意して運用する場合には、サーバーに障害が発生した際に自社で対応しなければなりません。一方のAWS Lambdaでは、万が一サーバーに障害が発生した場合でも、AWS側が対応してくれます。
AWS Lambdaは、選べるプログラミング言語が豊富です。Java、Python、Node.js、C#、PowerShell、Ruby 、Goに対応しており、一般的な開発環境はカバーされています。
さらに、「カスタムランタイム」という機能を用いることで、カスタム言語を実装でき、対応外の言語も使用可能です。
一方、AWS Lambdaには以下のようなデメリットがあります。
特に、起動時間や処理の実行数に制限があることを理解したうえで利用することが必要です。
また、イベント数や実行時間によっては、従量課金制であることが裏目に出てしまう可能性もあるため、用途を考えたうえで利用しましょう。
本項目では、それぞれのデメリットや注意点について詳しく解説します。
AWS Lambdaには、実行時間は15分までという制限があります。15分を超えるとタイムアウトとなり実行が強制終了となるため、それ以上の時間を要する処理は実行できません。時間のかかるプログラムを実行する場合は、処理を分割して対応する必要があります。
しかし処理を分割して並列化すると、以下の処理実行数制限に引っかかってしまう可能性があるため、注意が必要です。
AWS Lambdaでは、同一リージョン内における同一アカウントの処理実行数に制限があります。アジアパシフィック (東京)では、1,000が上限です。処理実行数は、「平均実行時間(秒)×1秒あたりの呼び出し数」で算出されます。たとえば、関数の実行に5秒かかる場合、1秒あたりに呼び出せる数は200個までです。
上限を超えると、それ以上の実行についてはスロットリングという制限がかかるため、注意が必要です。
申請をすれば、上限の緩和を認められる場合がありますが、必ずしも認められるとは限りません。
ほかにも、スロットリング回避のためにリトライ処理を組み込み、エラー発生時に関数の呼び出し元においてリトライ処理を実行できるようにする、という方法もあります。
実行を非同期で行う場合は、重複起動と認識されてしまう点にも注意が必要です。
同期呼び出しの場合、Lambdaを直接1回実行し、処理が完了してからレスポンスが返ってきます。一方、非同期呼び出しの場合は、Lambdaを直接実行するわけではありません。呼び出しに失敗してエラーになった場合は、自動的に2回までリトライされます。そのため、重複起動になってしまう可能性が考えられます。
重複起動を防げるよう、設計時に工夫する必要があります。
従量課金制ということは、使えば使うほどコストが発生するということです。多くのイベントを発生させたり、実行時間が長くなったりする場合は、その分だけ費用がかかります。そのため、大量アクセスがあるシステムについては、Compute Savings Plansといった定額課金のサービスを利用するほうがコストを抑えられる可能性がある点には注意しましょう。
AWS Lambdaは、イベント数が少ないときや特定の時間帯のみ実行する場合、時間が短いプログラムを実行したい場合などにおすすめです。
AWS Lambdaはサーバーのプロビジョニングを必要とせずに簡単にコードを実行できるのが魅力ですが、まだ疑問をお持ちの方もいるかもしれません。
本項目では、AWS Lambdaに関するよくある質問にお答えします。
疑問を解消して、AWS Lambdaを有効活用してください。
AWS Lambdaのレイヤーとは、Lambda関数コードとは別に、ライブラリやその他の依存関係をパッケージ化し、Lambda関数に追加できる機能です。レイヤーを使うと、デプロイパッケージのサイズを小さく抑えられ、関数のコードを簡素化できます。
レイヤーの主な利点は以下の通りです。
レイヤーは、開発者が独自に作成することも可能ですし、AWS公開のものを使うこともできます。レイヤーを活用することで、Lambda関数の開発がより柔軟で効率的になるでしょう。
AWS Lambdaのinvokeとは、Lambda関数を呼び出すことを指します。 具体的には以下の3つの方法があります。
呼び出し方法 |
説明 |
RequestResponse型 |
同期的に呼び出し、関数の実行結果を待つ |
Event型 |
非同期的に呼び出し、実行結果を待たずに次の処理へ |
DryRun |
テスト実行のみ行い、関数を実際には実行しない |
呼び出し方法はユースケースに応じて使い分けましょう。 同期的な呼び出しが必要な場合はRequestResponse型を、一方で非同期処理でよい場合はEvent型と使い分けが可能です。
AWS Lambda Powertools Pythonは、AWS Lambdaの実行環境とサポートされているランタイムに最適化された、ユーティリティースイートのことです。 トレース、構造化ロギング、カスタムメトリクスなどのベストプラクティスの導入を容易にするツールが用意されています。
Powertoolsは以下の3つの方法でインストール可能です。
たとえばLambda Layerとして利用する場合、各リージョンごとのLayer ARNを指定する必要があります。 以下の表のように、リージョン毎のLayer ARNが用意されています。
リージョン |
Layer ARN |
us-east-1 |
arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-northeast-1 |
arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
AWS Lambdaで利用可能な言語には、Python、Node.js(JavaScript)、Java、Go、C#、Ruby、PowerShell等があります。
Datadog調査によると、PythonとNode.jsでAWS Lambdaの関数の9割以上が書かれているとされています。
言語 |
利用率 |
Python |
58% |
Node.js |
31% |
その他 |
11% |
Pythonは機械学習やデータ解析などの分野で広く用いられており、Node.jsはウェブアプリケーションのバックエンドに適しています。
このように、用途に応じてPythonかNode.jsがおすすめの言語となりますが、お好みやチームの技術スタックに合わせて適切な言語を選択することが重要です。
参考:AWS Lambdaの使用言語はPythonとNode.jsで9割─Datadog調査
AWS Lambdaの使いどころは?
AWS Lambdaには、さまざまな活用方法があります。使いどころとしては、アプリケーションに必要なデータ処理やファイル連携のほか、ログの抽出やアクセス権の監視や認証、セキュリティ関連の処理などが挙げられるでしょう。
主に以下のようなユースケースに適しています。
大量のデータを効率的に処理する際に威力を発揮します。
例:ストリーミングデータの処理、ログ解析、ETLタスクなど
Web/モバイルアプリのバックエンド処理に活用できます。
例:APIの実装、認証処理、プッシュ通知の配信など
機械学習モデルの推論処理などに利用できます。
AWSのさまざまなサービスからのイベントをトリガーとして利用できます。
ほかにも、Amazon EC2のようなほかのサービスを利用している場合は、一定の利用料を超えた場合にAWS Lambdaを使ってEC2を停止させる、という使い方も考えられます。
このように、AWS Lambdaにはさまざまなメリットがあるため、要件に応じて積極的に活用しましょう。
株式会社ICは、クラウドを活用したシステム開発・運用サービスも提供しています。「ITソリューション」では、AWS(Amazon Web Services)を中心としたクラウドソリューションを提供しています。
ICは、AWS認定パートナーとしての実績が豊富で、お客様のニーズに合わせてAWSを活用したシステム開発から運用までをワンストップで受託することができます。経験豊富なエンジニアが、お客様のビジネスを深く理解した上で、最適なITソリューションを提案いたします。
主なサービス内容は以下の通りです。
このように、ICの「ITソリューション」は、クラウドネイティブなシステム開発から運用・保守までをフルサポートする、信頼できるAWSパートナーです。
システム開発の課題を抱えている方は、ぜひICにご相談ください。
ICのITソリューションサービスに興味をお持ちの方は、以下のページをご覧ください。
今回は、FaaSのひとつであるAWS Lambdaについて解説しました。サーバーレスで利用できるAWS Lambdaには豊富な活用方法があり、コスト削減にもつながりやすいです。気軽に導入しやすいサービスであるため、ぜひ活用してみてはいかがでしょうか。
AWS Lambdaの利用には、起動時間や処理実行数の制限、重複起動を防ぐ設計の工夫など注意点もあります。問題なく利用できるよう、AWS Lambdaに関する専門知識を有する人材がいると安心です。専門人材の不足に悩んでいる方は、ぜひとも当社にお気軽にお問い合わせください。
※2024年4月時点の仕様です。現在は異なっている可能性があります。
サイバー攻撃はどう対策すべき?種類や事例を理解して対策を行おう!
システムリプレイスとは?目的や意味、進め方のポイントを解説