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のオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル