Claude Code के साथ Efficiently Developing Serverless Functions
Claude Code का उपयोग करके efficiently developing serverless functions सीखें। Practical code examples शामिल हैं।
serverレスdevelopmentにClaude Code use करनाメリット
serverレスfunctionはコールドスタート対策、メモリoptimization、payloadsize制限 आदि、固有の制約があり है।Claude Codeはこれらの制約を理解したऊपरで、optimizationされたcode generateし है।
AWS Lambdafunctionのdevelopment
> AWS Lambda + API Gatewayで画像リsizeAPIをबनाओ。
> SAMtemplateもबनाओ。TypeScriptでimplement करो。
Lambdafunction
// src/handlers/resize-image.ts
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
import sharp from 'sharp';
const s3 = new S3Client({});
interface ResizeRequest {
key: string;
width: number;
height?: number;
quality?: number;
}
export async function handler(event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> {
try {
const body = JSON.parse(event.body || '{}') as ResizeRequest;
if (!body.key || !body.width) {
return {
statusCode: 400,
body: JSON.stringify({ error: 'key and width are required' }),
};
}
// S3 से元画像 fetch
const { Body, ContentType } = await s3.send(new GetObjectCommand({
Bucket: process.env.BUCKET_NAME!,
Key: body.key,
}));
const buffer = Buffer.from(await Body!.transformToByteArray());
// リsize
const resized = await sharp(buffer)
.resize(body.width, body.height, { fit: 'cover', withoutEnlargement: true })
.webp({ quality: body.quality || 80 })
.toBuffer();
// リsizeबादの画像を保存
const outputKey = body.key.replace(/\.[^.]+$/, `-${body.width}w.webp`);
await s3.send(new PutObjectCommand({
Bucket: process.env.BUCKET_NAME!,
Key: outputKey,
Body: resized,
ContentType: 'image/webp',
}));
return {
statusCode: 200,
body: JSON.stringify({
key: outputKey,
size: resized.length,
width: body.width,
}),
};
} catch (err) {
console.error('Resize error:', err);
return {
statusCode: 500,
body: JSON.stringify({ error: 'Internal server error' }),
};
}
}
SAMtemplate
# template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Runtime: nodejs20.x
Timeout: 30
MemorySize: 512
Environment:
Variables:
BUCKET_NAME: !Ref ImageBucket
Resources:
ResizeFunction:
Type: AWS::Serverless::Function
Properties:
Handler: dist/handlers/resize-image.handler
Events:
Api:
Type: Api
Properties:
Path: /resize
Method: post
Policies:
- S3CrudPolicy:
BucketName: !Ref ImageBucket
Metadata:
BuildMethod: esbuild
BuildProperties:
Minify: true
Target: es2022
External:
- sharp
ImageBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub '${AWS::StackName}-images'
Outputs:
ApiUrl:
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/'
Cloudflare Workersのdevelopment
> Cloudflare Workersで短縮URLgenerateserviceをबनाओ。
> KVストアका उपयोग करकेURLmappingをmanagementして。
// src/worker.ts
interface Env {
URL_STORE: KVNamespace;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
// 短縮URLのredirect
if (request.method === 'GET' && url.pathname.length > 1) {
const slug = url.pathname.slice(1);
const targetUrl = await env.URL_STORE.get(slug);
if (targetUrl) {
return Response.redirect(targetUrl, 302);
}
return new Response('Not found', { status: 404 });
}
// URL短縮のcreate
if (request.method === 'POST' && url.pathname === '/api/shorten') {
const { url: targetUrl } = await request.json<{ url: string }>();
if (!targetUrl || !isValidUrl(targetUrl)) {
return Response.json({ error: 'Invalid URL' }, { status: 400 });
}
const slug = generateSlug();
await env.URL_STORE.put(slug, targetUrl, { expirationTtl: 86400 * 365 });
return Response.json({
shortUrl: `${url.origin}/${slug}`,
slug,
originalUrl: targetUrl,
});
}
return new Response('Method not allowed', { status: 405 });
},
};
function generateSlug(): string {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
return Array.from(crypto.getRandomValues(new Uint8Array(7)))
.map(b => chars[b % chars.length])
.join('');
}
function isValidUrl(str: string): boolean {
try {
const url = new URL(str);
return url.protocol === 'http:' || url.protocol === 'https:';
} catch {
return false;
}
}
Vercel Edge Functionsのdevelopment
// app/api/og/route.tsx
import { ImageResponse } from 'next/og';
export const runtime = 'edge';
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const title = searchParams.get('title') || 'My Blog';
return new ImageResponse(
(
<div
style={{
height: '100%',
width: '100%',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#1a1a2e',
color: '#ffffff',
fontFamily: 'sans-serif',
}}
>
<h1 style={{ fontSize: 60, textAlign: 'center', padding: '0 40px' }}>
{title}
</h1>
</div>
),
{ width: 1200, height: 630 }
);
}
コールドスタート対策
// Lambda のコールドスタート対策
// 接続の再利用
let dbConnection: PrismaClient | null = null;
function getDB() {
if (!dbConnection) {
dbConnection = new PrismaClient();
}
return dbConnection;
}
// ウォームアップ用handler
export async function warmupHandler(event: ScheduledEvent) {
// CloudWatch Eventsで定期実行してコールドスタートを防ぐ
console.log('Warmup invocation');
return { statusCode: 200 };
}
test
import { handler } from './resize-image';
import { mockClient } from 'aws-sdk-client-mock';
import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
const s3Mock = mockClient(S3Client);
describe('resize-image handler', () => {
beforeEach(() => {
s3Mock.reset();
});
it('should return 400 when key is missing', async () => {
const event = { body: JSON.stringify({ width: 200 }) } as any;
const result = await handler(event);
expect(result.statusCode).toBe(400);
});
it('should resize and upload image', async () => {
s3Mock.on(GetObjectCommand).resolves({
Body: createMockStream(testImageBuffer),
ContentType: 'image/jpeg',
});
s3Mock.on(PutObjectCommand).resolves({});
const event = {
body: JSON.stringify({ key: 'test.jpg', width: 200 }),
} as any;
const result = await handler(event);
expect(result.statusCode).toBe(200);
});
});
Summary
Claude Code का उपयोग करके、Lambda・Cloudflare Workers・Vercel Functions आदि各種serverレスプラットformにoptimizationされたfunctionをefficientlydevelopmentでき है।プラットform固有の制約を理解したऊपरでcode generateしてくれるため、コールドスタート対策やメモリoptimizationもappropriateに行われ है।AWSでの本格的な運用के बारे मेंはAWSdeployのautomationもदेखें。developmentのbasic efficiency improvementは生産性を3倍にするTipsで紹介してい है।
Claude Codeके details के लिएAnthropicofficial documentationदेखें。
Related Posts
Claude Code से अपने Side Projects को Supercharge कैसे करें [Examples के साथ]
Claude Code से personal development projects को dramatically speed up करना सीखें। Real-world examples और idea से deployment तक practical workflow शामिल है।
Claude Code से Refactoring कैसे Automate करें
Claude Code से efficiently code refactoring automate करना सीखें। Real-world projects के लिए practical prompts और concrete refactoring patterns शामिल हैं।
Claude Code के साथ Complete CORS Configuration Guide
Claude Code का उपयोग करके complete CORS configuration guide सीखें। Practical tips और code examples शामिल हैं।