AWS Lambda

2024-12-09

Summary: AWSラムダの学習ノート

AWS Lambda

1.定義

AWS Lambda(ラムダ)はサーバーレスでプログラムのコードを実行できるフルマネージドサービスです。サーバーレスとは、EC2インスタンスなどのサーバーを必要とせずリクエスト発生時にだけプログラムが実行されるアーキテクチャのことです。サーバーレスアーキテクチャでは、インフラストラクチャの管理は完全にAWSによって行われます。

Lambdaを利用すると次のようなメリットがあります。 ・プログラム実行環境の構築や運用が不要になる ・プログラムはリージョン内の複数のAZに分散して配置される(耐障害性・可用性の向上) ・プログラムへのリクエスト数に応じたスケーリングが自動的に行われる(拡張性の向上)

2.Lambda関数の特徴

  • 開発言語:Java、Node.js、Pythonなど様々
  • 実行時間:最長15分
  • 課金方式:リクエストに基づいく課金と実行時間(単価はメモリ量依存)に基づく課金の合計
  • 実行タイミング:特定のイベントがトリガーとして発生したときに実行

ユーザーはLambda関数を実行するため

  • Lambda関数の作成と更新、環境変数設定、IAMロールの設定などアプリケーションに関する設定
  • Lambda関数を実行するメモリサイズや最大実行時間の指定等、リソースに関する設定

など行います。

3.Lambda関数のトリガー

Lambda関数実行の起点となるイベントを「トリガー」という、以下はトリガーとして設定できるイベントの一例です。

  1. Amazon S3 バケットにオブジェクトが作成された時。
  2. Amazon DynamoDBのテーブルに変更があった時
  3. Amazon SQSキューにメッセージが追加された時
  4. Amazon SNSからトピックが通知された時
  5. Amazon API Gateway経由で直接Lambda関数が呼び出された時

例えば:ユーザーがUploadされた画像ファイルがS3に保存されたときに、Lambda関数が実行されて画像ファイルの情報をDynamoDBに書き込むという利用方法があります。

4.Lambda関数のアクセス権限

  • 実行ログの保存のため → CloudWatch Logsへのアクセス権限(Default)
  • 他のAWSサービスへのアクセス権限を持つIAMロールによって付与します。

イメージ

img

5.Lambda関数のVPCアクセス

作成したLambda関数はLambda専用セキュリティVPCに配置されます。このLambda専用VPCからは、インターネットやPublicサブネット内のAWSリソースにはアクセスできますが、Privateサブネット内のAWSリソースへはアクセスできません。

img

Lambda関数からPrivateサブネット内のAWSリソースへアクセスさせたい場合は「VPCアクセス」の設定をします。VPCアクセスではアクセスしたいAWSリソースのあるVPCやサブネットの選択と、Lambda関数のセキュリティグループを設定します。VPCアクセスを設定するとLambda関数がサブネット毎に接続用のENI(Elastic Network Interface)を作成して、Privateサブネット内のAWSリソースへアクセスします。 VPCアクセスを設定したLambda関数は、ENIを作成したサブネットへアクセスできるようになる代わりに、インターネットへアクセスできなくなります。

img

VPCアクセスを設定したLambda関数からインターネットへアクセスしたい場合は、プライベートサブネットからインターネットへアクセスする方法と同様に、NATゲートウェイまたはNATインスタンスを経由します。また、インターネットを経由せずにパブリックなAWSリソースへアクセスしたい場合は、VPCエンドポイントを経由します。

kkk58661.jpg

6.Lambda関数の同時実行

Lambda関数は、発生したイベントの数だけ同時実行されます。ある特定の時点で、実行中のLambda関数の個数を「同時実行数」といいます。同時実行数には上限値が設定されており、東京リージョンでのデフォルトの上限値は1000です。

この上限値はアカウント全体のすべてのLambda関数に対して適応されます。そのため、ある特定のLambda関数で多数の同時実行が進行している場合、別のLambda関数の実行が制限される可能性があります。このような状況を避けるため、事前に特定のLambda関数に対して「同時実行」の数を予約できます。たとえば200を予約しておくと、その関数は200まで同時実行ができ、他の関数は合計して800までの同時実行が可能となります。

Lambda関数が初めて実行される場合や一定期間実行されていない場合は、Lambda関数の実行環境であるランタイム環境の準備に時間がかかるため、Lambda関数の処理が開始されるまで時間がかかります。(コールドスタート) 一方、同じLambda関数に対するリクエストが継続的に発生する場合は、ランタイム環境が再利用されるため準備処理が省略され、Lambda関数の開始までの時間が短くなります。(ウォームスタート)

Lambda関数のランタイム環境を事前に準備しておくことを「プロビジョニング」といい、「プロビジョニングされた同時実行」を予約することで、Lambda関数の起動時間を短縮し、レスポンス時間を改善できます。これは、Lambda関数の処理でレイテンシーの低減が重要な場合に特に有効です。(ただし「プロビジョニングされた同時実行」を予約する場合、別途料金がかかります)

7.暗号化ヘルパー

Lambda関数の環境変数には、APIキー、データベースの認証情報、アクセスキーなどの機密情報が含まれることがあります。これらの情報を暗号化することは、機密情報のセキュリティを強化し、コンプライアンスを遵守し、意図しない情報の流出を防ぐために非常に重要です。 Lambda関数の設定画面だけでなく、ログやエラーメッセージでも平文で表示されないようにする必要があります。

暗号化ヘルパーは、Lambda関数で使用する環境変数をAWS KMSを使用して暗号化し、実行時に復号して利用するためのツールです。 AWS Key Management Service(KMS)は、暗号化に使用する鍵(キー)を作成・管理するサービスです。暗号化ヘルパーはKMSを利用してデータを暗号化し、安全に管理することができます。

img

8.Amazon API Gateway

API Gatewayはマネージドサービスなので、Lambdaと組み合わせることで完全にサーバーレスでWebアプリケーションを実行できます。 例えばクライアントからのHTTPリクエストをAPI Gatewayで受信し、それをトリガーとしてLambda関数を実行させ、レスポンスをAPI Gateway経由で返すことができます。

API Gatewayで作成できるAPIは、クライアントとサーバー間の接続方法や機能によって以下の3種類があります。

  1. REST API
  2. HTTP API
  3. Socket API

9.Canaryリリース

Canaryリリースは、新しいバージョンのAPIを段階的にリリースする方法です。まず、既存本番ステージ新しいAPIバージョンをデプロイし、一部トラフィックを新しいバージョンに向けます。新しいバージョンが安定して動作確認することが確認されたら、トラフィックの割合を徐々に増やしていき、最終的にすべてトラフィック新しいバージョンに移行します。もし問題発生する場合はすぐ元のバージョンに戻すことができます。

img