目次
1.Lambdaとは
読み方はラムダです。Pythonなどで書いたコードを登録し、ファイルの保存や時刻などをきっかけに実行できます。
サーバーレスとは、利用者がサーバーを用意したり、OSを保守したりする必要がない方式です。実際のサーバーはAWS側にあり、AWSが管理します。
2. どのように動く?
↓
↓
この実行のきっかけをトリガーと呼びます。処理対象の情報はイベントとして関数へ渡されます。
| 用語 | 意味 |
|---|---|
| 関数 | 実行するコードと、そのメモリ・権限などの設定をまとめたもの。 |
| ランタイム | 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などの必要な権限を付与します。通常、アクセスキーをコードに書く必要はありません。
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能力も増えるため、実行時間が短くなる場合があります。
CloudWatch Logs、S3、API Gateway、NAT Gateway、データ転送などの料金は別途発生します。Provisioned Concurrencyなど、待機していても費用が生じる設定もあります。最新の単価・無料利用枠・対象条件は公式料金ページで確認してください。
9.運用で押さえるポイント
| 項目 | 確認すること |
|---|---|
| タイムアウト | 想定処理時間に合わせる。通常の関数は最大900秒(15分)。 |
| メモリ | 処理速度と料金を実測して調整する。 |
| コールドスタート | 実行環境の初期化により、最初の応答などが遅くなる場合がある。 |
| 再試行・重複 | 呼び出し方式により再試行の仕組みが異なる。同じイベントを複数回処理しても問題が起きない設計にする。 |
| 同時実行数 | DBや外部APIに負荷が集中しないように上限を考える。 |
| 状態・ファイル | 実行環境は再利用されることもあるが、継続は保証されない。永続データはS3やDBへ保存する。 |
| ログ・監視 | CloudWatchでエラー、実行時間、スロットリングなどを確認。ログの保存期間も設定する。 |
| 機密情報 | パスワードやトークンをコード・ログへ直接出さない。Secrets Managerなどを利用する。 |
10.最初に試す手順
- Lambdaコンソールで関数を作成し、Pythonなどのランタイムを選ぶ。
- 実行ロールを設定し、まずはログ出力に必要な権限を確認する。
- 上記のコードを登録し、デプロイする。
- テストイベントを作り、関数を実行する。
- 戻り値とCloudWatch Logsを確認する。
- 目的に応じてS3などのトリガーと、必要な操作権限を追加する。
関連の記事
