Claude Code × Amazon Bedrock Panduan Lengkap | Menjalankan Claude di Produksi dengan AWS
Panduan lengkap menggunakan Amazon Bedrock dengan Claude Code. Dari autentikasi IAM, streaming, integrasi Lambda, implementasi RAG, hingga optimasi biaya — berdasarkan pengalaman produksi nyata Masa.
“Saya ingin menggunakan Claude API di produksi, tapi khawatir dengan pengelolaan API key” atau “Kebijakan keamanan internal tidak mengizinkan data keluar dari AWS” — untuk masalah ini, Amazon Bedrock adalah jawabannya.
Ketika saya mengintegrasikan AI ke server API di ECS untuk pekerjaan, awalnya saya menggunakan Anthropic API secara langsung. Namun, audit keamanan menandai “pengelolaan API key untuk layanan eksternal” sebagai masalah. Setelah beralih ke Bedrock, autentikasi selesai hanya dengan IAM role dan saya terbebas dari pengelolaan API key. Artikel ini menjelaskan segalanya, mulai dari implementasi Bedrock dengan Claude Code hingga operasi produksi.
Apa itu Amazon Bedrock?
Amazon Bedrock adalah layanan model AI terkelola dari AWS. Anda dapat memanggil berbagai model — Claude (Anthropic), Llama (Meta), Titan (Amazon) — melalui API terpadu.
Mengapa Menggunakan Bedrock?
| Aspek | Anthropic API | Amazon Bedrock |
|---|---|---|
| Autentikasi | API key | AWS IAM role |
| Penagihan | Langsung ke Anthropic | Terintegrasi dalam penagihan AWS |
| Dukungan VPC | Tidak ada | Sepenuhnya privat dengan PrivateLink |
| Retensi data | Kebijakan Anthropic | Kebijakan AWS |
| Kepatuhan | SOC2, dll. | SOC2 / ISO27001 / HIPAA, dll. |
Anthropic API memang praktis untuk proyek pribadi, namun untuk kasus penggunaan enterprise, keuangan, dan kesehatan, Bedrock semakin menjadi satu-satunya pilihan.
Langkah 1: Pengaturan Awal
Meminta Akses Model
Pertama, minta akses ke model Claude di konsol AWS.
# Periksa daftar model yang tersedia
aws bedrock list-foundation-models \
--by-provider anthropic \
--region us-east-1 \
--query 'modelSummaries[].{id:modelId, name:modelName}'
# Contoh output
[
{"id": "anthropic.claude-opus-4-5", "name": "Claude Opus 4.5"},
{"id": "anthropic.claude-sonnet-4-6", "name": "Claude Sonnet 4.6"},
{"id": "anthropic.claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5"}
]
Penting: Region utama yang tersedia adalah us-east-1 (Virginia) dan us-west-2 (Oregon). Region Tokyo dapat digunakan melalui Cross-region inference.
Instalasi SDK
npm install @anthropic-ai/sdk @aws-sdk/client-bedrock-runtime
Langkah 2: Implementasi Dasar
Menggunakan Dukungan Bedrock Bawaan SDK Anthropic (Direkomendasikan)
SDK Anthropic resmi memiliki dukungan Bedrock bawaan. Karena sintaksisnya hampir identik dengan Anthropic API biasa, biaya migrasi dari kode yang sudah ada sangat minimal.
// src/lib/bedrock-client.ts
import Anthropic from "@anthropic-ai/sdk";
// Tidak perlu credentials jika IAM role digunakan (mis. Lambda/ECS)
const bedrock = new Anthropic.AnthropicBedrock({
awsRegion: process.env.AWS_REGION ?? "us-east-1",
// Saat pengembangan lokal, profil AWS CLI digunakan secara otomatis
});
export async function generateText(
prompt: string,
options: { model?: string; maxTokens?: number } = {}
): Promise<string> {
const { model = "anthropic.claude-sonnet-4-6", maxTokens = 1024 } = options;
const response = await bedrock.messages.create({
model,
max_tokens: maxTokens,
messages: [{ role: "user", content: prompt }],
});
return response.content[0].type === "text" ? response.content[0].text : "";
}
ID model Bedrock berbeda dari Anthropic API:
Anthropic API: claude-sonnet-4-6
Bedrock: anthropic.claude-sonnet-4-6 (ditambahkan prefix)
Dukungan Streaming
Streaming sangat penting untuk respons panjang.
// src/lib/bedrock-stream.ts
export async function* streamText(
prompt: string,
model = "anthropic.claude-sonnet-4-6"
): AsyncGenerator<string> {
const stream = await bedrock.messages.stream({
model,
max_tokens: 4096,
messages: [{ role: "user", content: prompt }],
});
for await (const chunk of stream) {
if (
chunk.type === "content_block_delta" &&
chunk.delta.type === "text_delta"
) {
yield chunk.delta.text;
}
}
}
// Contoh penggunaan (Next.js App Router)
export async function POST(req: Request) {
const { prompt } = await req.json();
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
for await (const text of streamText(prompt)) {
controller.enqueue(encoder.encode(text));
}
controller.close();
},
});
return new Response(stream, {
headers: { "Content-Type": "text/event-stream" },
});
}
Langkah 3: Pola Lambda + Bedrock
Arsitektur paling umum untuk menyediakan fitur AI tanpa server.
claude -p "
Implementasikan fungsi Lambda berikut di src/lambda/ai-handler.ts:
- Terima prompt dan maxTokens dari event
- Panggil Bedrock (claude-sonnet-4-6) dan kembalikan hasilnya
- Tangani error: ThrottlingException (retry) dan ValidationException (400)
- Catat waktu eksekusi
- Inisialisasi klien di luar handler (optimasi cold start)
"
// src/lambda/ai-handler.ts
import { Handler, APIGatewayProxyEvent, APIGatewayProxyResult } from "aws-lambda";
import Anthropic from "@anthropic-ai/sdk";
// Inisialisasi di scope modul (di-cache saat container digunakan ulang)
const bedrock = new Anthropic.AnthropicBedrock({
awsRegion: process.env.AWS_REGION,
});
export const handler: Handler<APIGatewayProxyEvent, APIGatewayProxyResult> = async (event) => {
const startTime = Date.now();
try {
const { prompt, maxTokens = 512 } = JSON.parse(event.body ?? "{}");
if (!prompt) {
return { statusCode: 400, body: JSON.stringify({ error: "prompt is required" }) };
}
const response = await bedrock.messages.create({
model: "anthropic.claude-sonnet-4-6",
max_tokens: maxTokens,
messages: [{ role: "user", content: prompt }],
});
const duration = Date.now() - startTime;
console.log(JSON.stringify({
level: "INFO",
duration_ms: duration,
input_tokens: response.usage.input_tokens,
output_tokens: response.usage.output_tokens,
}));
return {
statusCode: 200,
body: JSON.stringify({
text: response.content[0].type === "text" ? response.content[0].text : "",
usage: response.usage,
}),
};
} catch (error: any) {
if (error.name === "ThrottlingException") {
console.warn("Rate limited by Bedrock, client should retry");
return { statusCode: 429, body: JSON.stringify({ error: "Rate limited, please retry" }) };
}
console.error("Bedrock error:", error);
return { statusCode: 500, body: JSON.stringify({ error: "AI generation failed" }) };
}
};
Kebijakan IAM Lambda
// Konfigurasi IAM dengan CDK
import * as iam from "aws-cdk-lib/aws-iam";
lambdaFunction.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
],
resources: [
`arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-6`,
`arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-haiku-4-5-20251001`,
],
}));
Langkah 4: Implementasi RAG (Retrieval-Augmented Generation)
Pola di mana Claude membaca dokumen internal atau informasi produk untuk menjawab pertanyaan.
claude -p "
Implementasikan sistem RAG menggunakan Bedrock Knowledge Base.
Arsitektur:
- Simpan dokumen di S3
- Pengindeksan vektor dengan Bedrock Knowledge Base
- Ambil dokumen berdasarkan pertanyaan pengguna
- Buat jawaban dengan Claude Sonnet
Implementasikan dengan TypeScript + AWS SDK v3.
Dapatkan ID Knowledge Base dari variabel lingkungan KNOWLEDGE_BASE_ID.
"
// src/lib/rag.ts
import {
BedrockAgentRuntimeClient,
RetrieveAndGenerateCommand,
} from "@aws-sdk/client-bedrock-agent-runtime";
const agentClient = new BedrockAgentRuntimeClient({ region: "us-east-1" });
export async function ragQuery(question: string): Promise<{
answer: string;
citations: string[];
}> {
const response = await agentClient.send(
new RetrieveAndGenerateCommand({
input: { text: question },
retrieveAndGenerateConfiguration: {
type: "KNOWLEDGE_BASE",
knowledgeBaseConfiguration: {
knowledgeBaseId: process.env.KNOWLEDGE_BASE_ID!,
modelArn: `arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-6`,
retrievalConfiguration: {
vectorSearchConfiguration: { numberOfResults: 5 },
},
},
},
})
);
const answer = response.output?.text ?? "";
const citations = (response.citations ?? [])
.flatMap((c) => c.retrievedReferences ?? [])
.map((r) => r.location?.s3Location?.uri ?? "")
.filter(Boolean);
return { answer, citations };
}
Langkah 5: Optimasi Biaya
// Utilitas pemilihan model
type TaskType = "classify" | "extract" | "summarize" | "generate" | "complex";
const MODEL_MAP: Record<TaskType, string> = {
classify: "anthropic.claude-haiku-4-5-20251001", // $0,80/1M token input
extract: "anthropic.claude-haiku-4-5-20251001",
summarize: "anthropic.claude-sonnet-4-6", // $3,00/1M token input
generate: "anthropic.claude-sonnet-4-6",
complex: "anthropic.claude-opus-4-5", // $15,00/1M token input
};
export function selectModel(task: TaskType): string {
return MODEL_MAP[task];
}
Kurangi Biaya Input dengan Prompt Caching
// Prompt caching juga tersedia di Bedrock
const response = await bedrock.messages.create({
model: "anthropic.claude-sonnet-4-6",
max_tokens: 1024,
system: [
{
type: "text",
text: longSystemPrompt,
cache_control: { type: "ephemeral" }, // Cache selama 5 menit
},
],
messages: [{ role: "user", content: userQuery }],
});
5 Jebakan Umum
1. Region tidak didukung
Claude on Bedrock tidak tersedia di semua region. Per 2026, us-east-1 dan us-west-2 adalah region utama. Untuk menggunakannya dari Tokyo, aktifkan Cross-region inference.
// Gunakan ARN model untuk Cross-region inference
const crossRegionModelArn =
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-6";
2. Lupa meminta akses model
Di Bedrock, Anda harus meminta “Model access” untuk setiap model yang ingin digunakan. Memanggil model tanpa permintaan akses akan menghasilkan AccessDeniedException. Selalu minta akses sebelum mulai coding dengan Claude Code.
3. Timeout Lambda terlalu singkat
Respons Claude bisa memakan waktu 10–30 detik. Default Lambda 3 detik pasti akan timeout. Atur ke minimal 30 detik, dan 60–300 detik untuk generasi yang lebih panjang.
4. Mengacaukan ID model Bedrock dengan ID Anthropic API
❌ Menggunakan ID Anthropic API langsung: "claude-sonnet-4-6"
✅ ID Bedrock: "anthropic.claude-sonnet-4-6"
5. Tidak memperhitungkan latensi Cross-region inference
Memanggil model di us-east-1 dari Tokyo menambahkan latensi jaringan pulang-pergi sekitar 100–200 ms. Untuk aplikasi yang sensitif terhadap latensi, gunakan streaming untuk mengurangi keterlambatan yang dirasakan.
Ringkasan
| Tugas | Kontribusi Claude Code |
|---|---|
| Implementasi dasar | Menghasilkan klien AnthropicBedrock dan fungsi |
| Integrasi Lambda | Menghasilkan handler dan kebijakan IAM bersama |
| Implementasi RAG | Menghasilkan kode integrasi Knowledge Base secara otomatis |
| Optimasi biaya | Merancang logika pemilihan model berdasarkan jenis tugas |
| Pemecahan masalah | Mengidentifikasi penyebab dan menyarankan perbaikan dari log error |
Kembangkan dengan Claude Code, operasikan di produksi dengan Bedrock — kombinasi ini memenuhi semua persyaratan keamanan, biaya, dan skalabilitas. Mulailah dengan uji coba gratis Bedrock, dan saat siap untuk produksi, cukup konfigurasikan IAM role.
Artikel Terkait
- Panduan Lengkap Claude Code × AWS Lambda
- Panduan Lengkap Claude Code × AWS IAM
- Panduan Lengkap Mengurangi Biaya API Claude Code hingga 90%
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
Claude Code × AWS CodePipeline/CodeBuild Panduan Lengkap | Bangun Pipeline CI/CD Secara Otomatis
Bangun CI/CD secara otomatis dengan AWS CodePipeline & CodeBuild menggunakan Claude Code. Contoh kode nyata untuk desain pipeline, generasi buildspec.yml, otomatisasi pengujian, dan infrastruktur CDK.
Claude Code × AWS CloudWatch Panduan Lengkap | Analisis Log, Pengaturan Alarm & Otomatisasi Dashboard
Tingkatkan efisiensi AWS CloudWatch dengan Claude Code. Kode praktis untuk analisis pola log, konfigurasi alarm otomatis, dashboard metrik, dan investigasi insiden.
Claude Code × AWS ECS/Fargate Panduan Lengkap | Otomatisasi Deployment Container
Otomatisasi deployment AWS ECS/Fargate dengan Claude Code. Dari task definition, konfigurasi service, Blue/Green deployment, hingga infrastruktur CDK — berdasarkan pengalaman nyata Masa.