3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Lambdaってどんな時に使うの?利用シーンをいくつか紹介 ~AWS100本ノック~ 4/100

Last updated at Posted at 2024-09-02

はじめに

本記事ではLambdaをどんな利用シーンで使うか、ケース毎にいくつか紹介します。
※具体的に作ったり、詳細な機能の説明はしませんがご了承ください

Lambdaの機能については、こちらで紹介しています。

サーバーレスAPIを作りたい

これが一番Lambdaのユースケースとして多いと思っています。
APIのバックエンドとして、EC2やECSも候補にあがると思いますがこれらは常時稼働することになります。

なので、リクエスト数がそこまで多くない場合などは無駄にコストがかかってしまいます。
そこで、利用した時間だけ課金されるLambdaを利用することによって、コスト効率が高まります。
Well-Architected Frameworkのコスト最適化ですかね:thinking:

DBの候補として3つ書いてありますが、RDBである必要性やリクエスト数などによって、いずれかを選択することになると思います

学ぶべきこと-サーバーレスAPI.drawio (2).png

アップロードした画像ファイルのサムネイルを作りたい

アップロードした画像のサイズ変更などを行い、サムナイル画像を作りたい場合です。

S3へのアップロードをトリガーにLambda関数を実行し、作成したサムネイル画像をS3に保存するやり方です

学ぶべきこと-ファイル加工.drawio (1).png

ユーザに近い場所(ロケーション)で処理を実行し、パフォーマンスを向上したい

Lambda@Edgeを利用します。Lambda@Edge = CloudFront + Lambdaのセットになります。

通常のLambdaは、関数を作成する際に指定したリージョンで実行されますが、Lambda@Edgeを利用することによって、ユーザに近い場所でコードを実行できます。

ユースケースは公式で紹介されていますが、以下のようにオリジン(ECSやEC2など)の負荷を減らすために使われたりします
なお、Lambda関数は必ずバージニア北部リージョンに作成する必要があります。

  • リクエスト/レスポンスのヘッダーの変更、カスタムヘッダーの追加
  • リダイレクト
  • JWTなどによる認証
  • A/Bテスト

学ぶべきこと-Lambda@Edge.drawio (1).png

Lambda関数は、以下の4つのタイミングで実行するように設定できます。(公式より)
image.png

普通のLambda関数は15分まで実行できますが、Lambda@Edgeの場合は、Viewerの処理で5秒、Originの処理で30秒と短いです

高速に関数を実行できるCloudFront FunctionsというCloudFrontの機能もあります。違いについてはクラスメソッドさんのこちらの記事がわかりやすいです

バッチ処理を行いたい

バッチ処理を行いたいとなった場合、EC2やECSが候補にあがると思いますが、Lambda関数でもバッチを作成することが可能です。

EventBridge Schedulerで設定した時間にLambda処理を実行する形です。
学ぶべきこと-バッチ.drawio.png

Lambdaの制約上、15分までしか処理できないのでそれ以上かかる処理を行う場合は、EC2やEC2の検討が必要です。

また、1つの操作だけで済む簡単な処理(例:EC2を決まった時間に起動/停止)であれば、EventBridge Schedulerだけで実現可能です

WebSocketでPush通知を行いたい

チャットのような相互にメッセージを送信するWebSocket APIをAPI Gateway + Lambdaで実現できます。
EC2ではなく、バックエンドにLambdaを利用することでスケールやコストの面で優れています。

いくつかLambda関数を作る必要がありますが、詳細は公式のチュートリアルをご確認ください

学ぶべきこと-Push通知(WebSocket).drawio (1).png

リクエストの流入制御を行いたい

最初は利用者が少ないため問題なかったが、利用者が多くなると、Lambda関数だけでは捌ききれなくなる可能性があります。
そうした場合に、SQSなどを挟むことで以下のようなことが行えます

  • 一度、SQSにため込んで順次処理していくことでリクエストのスロットリングエラーを回避できる
  • 一度、SQSやKinesis Streamを挟みLambdaから取りに行く(ポーリング)ことで、今までは1リクエストで1つの関を実行だったが、複数のリクエストで1つの関数実行にすることができ、処理効率が上がる

学ぶべきこと-流入制御.drawio (1).png

何かしらのイベントで処理を実行したい

任意のAWSリソースやパートナーのイベントをトリガーにLambdaを実行できます

学ぶべきこと-AWSイベントトリガー.drawio (1).png

ワークフローを構築したい

一連の処理のワークフロー(例:決済処理)を作る際にStepFunctionsでワークフローを作成し、そのバックエンドにLambdaを利用することで簡単に構築できます

学ぶべきこと-ワークフロー.drawio (1).png

IoT機器から送信されるデータのバックエンドを作りたい

IoT機器から上がってくる位置情報やセンサーデータなどのバックエンドに、Lambdaを利用できます

学ぶべきこと-IoTバックエンド.drawio.png

ログを集約し、検索できるようにしたい

ログを出漁くする場所としてCloudWatchLogsを使うことになると思いますが、複数のログを検索・分析したい場合にCloudWatchLogsだと不便なケースがありす。

そこで、Kinesis Fireshoseにログを流し、一定量(一定時間 or 一定サイズ)溜まったらS3にファイルを吐き出し、Athenaなどでクエリ検索することで簡単に分析が可能です。

Lambdaはこの場合だと作成しなくてもいいのですが、Kinesis Firehoseにため込んでいる際に実行でき、任意の形式に加工することが出来ます

学ぶべきこと-ログ集約.drawio.png

認証処理をバックエンドから切り離したい

認証処理をバックエンドのEC2、ECS、Lambdaなどで行うことも多いですが、バックエンドの負荷軽減のため認証処理を切り離したいことがあると思います。

その際に、API GatewayにLambdaオーソライーザーとしてLambda関数を設定し、任意の認証処理を実装することで認証が必要なAPIリクエスト時に実行出来ます。
それによって、認証エラーの場合はバックエンドにリクエストが行かないようにすることが出来ます

学ぶべきこと-Lambdaオーソライザー.drawio.png

新しいAWSサービスがCloudFormationサポートされていない...

新規のAWSサービスや、既存のAWSサービスの新機能に関しては、CloudFormationでサポートされるまでに時間がかかる場合や、サポートされない場合があります。

そういった場合に、CloudFormationのスタック作成/更新/削除時に、任意のLambda関数を実行するように設定できます。

学ぶべきこと-カスタムリソース.drawio.png

おわりに

今回はLambdaの利用シーンについて紹介しました。
これからLambdaを使ったアプリケーションを構築する参考になれば幸いです:bow:

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?