0Pricing
AWS Solutions Architect · レッスン

Lambda 関数:ランタイム、トリガー、ハンドラー

Lambda 関数を作成し、ランタイムを選択してメモリとタイムアウトを設定し、S3 イベントまたは API Gateway トリガーに接続します。

「Lambda 関数:ランタイム、トリガー、ハンドラー」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。

AWS Lambdaとは

AWS Lambdaは、サーバーをプロビジョニングまたは管理することなく、イベントに応じてコードを実行するサーバーレスコンピューティングサービスです。消費したコンピューティング時間(ミリ秒単位で計測)に対してのみ料金が発生するため、断続的なイベント駆動型ワークロードに対して非常にコスト効率に優れています。Lambdaは、受信イベントに基づいて、同時実行数をゼロから数千まで自動的にスケールします。

サポートされるランタイム

Lambdaは、Python、Node.js、Java、Go、Ruby、.NETなどのマネージドランタイムをサポートしています。これらのランタイムはAWSが管理し、セキュリティパッチを適用します。ネイティブにサポートされていない言語やランタイムバージョンの場合は、bootstrap実行可能ファイルを使用してCustom Runtimeを提供するか、ZIPデプロイパッケージではなくコンテナイメージ(最大10 GB)に関数をパッケージ化できます。

Lambdaハンドラー関数

すべてのLambda関数にはハンドラーがあります。これは、コードがエクスポートする必要のあるエントリーポイントです。AWSはハンドラーを2つの引数で呼び出します。1つ目はイベントオブジェクト(トリガーから渡される入力データ)、2つ目はコンテキストオブジェクト(関数名、残り時間、リクエストIDなど、呼び出しに関するメタデータ)です。ハンドラーはレスポンスを返します。このレスポンスは、呼び出し方法によっては呼び出し元に返されます。

# Python handler example
def lambda_handler(event, context):
    # event contains the trigger payload
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    print(f'Processing {key} from {bucket}')
    return {
        'statusCode': 200,
        'body': 'Processed successfully'
    }

メモリ、タイムアウト、エフェメラルストレージ

Lambdaでは、メモリを128 MBから10,240 MBまで設定できます。CPUはメモリ量に比例して割り当てられるため、メモリを増やすとCPUも増えます。タイムアウトは1秒から15分まで設定でき、関数がこの時間を超えるとLambdaによって終了されます。また、1回の呼び出し中に一時ファイルを保存するための/tmpエフェメラルストレージも使用できます(デフォルトは512 MBで、最大10 GBまで設定可能)。このストレージは呼び出しをまたいで保持されません。

同期呼び出しと非同期呼び出し

Lambda関数は同期(呼び出し元が結果を待機する方式。API GatewayやALBで使用)または非同期(呼び出し元が待機しない方式。S3イベントやSNSで使用)で呼び出せます。非同期モードでは、Lambdaは失敗した実行を2回まで再試行し、失敗したイベントをデッドレターキュー(SQSまたはSNS)またはEventBridgeイベントバスにルーティングできます。適切な呼び出しモードを選ぶことは、エラーハンドリングの設計に影響します。

Lambdaの一般的なトリガー

Lambdaは、数十種類のAWSサービスとイベントソース(トリガー)としてネイティブに統合できます。

  • API Gateway / ALB:HTTPリクエスト(同期)
  • S3:オブジェクトの作成・削除イベント(非同期)
  • DynamoDB Streams / Kinesis:レコードのストリーミング(ポーリングベース、同期)
  • SQS:キューメッセージ(ポーリングベース)
  • SNS:トピック通知(非同期)
  • EventBridge:スケジュールイベントまたはカスタムイベント
  • CloudWatch Logs:ログサブスクリプションフィルター

IAM実行ロール

すべてのLambda関数には、関数が他のAWSサービスを呼び出すための権限を付与するIAM実行ロールが必要です。たとえば、関数がS3から読み取り、DynamoDBに書き込む場合、実行ロールにはs3:GetObjectとdynamodb:PutItemの権限が必要です。最小権限の原則に従い、関数が実際に必要とする権限だけを付与してください。基本的な実行ロールには、CloudWatch Logsを使用するためのlogs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEventsも含める必要があります。

デプロイパッケージとサイズ制限

Lambdaでは、2種類のデプロイ形式を使用できます。1つ目は、直接またはS3経由でアップロードするZIPファイル(圧縮時50 MB、解凍時250 MB)です。2つ目は、Amazon ECRに保存するコンテナイメージ(最大10 GB)です。ZIPパッケージはデプロイが速く、小規模な関数やLambda Layersに適しています。コンテナイメージは、依存関係が多い場合や、すでにDockerベースのワークフローを利用しているチームに適しています。どちらの形式でも、同じランタイムとハンドラーパターンを使用できます。

# Deploy a ZIP package from S3
aws lambda update-function-code \
  --function-name 'MyFunction' \
  --s3-bucket 'my-lambda-packages' \
  --s3-key 'my-function-v2.zip'

環境変数とシークレット

Lambdaには、環境変数を使って設定を渡します。APIキーやデータベースのパスワードなどの機密情報は、AWS Secrets ManagerまたはParameter Storeに保存し、関数の初期化時(ハンドラーの外部)に取得すると、実行コンテキストの再利用によるメリットを得られます。シークレットを関数コードにハードコードしたり、環境変数に平文で保存したりしないでください。保存時の保護には、Lambda環境変数のKMS暗号化を使用してください。

import boto3
import os

# Fetch secret once during cold start (outside handler)
ssm = boto3.client('ssm')
DB_PASSWORD = ssm.get_parameter(
    Name=os.environ['DB_PASSWORD_PARAM'],
    WithDecryption=True
)['Parameter']['Value']

def lambda_handler(event, context):
    # DB_PASSWORD is already loaded; no SSM call on each invocation
    pass

コールドスタートと実行コンテキストの再利用

デプロイ後または一定期間使用されなかった後のLambda関数の最初の呼び出しでは、コールドスタートが発生します。AWSはランタイム環境を初期化し、デプロイパッケージをダウンロードして、初期化コードを実行する必要があります。同じ実行環境で続けて呼び出される場合はウォームスタートとなり、大幅に高速です。SDKクライアントやデータベース接続などのグローバル初期化コードはハンドラーの外部に置き、ウォーム呼び出し間で実行コンテキストを再利用してください。

VPC内のLambda

デフォルトでは、LambdaはAWSが管理するVPCで実行され、インターネットにはアクセスできますが、ユーザーのプライベートVPCリソースにはアクセスできません。プライベートサブネットにあるRDSデータベースやElastiCacheクラスターにアクセスするには、サブネットとセキュリティグループを指定して、LambdaがVPC内で実行されるように設定します。VPC対応のLambda関数はネットワークにHyperplane ENIを使用します(関数ごとのENIプロビジョニングが不要です)。これにより、VPC内のLambdaで従来発生していたコールドスタートのペナルティが解消されます。

aws lambda update-function-configuration \
  --function-name 'MyFunction' \
  --vpc-config 'SubnetIds=subnet-aaa111,subnet-bbb222,SecurityGroupIds=sg-xyz'

理解度チェック

このレッスンで扱ったAWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、次のことを学びました。LambdaランタイムはPython、Node.js、Java、Goなどをサポートしており、高度な用途ではカスタムランタイムやコンテナイメージも使用できます。API Gateway(同期)やS3・SNS(非同期)などのトリガーによって、イベントがLambda関数に渡される方法が決まります。また、実行ロール、環境変数、VPC設定は、Lambdaを他のAWSサービスに安全に接続するための重要な要素です。次は、Lambdaの同時実行数、スロットリング、予約済み同時実行数について学びます。

よくある質問

「Lambda 関数:ランタイム、トリガー、ハンドラー」レッスンは無料ですか?

はい。「Lambda 関数:ランタイム、トリガー、ハンドラー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。

「Lambda 関数:ランタイム、トリガー、ハンドラー」で何を学びますか?

Lambda 関数を作成し、ランタイムを選択してメモリとタイムアウトを設定し、S3 イベントまたは API Gateway トリガーに接続します。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AWS Solutions Architectを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Lambda 関数:ランタイム、トリガー、ハンドラー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAWS Solutions Architectレッスンでコードを書いて実行できますか?

はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Lambda 関数:ランタイム、トリガー、ハンドラー
  2. 同時実行数、スロットリング、予約済み同時実行数
  3. Lambda Layers とデプロイパッケージ
  4. Lambda@Edge とイベント駆動パターン
← AWS Solutions Architectに戻る