Claude Code × AWS Lambda Panduan Lengkap | Dari Pembuatan Fungsi hingga Otomatisasi Deployment
Kembangkan fungsi AWS Lambda dengan cepat menggunakan Claude Code. Tutorial lengkap dengan contoh kode nyata: pembuatan handler, desain kebijakan IAM, otomatisasi SAM, integrasi API Gateway/S3/DynamoDB.
Pernahkah Anda mengalami ini saat mengembangkan AWS Lambda? Definisi tipe untuk handler membosankan, harus mencari kebijakan IAM setiap kali, lupa cara menulis template SAM… Claude Code menyelesaikan semua ini sekaligus.
Dari implementasi fungsi Lambda hingga pembuatan kebijakan IAM, pengujian lokal, dan deployment ke produksi — kami membahas setiap langkah pengembangan AWS Lambda super cepat dengan Claude Code menggunakan contoh kode nyata.
Mengapa Claude Code × AWS Lambda?
“Bagian membosankan” dari pengembangan Lambda hampir seluruhnya adalah kode boilerplate.
- Definisi tipe untuk fungsi handler (APIGatewayProxyHandler, S3Handler …)
- Penanganan error dan format respons
- Desain kebijakan IAM dengan hak istimewa minimum
- Penulisan template SAM / CloudFormation
- Konfigurasi lingkungan pengujian lokal
Claude Code menghasilkan semua ini dengan satu kalimat seperti “Saya ingin Lambda yang melakukan X”. Dikombinasikan dengan AWS CLI dan SAM CLI, Anda bisa menjalankan semuanya dari pembuatan kode hingga deployment sekaligus.
Pengaturan Lingkungan
# Periksa alat yang diperlukan
aws --version # AWS CLI v2
sam --version # SAM CLI 1.100+
node --version # Node.js 20+
# Konfigurasi kredensial AWS (jika belum dikonfigurasi)
aws configure
# → Access Key ID, Secret Access Key, Region (ap-southeast-1), Output (json)
<!-- Tambahkan ke CLAUDE.md -->
## Konfigurasi AWS
- Region default: ap-southeast-1 (Singapura)
- Runtime Lambda: nodejs20.x
- Alat deployment: AWS SAM
- Direktori sumber: src/functions/
- Template SAM: template.yaml
- Nama stack: my-app-{dev|staging|prod}
## Pedoman Kebijakan IAM
- Terapkan prinsip hak istimewa minimum dengan ketat
- Jangan gunakan wildcard (*)
- Tentukan ARN sumber daya secara konkret
Contoh 1: API Gateway + Lambda (REST API)
Pola paling dasar — Lambda yang menerima permintaan HTTP dan memprosesnya.
Instruksi ke Claude Code
claude -p "
Ketika permintaan GET datang ke /users/{userId},
ambil informasi pengguna dari tabel DynamoDB Users dan kembalikan.
Implementasikan fungsi Lambda dalam TypeScript.
- Runtime: Node.js 20
- Nama tabel: UsersTable (diterima melalui variabel lingkungan)
- Penanganan error: kembalikan respons 404/500 yang sesuai
- Definisi tipe: gunakan @types/aws-lambda
- Output ke: src/functions/getUser/index.ts
"
Implementasi yang Dihasilkan
// src/functions/getUser/index.ts
import {
APIGatewayProxyHandler,
APIGatewayProxyResult,
} from "aws-lambda";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, GetCommand } from "@aws-sdk/lib-dynamodb";
const client = new DynamoDBClient({ region: process.env.AWS_REGION });
const ddb = DynamoDBDocumentClient.from(client);
const response = (statusCode: number, body: unknown): APIGatewayProxyResult => ({
statusCode,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
body: JSON.stringify(body),
});
export const handler: APIGatewayProxyHandler = async (event) => {
const userId = event.pathParameters?.userId;
if (!userId) {
return response(400, { error: "userId is required" });
}
try {
const result = await ddb.send(
new GetCommand({
TableName: process.env.USERS_TABLE!,
Key: { userId },
})
);
if (!result.Item) {
return response(404, { error: `User '${userId}' not found` });
}
return response(200, result.Item);
} catch (err) {
console.error("DynamoDB error:", err);
return response(500, { error: "Internal server error" });
}
};
Template SAM Juga Dibuat Secara Otomatis
# template.yaml (kutipan)
GetUserFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/functions/getUser/index.handler
Runtime: nodejs20.x
Timeout: 10
Environment:
Variables:
USERS_TABLE: !Ref UsersTable
Policies:
- DynamoDBReadPolicy:
TableName: !Ref UsersTable
Events:
GetUserApi:
Type: Api
Properties:
Path: /users/{userId}
Method: GET
UsersTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Sub "${AWS::StackName}-users"
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
Contoh 2: Lambda dengan Trigger Event S3
Lambda yang dipicu oleh unggahan file untuk menjalankan pemrosesan.
// src/functions/generateThumbnail/index.ts
import { S3Handler } from "aws-lambda";
import { S3Client, GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
import sharp from "sharp";
const s3 = new S3Client({ region: process.env.AWS_REGION });
export const handler: S3Handler = async (event) => {
const record = event.Records[0];
const bucket = record.s3.bucket.name;
const key = decodeURIComponent(record.s3.object.key.replace(/\+/g, " "));
// Abaikan prefiks thumbnails/ (cegah infinite loop)
if (key.startsWith("thumbnails/")) return;
const { Body } = await s3.send(new GetObjectCommand({ Bucket: bucket, Key: key }));
const buffer = Buffer.from(await Body!.transformToByteArray());
const thumbnail = await sharp(buffer)
.resize(200, 200, { fit: "cover" })
.webp({ quality: 85 })
.toBuffer();
const thumbnailKey = `thumbnails/${key.replace(/\.[^.]+$/, ".webp")}`;
await s3.send(
new PutObjectCommand({
Bucket: bucket,
Key: thumbnailKey,
Body: thumbnail,
ContentType: "image/webp",
})
);
console.log(`Thumbnail dibuat: s3://${bucket}/${thumbnailKey}`);
};
Contoh 3: Lambda Terjadwal (EventBridge)
# Konfigurasi EventBridge di template.yaml
SendReminderFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/functions/sendReminder/index.handler
Runtime: nodejs20.x
Timeout: 300
Environment:
Variables:
DATABASE_URL: !Sub "{{resolve:secretsmanager:${AWS::StackName}/database-url}}"
RESEND_API_KEY: !Sub "{{resolve:secretsmanager:${AWS::StackName}/resend-api-key}}"
Events:
DailyReminder:
Type: Schedule
Properties:
Schedule: cron(0 0 * * ? *) # UTC 0:00 = WIB 7:00 / WITA 8:00 / WIT 9:00
Minta Claude Code Merancang Kebijakan IAM
claude -p "
Hasilkan kebijakan IAM hak istimewa minimum dalam JSON untuk Lambda yang membutuhkan:
- GetObject dari bucket S3 my-uploads
- PutItem/UpdateItem pada tabel DynamoDB ProcessingJobs
- SendMessage ke antrian SQS ProcessingQueue
- Menulis ke CloudWatch Logs
Simpulkan ARN spesifik dari nama sumber daya yang diberikan.
"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::my-uploads/*"
},
{
"Effect": "Allow",
"Action": ["dynamodb:PutItem", "dynamodb:UpdateItem"],
"Resource": "arn:aws:dynamodb:ap-southeast-1:*:table/ProcessingJobs"
},
{
"Effect": "Allow",
"Action": ["sqs:SendMessage"],
"Resource": "arn:aws:sqs:ap-southeast-1:*:ProcessingQueue"
},
{
"Effect": "Allow",
"Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
"Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/*"
}
]
}
Pengujian Lokal dan Deployment ke Produksi
# Build
sam build
# Jalankan API secara lokal
sam local start-api --port 3001
# Invokasi pengujian tunggal
sam local invoke GetUserFunction --event events/get-user.json
# Jalankan semuanya dengan Claude Code
claude -p "
Jalankan sam build,
periksa hasil dengan sam local invoke GetUserFunction --event events/test-get-user.json.
Jika semua baik, jalankan sam deploy --config-env dev.
"
5 Jebakan Paling Umum
1. Inisialisasi yang mengabaikan cold start
// ❌ Membuat klien di dalam handler setiap kali dipanggil
export const handler = async () => {
const ddb = new DynamoDBClient({}); // ← diinstansiasi setiap invokasi
};
// ✅ Inisialisasi sekali di lingkup modul
const ddb = DynamoDBDocumentClient.from(new DynamoDBClient({}));
export const handler = async () => { /* gunakan ulang ddb */ };
2. Membiarkan timeout pada nilai default (3 detik) Untuk DynamoDB + API eksternal, atur minimal 10-30 detik. Selalu konfigurasi sesuai kebutuhan pemrosesan aktual.
3. Menulis rahasia langsung di variabel lingkungan
# ❌ Hard-coded di template
Environment:
Variables:
DB_PASSWORD: "my-secret"
# ✅ Melalui Secrets Manager
Environment:
Variables:
DB_PASSWORD: !Sub "{{resolve:secretsmanager:myapp/db-password}}"
4. Keterlambatan cold start dengan Lambda di VPC Menempatkan Lambda di dalam VPC untuk konektivitas RDS menambah beberapa detik pada cold start. Atasi dengan Provisioned Concurrency atau RDS Proxy.
5. Paket deployment yang terlalu besar
Mengemas node_modules bersama dapat mencapai batas 250 MB. Pindahkan library bersama ke Lambda Layer.
Ringkasan
| Tugas | Kontribusi Claude Code |
|---|---|
| Implementasi handler | Hasilkan definisi tipe, penanganan error, dan logika sekaligus |
| Template SAM | Output otomatis event, IAM, dan variabel lingkungan |
| Kebijakan IAM | Hasilkan desain hak istimewa minimum dengan akurat |
| Pengujian lokal | Otomatiskan eksekusi sam invoke dan evaluasi hasil |
| Deployment | Jalankan build + deploy sebagai alur kerja terpadu |
Claude Code mengambil alih bagian paling memakan waktu dalam pengembangan Lambda — definisi tipe dan penulisan template. Fokus pada logika bisnis dapat meningkatkan kecepatan implementasi 3-5 kali lipat.
Artikel Terkait
- Claude Code × AWS S3 Otomatisasi Operasi
- Claude Code × AWS DynamoDB Desain Skema
- Panduan Lengkap Praktik Terbaik Keamanan Claude Code
Referensi
Tingkatkan alur kerja Claude Code kamu
50 template prompt yang sudah teruji, siap copy-paste ke Claude Code sekarang juga.
PDF Gratis: Cheatsheet Claude Code dalam 5 Menit
Cukup masukkan emailmu dan kami akan langsung mengirim cheatsheet PDF A4 satu halaman.
Kami menjaga data pribadimu dengan aman dan tidak pernah mengirim spam.
Tentang Penulis
Masa
Engineer yang aktif menggunakan Claude Code. Mengelola claudecode-lab.com, media teknologi 10 bahasa dengan lebih dari 2.000 halaman.
Artikel Terkait
Cara Memangkas Waktu Onboarding Engineer Baru dengan Claude Code
Ubah ramp-up 3 bulan menjadi 2 minggu. Jadikan Claude Code copilot untuk codebase, environment, dan PR pertama.
Cara Memvisualisasikan dan Mengurangi Tech Debt Secara Sistematis dengan Claude Code
Tech debt yang tidak dilunasi menguras velocity engineering. Pelajari cara memunculkan, memprioritaskan, dan melunasinya secara bertahap dengan Claude Code.
Cara Setup Environment Development Instan dengan Claude Code
PC baru atau proyek baru, Claude Code menangani setup dev environment dalam hitungan menit.