Optimasi AWS Lambda dengan Claude Code
Pelajari tentang optimasi AWS Lambda menggunakan Claude Code. Tips praktis dan contoh kode disertakan.
Mempercepat AWS Lambda Development dengan Claude Code
AWS Lambda adalah layanan komputasi serverless berbasis event. Dengan integrasi erat bersama layanan AWS seperti API Gateway, S3, DynamoDB, kamu bisa membangun backend yang scalable. Dengan Claude Code, pola implementasi khusus Lambda dan penulisan IaC juga bisa dilakukan secara efisien.
Desain Dasar Lambda Function
> Buat Lambda function dengan TypeScript.
> Dengan konfigurasi untuk memproses request dari API Gateway.
// src/handlers/api.ts
import {
APIGatewayProxyEvent,
APIGatewayProxyResult,
Context,
} from 'aws-lambda';
export const handler = async (
event: APIGatewayProxyEvent,
context: Context
): Promise<APIGatewayProxyResult> => {
const { httpMethod, path, body, queryStringParameters } = event;
try {
switch (`${httpMethod} ${path}`) {
case 'GET /users':
return await getUsers(queryStringParameters);
case 'POST /users':
return await createUser(JSON.parse(body || '{}'));
case 'GET /users/{id}':
const id = event.pathParameters?.id;
return await getUser(id!);
default:
return response(404, { error: 'Not Found' });
}
} catch (error) {
console.error('Lambda error:', error);
return response(500, { error: 'Internal Server Error' });
}
};
function response(statusCode: number, body: object): APIGatewayProxyResult {
return {
statusCode,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
},
body: JSON.stringify(body),
};
}
async function getUsers(params: any) {
// Ambil daftar user dari DynamoDB
return response(200, { users: [] });
}
async function createUser(data: any) {
return response(201, { id: 'new-user-id', ...data });
}
async function getUser(id: string) {
return response(200, { id, name: 'User' });
}
Integrasi DynamoDB
> Buat utility untuk operasi CRUD menggunakan DynamoDB.
// src/lib/dynamodb.ts
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import {
DynamoDBDocumentClient,
GetCommand,
PutCommand,
QueryCommand,
DeleteCommand,
} from '@aws-sdk/lib-dynamodb';
const client = new DynamoDBClient({});
const docClient = DynamoDBDocumentClient.from(client);
const TABLE_NAME = process.env.TABLE_NAME!;
export async function getItem<T>(pk: string, sk: string): Promise<T | null> {
const { Item } = await docClient.send(
new GetCommand({
TableName: TABLE_NAME,
Key: { PK: pk, SK: sk },
})
);
return (Item as T) || null;
}
export async function putItem(item: Record<string, any>): Promise<void> {
await docClient.send(
new PutCommand({
TableName: TABLE_NAME,
Item: {
...item,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
},
})
);
}
export async function queryItems<T>(
pk: string,
skPrefix?: string
): Promise<T[]> {
const params: any = {
TableName: TABLE_NAME,
KeyConditionExpression: skPrefix
? 'PK = :pk AND begins_with(SK, :sk)'
: 'PK = :pk',
ExpressionAttributeValues: { ':pk': pk },
};
if (skPrefix) {
params.ExpressionAttributeValues[':sk'] = skPrefix;
}
const { Items } = await docClient.send(new QueryCommand(params));
return (Items as T[]) || [];
}
Definisi Infrastruktur dengan AWS CDK
> Definisikan stack Lambda + API Gateway + DynamoDB dengan CDK.
// lib/api-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
import { Construct } from 'constructs';
export class ApiStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Tabel DynamoDB
const table = new dynamodb.Table(this, 'MainTable', {
partitionKey: { name: 'PK', type: dynamodb.AttributeType.STRING },
sortKey: { name: 'SK', type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
removalPolicy: cdk.RemovalPolicy.RETAIN,
});
// Fungsi Lambda
const apiHandler = new NodejsFunction(this, 'ApiHandler', {
entry: 'src/handlers/api.ts',
handler: 'handler',
runtime: lambda.Runtime.NODEJS_20_X,
architecture: lambda.Architecture.ARM_64,
memorySize: 256,
timeout: cdk.Duration.seconds(30),
environment: {
TABLE_NAME: table.tableName,
NODE_OPTIONS: '--enable-source-maps',
},
bundling: {
minify: true,
sourceMap: true,
},
});
table.grantReadWriteData(apiHandler);
// API Gateway
const api = new apigateway.RestApi(this, 'Api', {
restApiName: 'My API',
deployOptions: { stageName: 'v1' },
});
const users = api.root.addResource('users');
users.addMethod('GET', new apigateway.LambdaIntegration(apiHandler));
users.addMethod('POST', new apigateway.LambdaIntegration(apiHandler));
}
}
Development Lokal dan Testing
# Eksekusi lokal dengan SAM
sam local start-api
# Test fungsi tertentu
sam local invoke ApiHandler -e events/get-users.json
# Deploy CDK
cdk deploy --require-approval never
Summary
Dengan menggabungkan AWS Lambda dan Claude Code, kamu bisa maju secara efisien dari desain arsitektur serverless hingga penulisan IaC. Lihat juga Panduan Deployment AWS dan Panduan Serverless Functions.
Untuk detail AWS Lambda, lihat Dokumentasi Resmi AWS Lambda.
Related Posts
Cara Mempercepat Side Project dengan Claude Code [Dengan Contoh]
Pelajari cara mempercepat project development personal secara drastis menggunakan Claude Code. Dilengkapi contoh nyata dan workflow praktis dari ide hingga deployment.
Cara Mengotomatisasi Refactoring dengan Claude Code
Pelajari cara mengotomatisasi code refactoring secara efisien menggunakan Claude Code. Dilengkapi prompt praktis dan pola refactoring konkret untuk project nyata.
Panduan Lengkap Konfigurasi CORS dengan Claude Code
Pelajari tentang panduan lengkap konfigurasi CORS menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.