AWS Lambda

🔥 Vibe プロンプト

「S3アップロードをトリガーに画像リサイズを行うLambdaを作成。Terraformでデプロイ。」

import boto3, os
from PIL import Image
import io

s3 = boto3.client('s3')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    
    response = s3.get_object(Bucket=bucket, Key=key)
    image = Image.open(io.BytesIO(response['Body'].read()))
    image.thumbnail((200, 200))
    
    buffer = io.BytesIO()
    image.save(buffer, 'JPEG')
    s3.put_object(Bucket=bucket, Key=f"thumbnails/{key.split('/')[-1]}", Body=buffer.getvalue())
    
    return {"statusCode": 200, "body": "リサイズ完了!"}

Terraform

resource "aws_lambda_function" "resizer" {
  filename         = "lambda.zip"
  function_name    = "image-resizer"
  role             = aws_iam_role.lambda.arn
  handler          = "lambda_function.lambda_handler"
  runtime          = "python3.12"
  timeout          = 30
  memory_size      = 256
}

resource "aws_s3_bucket_notification" "uploads" {
  bucket = aws_s3_bucket.uploads.id
  lambda_function {
    lambda_function_arn = aws_lambda_function.resizer.arn
    events = ["s3:ObjectCreated:*"]
  }
}

ベストプラクティス

| プラクティス | 理由 | |-----------|------| | タイムアウトとメモリ設定 | コスト管理 | | 環境変数を使用 | 設定注入 | | コールドスタート最小化 | UX向上 | | Powertools使用 | 可観測性 |

制限

| リソース | 制限 | |---------|------| | メモリ | 128 MB - 10 GB | | タイムアウト | 900秒 | | ペイロード | 6 MB (同期) | | /tmpストレージ | 512 MB - 10 GB |

重要なポイント

  • コアコンセプトをしっかり理解する
  • ハンズオンコード例で実践する
  • 実世界の問題に応用する
  • 演習で知識を強化する

さらに学ぶ

  • 公式ドキュメント
  • GitHubのオープンソースプロジェクト
  • コミュニティフォーラムとディスカッション
  • 関連コースとチュートリアル

会員限定無料チュートリアル

このチャプターは登録会員限定の無料コンテンツです!ログインまたは登録してすぐにロックを解除してください。

今すぐログイン / 登録