AWS Lambdaとは

目次

1.Lambdaとは

読み方はラムダです。Pythonなどで書いたコードを登録し、ファイルの保存や時刻などをきっかけに実行できます。

サーバーレスとは、利用者がサーバーを用意したり、OSを保守したりする必要がない方式です。実際のサーバーはAWS側にあり、AWSが管理します。

利用者が管理するのは、主に処理内容・プログラムやライブラリ・権限・実行設定です。

2. どのように動く?

きっかけ 例:S3にファイル保存

↓

Lambda関数 コードを実行

↓

処理結果 例:加工してS3に保存

この実行のきっかけをトリガーと呼びます。処理対象の情報はイベントとして関数へ渡されます。

用語 意味
関数 実行するコードと、そのメモリ・権限などの設定をまとめたもの。
ランタイム Python、Node.jsなど、コードを動かすための環境。
ハンドラー Lambdaが呼び出す、コードの入口となる関数。
呼び出し(Invoke) Lambda関数を実行させること。

実行要求が増えると、Lambdaは設定された上限の範囲で実行環境を増やします。すべての要求を無制限に同時実行できるわけではありません。

3.主な用途とトリガー

きっかけ 処理の例
Amazon S3 アップロードされた画像の縮小、CSVファイルの加工。
Amazon EventBridge
Scheduler
毎朝9時に処理を実行する、EC2の状態を定期確認する。
Amazon API Gateway Web画面からの要求を受け、データを検索して返す。
Amazon SQS キューにたまった依頼を順次処理する。Lambda側がメッセージを取得して実行する。
SDK・AWS CLI・コンソール アプリや管理者が明示的に関数を呼び出す。

得意な処理:短時間の自動処理、イベント処理、管理作業の自動化、APIの裏側の処理。

別の方式も検討する処理:一般的な関数の実行時間上限を超える長時間処理、OSへのログインや自由なOS設定が必要な処理。EC2、ECS、AWS Batchなどと比較します。

4.EC2との違い

比較 Lambda(一般的な関数) EC2
使い方 コードを登録して呼び出す 仮想サーバーを起動して使う
OSの管理 基盤OSはAWSが管理 通常、利用者が更新・設定を管理
処理時間 通常の関数は1回最大15分 長時間の連続処理が可能
拡張 同時実行数などに応じて自動で増減 Auto Scalingなどを設計・設定
料金の中心 呼び出し回数・割当メモリ・実行時間 インスタンスの稼働時間など
状態の保存 S3やDBなど外部への保存が基本 EBSなどを使って保存

Lambdaには実行方式による違いがあります。ここでの時間・料金の説明は、通常のイベント駆動の関数を前提にしています。

5.最小限のPythonコード例

def lambda_handler(event, context):
    name = event.get("name", "ゲスト")
    print(f"処理開始: {name}")
    return {"message": f"こんにちは、{name}さん"}

テストイベントとして次のJSONを渡します。

{"name": "田中"}

戻り値は {"message": "こんにちは、田中さん"} です。eventには入力データ、contextには残り実行時間などの実行情報が入ります。

ファイル名が lambda_function.py の場合、ハンドラー設定は lambda_function.lambda_handler です。ログ出力の権限があれば、printの内容をCloudWatch Logsで確認できます。

6.IAMの権限は2方向で考える

方向 何を決める? 例
呼び出し元 → Lambda 誰が関数を実行できるか S3やAPI Gatewayからの呼び出しを許可する。
Lambda → AWSサービス 実行中のコードが何を操作できるか S3読み取り、EC2状態取得、ログ書き込みを許可する。

後者に使うのが実行ロール(IAMロール)です。たとえばEC2の状態を取得するコードには、ec2:DescribeInstancesなどの必要な権限を付与します。通常、アクセスキーをコードに書く必要はありません。

コードにAWS APIを書くだけでは操作できません。必要な権限と通信経路の両方が必要です。権限は必要な操作・リソースに絞ります。

7.VPC・インターネット公開・クロスアカウント

VPCに接続するのは、主にプライベートな接続先へ到達するため

設定 通信の考え方
利用者のVPCに接続しない AWSが管理するネットワークで動き、通常は外部の公開APIなどにアクセス可能。
利用者のVPCに接続する サブネットとセキュリティグループを指定。RDSや社内サーバーなどへの経路を設計する。

VPC接続後にIPv4でインターネットへ出る場合は、通常、プライベートサブネットからNAT Gatewayなどを経由します。パブリックサブネットを指定するだけでは、LambdaにパブリックIPは付かず、インターネットへ接続できません。AWSサービスには、対応するVPCエンドポイントを利用する方法もあります。

関数を作るだけで、誰でも実行できるWebサイトになる?

なりません。VPCに接続していないことと、匿名の第三者が呼び出せることは別です。Webから利用させる場合はAPI Gatewayや関数URLなどを設定し、認証・アクセス権限を確認します。

関数URLで認証タイプをNONEとし、公開アクセスを許可すると、認証なしで呼び出せる構成になります。AWS_IAMではIAMによる認証・認可を行います。VPC接続だけでは、関数URLの呼び出しを非公開にはできません。

別のAWSアカウントの情報を取得する場合

代表的な構成は、Lambdaの実行ロール → STSのAssumeRole → 相手アカウントのIAMロール → 対象サービスのAPIです。呼び出し側の権限と、相手ロールの信頼ポリシー・操作権限を設定します。

EC2の起動状態やIAMユーザー一覧の取得は、AWS APIへのアクセスです。クロスアカウントという理由だけで、VPCピアリングや専用のVPCエンドポイントが必須になるわけではありません。一方、別アカウントのEC2のプライベートIPへ直接通信する場合は、別途ネットワーク接続が必要です。

8.料金の考え方

一般的なオンデマンドの関数では、主に呼び出し回数と割当メモリ × 実行時間に応じて料金が発生します。メモリを増やすとCPU能力も増えるため、実行時間が短くなる場合があります。

計算量の例:1GBのメモリで2秒実行 × 1,000回 = 2,000 GB秒。これは使用量の例で、金額ではありません。

CloudWatch Logs、S3、API Gateway、NAT Gateway、データ転送などの料金は別途発生します。Provisioned Concurrencyなど、待機していても費用が生じる設定もあります。最新の単価・無料利用枠・対象条件は公式料金ページで確認してください。

9.運用で押さえるポイント

項目 確認すること
タイムアウト 想定処理時間に合わせる。通常の関数は最大900秒(15分)。
メモリ 処理速度と料金を実測して調整する。
コールドスタート 実行環境の初期化により、最初の応答などが遅くなる場合がある。
再試行・重複 呼び出し方式により再試行の仕組みが異なる。同じイベントを複数回処理しても問題が起きない設計にする。
同時実行数 DBや外部APIに負荷が集中しないように上限を考える。
状態・ファイル 実行環境は再利用されることもあるが、継続は保証されない。永続データはS3やDBへ保存する。
ログ・監視 CloudWatchでエラー、実行時間、スロットリングなどを確認。ログの保存期間も設定する。
機密情報 パスワードやトークンをコード・ログへ直接出さない。Secrets Managerなどを利用する。

10.最初に試す手順

  1. Lambdaコンソールで関数を作成し、Pythonなどのランタイムを選ぶ。
  2. 実行ロールを設定し、まずはログ出力に必要な権限を確認する。
  3. 上記のコードを登録し、デプロイする。
  4. テストイベントを作り、関数を実行する。
  5. 戻り値とCloudWatch Logsを確認する。
  6. 目的に応じてS3などのトリガーと、必要な操作権限を追加する。

関連の記事

AWS Lambdaでhello worldを出力する(Python)

△上に戻る