クイックスタート¶
5分で lambapi を始めましょう。
🚀 インストール¶
📝 最初の API¶
1. 基本的な API¶
from lambapi import API, create_lambda_handler
def create_app(event, context):
app = API(event, context)
@app.get("/")
def hello():
return {"message": "Hello, lambapi!"}
@app.get("/users/{user_id}")
def get_user(user_id: str):
return {"user_id": user_id}
return app
# Lambda エントリーポイント
lambda_handler = create_lambda_handler(create_app)
2. 依存性注入を使った API¶
from lambapi import API, Query, Path, Body, create_lambda_handler
from pydantic import BaseModel
class CreateUserRequest(BaseModel):
name: str
email: str
def create_app(event, context):
app = API(event, context)
@app.get("/search")
def search(
q: str = Query(..., description="検索クエリ"),
limit: int = Query(10, ge=1, le=100)
):
return {"query": q, "limit": limit}
@app.post("/users")
def create_user(data: CreateUserRequest = Body(...)):
return {"message": f"ユーザー {data.name} を作成しました"}
return app
lambda_handler = create_lambda_handler(create_app)
3. 認証付き API¶
from lambapi import API, Authenticated, create_lambda_handler
from lambapi.auth import DynamoDBAuth
from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute, BooleanAttribute
from pynamodb.indexes import GlobalSecondaryIndex, AllProjection
# メールインデックス定義
class EmailIndex(GlobalSecondaryIndex):
class Meta:
index_name = 'email-index'
projection = AllProjection()
email = UnicodeAttribute(hash_key=True)
# ユーザーモデル定義
class User(Model):
class Meta:
table_name = "users"
region = "us-east-1"
id = UnicodeAttribute(hash_key=True)
password = UnicodeAttribute()
email = UnicodeAttribute()
email_index = EmailIndex()
name = UnicodeAttribute()
role = UnicodeAttribute(default="user")
is_active = BooleanAttribute(default=True)
# セッションモデル定義
class UserSession(Model):
class Meta:
table_name = "user_sessions"
region = "us-east-1"
id = UnicodeAttribute(hash_key=True)
user_id = UnicodeAttribute()
token = UnicodeAttribute()
expires_at = UnicodeAttribute()
ttl = UnicodeAttribute()
def create_app(event, context):
app = API(event, context)
# 認証システム初期化
auth = DynamoDBAuth(
user_model=User,
session_model=UserSession,
secret_key="your-secret-key",
is_email_login=True,
is_role_permission=True
)
@app.post("/auth/signup")
def signup(data: dict = Body(...)):
user = User(
id=data["email"],
password=data["password"],
email=data["email"],
name=data["name"]
)
token = auth.signup(user)
return {"token": token}
@app.post("/auth/login")
def login(data: dict = Body(...)):
token = auth.email_login(data["email"], data["password"])
return {"token": token}
@app.get("/profile")
@auth.require_role("user")
def get_profile(user: User = Authenticated(...)):
return {
"id": user.id,
"name": user.name,
"email": user.email
}
return app
lambda_handler = create_lambda_handler(create_app)
🔧 ローカル開発¶
📦 デプロイ¶
AWS Lambda 用パッケージング¶
# 依存関係をインストール
pip install -r requirements.txt -t ./package
# コードをパッケージに追加
cp app.py ./package/
# ZIP ファイル作成
cd package && zip -r ../deployment.zip . && cd ..
SAM テンプレート例¶
# template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
LambapiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: package/
Handler: app.lambda_handler
Runtime: python3.10
Events:
Api:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
🎯 次のステップ¶
📚 主要機能¶
| 機能 | 説明 |
|---|---|
| 依存性注入 | FastAPI 風の型安全なパラメータ処理 |
| 認証 | DynamoDB + JWT によるセキュアな認証 |
| バリデーション | Pydantic モデルによる自動データ検証 |
| ルーティング | 直感的な URL パターンマッチング |
| CORS | クロスオリジン要求の柔軟な制御 |
| エラーハンドリング | 統一されたエラー処理システム |