AWS Lambda 函式
Vibe Prompt
「幫我用 Python 寫一個 AWS Lambda 函式:接收 API Gateway 的 POST 請求,解析 JSON body,存入 DynamoDB,回傳 201 Created。」
Lambda 函式
import json
import boto3
from datetime import datetime
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Visitors')
def lambda_handler(event, context):
body = json.loads(event['body'])
item = {
'id': str(int(datetime.now().timestamp())),
'name': body.get('name', 'anonymous'),
'message': body.get('message', ''),
'created_at': datetime.now().isoformat()
}
table.put_item(Item=item)
return {
'statusCode': 201,
'headers': {'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'},
'body': json.dumps({'id': item['id'], 'message': 'Created successfully'})
}
CDK 部署
import * as lambda_ from 'aws-cdk-lib/aws-lambda';
import * as apigw from 'aws-cdk-lib/aws-apigateway';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
const table = new dynamodb.Table(this, 'Visitors', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});
const fn = new lambda_.Function(this, 'VisitorFunc', {
runtime: lambda_.Runtime.PYTHON_3_11,
handler: 'index.lambda_handler',
code: lambda_.Code.fromAsset('lambda'),
environment: { TABLE_NAME: table.tableName },
});
table.grantWriteData(fn);
new apigw.LambdaRestApi(this, 'VisitorApi', { handler: fn });