API GatewayとLambda
🔥 Vibe プロンプト
「API Gateway HTTP API + Lambda + DynamoDBでサーバーレスCRUD APIを作成。」
import boto3, json, os
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['TABLE_NAME'])
def lambda_handler(event, context):
method = event['requestContext']['http']['method']
path = event['requestContext']['http']['path']
if method == 'GET' and path == '/items':
items = table.scan()['Items']
return {"statusCode": 200, "body": json.dumps(items)}
elif method == 'POST' and path == '/items':
body = json.loads(event['body'])
table.put_item(Item=body)
return {"statusCode": 201}
Terraform
resource "aws_apigatewayv2_api" "http" {
name = "serverless-api"
protocol_type = "HTTP"
}
resource "aws_apigatewayv2_integration" "lambda" {
api_id = aws_apigatewayv2_api.http.id
integration_type = "AWS_PROXY"
integration_uri = aws_lambda_function.api.arn
}
resource "aws_apigatewayv2_route" "proxy" {
api_id = aws_apigatewayv2_api.http.id
route_key = "$default"
target = "integrations/${aws_apigatewayv2_integration.lambda.id}"
}
主要概念
- HTTP API = REST APIより安い
- $defaultルートですべてのパスをキャッチ
- Lambdaプロキシ統合で完全リクエスト渡し
- CORSはAPI Gatewayレベルで設定
コスト比較
| APIタイプ | コスト(100万リクエスト) | |----------|------------------------| | HTTP API | ~$1.00 | | REST API | ~$3.50 |
重要なポイント
- コアコンセプトをしっかり理解する
- ハンズオンコード例で実践する
- 実世界の問題に応用する
- 演習で知識を強化する
さらに学ぶ
- 公式ドキュメント
- GitHubのオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル