AWS Lambdaとは?サーバーレスな実行環境を解説

AWS Lambdaは、AWS(Amazon Web Services)のサーバーレスコンピューティングプラットフォームです。
アプリケーションのバックエンドや中間層のコードを実行するために使用され、開発者がサーバーを管理する必要がなく、スケーラブルなアプリケーションを構築することができます。

AWS Lambdaを使うことで、開発者はプログラミングに専念できるようになります。扱える言語は、Java、Go、PowerShell、Node.js、C#、Python、Rubyです。

従来、プログラムを動かすためには、プログラムを動かす環境を用意する必要がありました。具体的には、サーバーを用意して、OSやミドルウェアをインストールし、設定を最適化する等です。サービスをリリースした後も、正常にプログラムを動作させ続けるためには、運用や保守が必要です。

AWS Lambdaでは、このプログラムの動作環境のすべてをAWSが管理してくれるので、開発者はプログラミングに専念することが可能になり、次のようなメリットが発生します。


  • コストの削減
    AWS Lambdaは、アプリケーションが実行されるときだけ料金が発生するため、不要なリソースを消費することなくコストを削減できます。
  • スケーラビリティ
    アプリケーションのトラフィックに応じて自動的にスケールし、過剰なリソースを消費することなく、高いスケーラビリティを実現できます。
  • マイクロサービスアーキテクチャ
    小さな単位で関数を作成し、組み合わせることで大規模なアプリケーションを構築することができ、マイクロサービスアーキテクチャを実現できます。
  • 簡単なデプロイ
    簡単に関数をデプロイし、管理することができ、開発者が関数のコーディングに集中できます。
  • イベント駆動
    アプリケーションのイベントに応じて関数を実行するため、リアルタイムアプリケーションを構築するために適しています。

AWS Lambdaではどのようなことができるのでしょうか?具体的に一つずつ説明していきます。

ウェブアプリケーションのバックエンド

ウェブアプリケーションをサーバレスなWeb APIとして構築することができます。

「Amazon API Gateway」でhttps通信を受け付け、「AWS Lambda」で処理を実行、「Amazon DynamoDB」や「Amazon RDS」をデータソースとするような構成を取ることが可能です。

データ処理

大量データの処理も可能です。

例えば、S3バケットに保存されている大量のデータを処理する場合

  • S3バケットに対してLambda関数をトリガーとして設定し、
    S3バケットにアップロードされるデータをLambda関数で処理

することができます。

Lambda関数は、スケーラブルなインフラストラクチャを提供し、同時に処理できるリクエスト数も多いため、大量のデータをスケールアウトさせて、並列処理をすることができます。また、自動的にスケールイン・スケールアウトするため、インフラストラクチャの管理を気にすることなく、大量のデータの処理を行うことができます。

ただし、Lambda関数は一度に処理できるデータ量に制限があるため、特に大量のデータを処理する場合は、データを分割して処理するか、別のAWSサービスと組み合わせることが必要となるケースもあります。

インテグレーション:

AWSの他のサービスとインテグレーション(連携)することができます。

他のサービスをトリガーとして実行できるため、自動化やスケーリングを実現することができます。また、Lambda関数からAWSの他のサービスを呼び出すことができるため、より複雑な処理を実現することも可能です。

たとえば、

  • S3バケットに対してLambda関数をトリガーとして設定し、S3バケットにアップロードされるデータをLambda関数で取得し、DynamoDBに格納
  • SNSトピックに対してLambda関数をサブスクライブし、SNSトピックに対して通知が送られた場合にLambda関数を実行

のようなことができます。

スケジュールタスク:

Amazon EventBridgeと組み合わせることで、特定の時刻にLambda関数を実行することができます。

EC2内で実行していたバッチ処理等をAWS Lambdaで実行することで、スケールアウトや負荷分散などの考慮が不要になります。

リアルタイム処理:

Kinesis Streams, DynamoDB streams, S3 event notifications, SNS topicなどと連携することで、リアルタイム処理を実行することができます。

インフラストラクチャの管理:

サーバレスな環境であるため、EC2インスタンスを利用する時に手間となるインスタンスのプロビジョニングやスケーリング、パッチ適用等の管理が不要になります。開発者はプログラミングやデプロイに専念することができます。

マイクロサービス:

Lambda関数は、独立した形で関数をデプロイすることができるため、複数の小さなサービスに分割し、それぞれのサービスを個別に開発していく、マイクロサービスアーキテクチャのシステムを構築しやすくなっています。

インフラ管理が不要になるAWS Lambdaですが、利用上の注意点も多くあります。代表的なものを紹介します。

リソースの制限

Lambda関数は、リソースの制限があります。これらの制限に達すると、Lambda関数は終了します。

  • 関数のインスタンス数
    同時に実行できる関数のインスタンス数に制限があります。これはAWSアカウントごとに設定されており、デフォルト値は1000です。
  • 実行時間
    一度に実行できる関数の最大時間は15分です。
  • メモリ使用量
    一度に使用できるメモリ容量に制限があります。これは、128MBから10,240MBの範囲で設定することができます。
  • リクエスト数
    1秒当たりのリクエスト数の上限は、割り当てられたメモリ容量によって制限されます。

ネットワークの制限

Lambda関数は、VPCの外側で実行されます。そのためAmazon RDS等のリソースにアクセスすることが出来ません。アクセスが必要な場合は、VPC内に設定することも可能ですが、レイテンシが増加してパフォーマンスが低下する可能性があります。

デバッグ

Lambda関数は、サーバレスな実行環境のため、従来通りの方法ではデバッグが出来ません。SAM LocalというCLIツールを使うことで、ローカルの開発環境でテストしデバッグすることが可能です。

また、実行時のログは、AWS CloudWatch LogsやInsightsを使って検索や分析、グラフ化が可能です。AWS X-Rayを使うことで、Lambda関数が呼び出す他のリソースのトラフィックの追跡ができるようになります。

セキュリティ

セキュリティ上の注意も必要です。

Amazon EC2と同様に、IAMロールの割り当てを行うことで、必要なサービスへの接続許可を与えることが必要になります。従来のアプリケーションと同様に、入力データのバリデーションやセキュアなコーディングが必要です。

価格

Lambdaの料金体系は、実行時間とリクエスト数および割当メモリ量に基づいて計算されます。無料枠も用意されており、無料枠を超えた部分が課金対象となります。

アーキテクチャの見直し

Lambdaを使用するためには、アプリケーションアーキテクチャを見直す必要があります。Lambda関数は、短い時間で実行されるように設計する必要があります。

AWS Lambdaは、AWSのサーバーレスなコンピューティングプラットフォームです。

利用することで、開発者はプログラミングに専念でき、ウェブアプリケーションのバックエンドはもちろん、データ処理やインテグレーション、リアルタイム処理など様々な用途で利用することができます。

クラウドネイティブな利用方法が出来るサービスなので、ぜひトライしてみましょう。

また、AWS全体について気になる方は「AWSとは?初心者の人にもわかりやすく解説」もご覧ください。