AWS untuk AI Engineer
Lanjutan dari Python untuk AI Engineer. Kamu sudah bisa membangun RAG chatbot di laptopmu; roadmap ini tentang menjalankannya untuk orang lain — dengan izin yang benar, biaya yang terkendali, pengaman yang aktif, dan bukti bahwa kualitasnya tidak diam-diam menurun.
Tiga fase pertama menutup gap infrastruktur yang sering dilewati AI engineer: IAM, serverless, IaC. Enam fase berikutnya masuk ke Bedrock secara mendalam. Semuanya dipetakan ke domain AWS Certified Generative AI Developer – Professional (AIP-C01) beserta bobotnya.
- Durasi
- ~12 minggu
- Beban
- ~8 jam/minggu
- Prasyarat
- Bisa Python, paham HTTP
- Target akhir
- Lulus AIP-C01
Prinsip: AWS itu luas, ujiannya tidak
AWS punya lebih dari dua ratus layanan. Yang relevan untuk peran GenAI developer jauh lebih sedikit, dan exam guide AIP-C01 menyebutkan sendiri apa yang di luar cakupan. Daftar yang dilewati sama pentingnya dengan daftar yang dipelajari:
Lewati — tidak diuji, dan jarang terpakai di peran ini
| Topik | Alasan |
|---|---|
| Melatih dan mengembangkan model dari nol | Disebut eksplisit sebagai di luar cakupan kandidat |
| Teknik ML lanjutan, tuning hyperparameter | Ranah ML engineer, bukan GenAI developer |
| Data engineering & feature engineering | Di luar profil kandidat sasaran |
| EC2 mendalam, Auto Scaling group, AMI | Beban kerja GenAI di roadmap ini serverless |
| Networking mendalam: subnet, route table, peering | Cukup paham VPC endpoint dan PrivateLink |
| Terraform | CDK yang muncul di exam guide; keduanya tidak perlu dikuasai sekaligus |
| Sertifikasi AWS lain sebagai prasyarat | Tidak ada prasyarat formal untuk AIP-C01 |
Bobot domain ujian — ini yang menentukan prioritas
| Domain | Bobot | Fase |
|---|---|---|
| 1 — Foundation Model Integration, Data Management, Compliance | 31% | 3, 4 |
| 2 — Implementation and Integration | 26% | 1, 2, 5 |
| 3 — AI Safety, Security, and Governance | 20% | 0, 6 |
| 4 — Operational Efficiency and Optimization | 12% | 7 |
| 5 — Testing, Validation, and Troubleshooting | 11% | 7 |
Domain 1 dan 2 menyumbang 57%. Kalau waktumu habis di tengah jalan, Fase 3, 4, dan 5 yang tidak boleh dilewati.
Fondasi AWS & IAM
Tujuan: punya akses AWS yang aman dari laptopmu, tanpa satu pun kredensial permanen tersimpan — dan pagar tagihan yang sudah terpasang sebelum resource pertama dibuat.
Perhatian: banyak tutorial AWS masih mengajarkan "buat IAM user, buat access key, tempel di
~/.aws/credentials". Jangan ikuti. Pola itu sudah ditinggalkan — mulai langsung dari
IAM Identity Center dengan kredensial berumur pendek.
Alur setup sekali jalan
# 1. Aktifkan IAM Identity Center di konsol, buat user + permission set PowerUserAccess
# 2. Sambungkan CLI
aws configure sso # isi portal URL, region, nama profil
# 3. Login harian
aws sso login --profile belajar
export AWS_PROFILE=belajar
# 4. Verifikasi — perintah diagnostik nomor satu
aws sts get-caller-identity
# 5. Lihat model yang tersedia
aws bedrock list-foundation-models --region us-east-1 \
--query 'modelSummaries[].modelId' --output table
Empat hal yang harus benar sejak hari pertama
| Hal | Kenapa |
|---|---|
| MFA di root, root tidak dipakai lagi | Root tidak bisa dibatasi policy apa pun |
| Tidak ada access key jangka panjang | Menghapus seluruh kelas masalah "key bocor" |
| Budget + alert forecast | Bedrock ditagih per token; loop yang kabur itu mahal |
Tag proyek di setiap resource | Laporan biaya per-proyek, dan filter anomali di Fase 7 |
Materi
-
Menyiapkan akun AWSResmiAkun, root user, dan kenapa hari pertama menentukan seberapa berantakan enam bulan berikutnya.docs.aws.amazon.comBaca rangkuman →
-
IAM Identity CenterResmiCara masuk ke AWS yang benar di 2026 — dan kenapa IAM user beserta access key-nya sudah bukan jawabannya.docs.aws.amazon.comBaca rangkuman →
-
IAM — Policy dan izinResmiAnatomi dokumen policy, cara AWS memutuskan izin, dan kenapa
Denyselalu menang.docs.aws.amazon.comBaca rangkuman → -
IAM RoleResmiIdentitas yang dipinjam, bukan dimiliki. Ini cara Lambda memanggil Bedrock tanpa satu pun password.docs.aws.amazon.comBaca rangkuman →
-
IAM — Security best practicesResmiDaftar praktik yang membedakan akun yang aman dari akun yang kebetulan belum dibobol.docs.aws.amazon.comBaca rangkuman →
-
AWS CLI dengan IAM Identity CenterResmi
aws configure ssosekali,aws sso logintiap hari. Tidak ada access key yang perlu disimpan.docs.aws.amazon.comBaca rangkuman → -
Boto3 — QuickstartResmiSDK AWS untuk Python: client, session, paginator, dan bentuk error yang perlu kamu tangkap.boto3.amazonaws.comBaca rangkuman →
-
Boto3 — CredentialsResmiUrutan tempat boto3 mencari kredensial — dan kenapa kode yang sama jalan di laptop tapi mati di Lambda.boto3.amazonaws.comBaca rangkuman →
-
AWS Budgets — alert tagihanResmiPasang pagar tagihan sebelum memanggil API pertama. Bedrock ditagih per token, dan token gampang sekali membengkak.docs.aws.amazon.comBaca rangkuman →
Kamu bisa login lewat SSO, menjalankan skrip Python yang memanggil AWS tanpa satu pun rahasia di disk,
dan menjelaskan kenapa AccessDenied tertentu disebabkan Deny, bukan kurang Allow.
Serverless & Integrasi
Tujuan: bisa menjalankan kode Python-mu di AWS sebagai respons atas permintaan HTTP, pesan antrean, atau jadwal — dan tahu kapan masing-masing dipakai.
Ini fondasi Domain 2 (26%). Semua yang kamu bangun di fase berikutnya berjalan di atas potongan-potongan ini: knowledge base disinkronkan oleh EventBridge, ingest besar dipecah lewat SQS, alur agent diorkestrasi Step Functions, dan chatbot-mu dilayani Lambda di balik API Gateway.
Memilih komponen
| Kebutuhan | Pakai | Batas yang mengikat |
|---|---|---|
| Jalankan kode atas suatu event | Lambda | 15 menit, payload 6 MB |
| Endpoint HTTP publik | API Gateway HTTP API | Timeout integrasi 30 detik |
| Kerjakan nanti, serap lonjakan | SQS | Visibility timeout harus > durasi consumer |
| Beri tahu banyak pendengar | EventBridge | Pengiriman asinkron, bisa berulang |
| Alur berlangkah dengan retry | Step Functions | Standard sampai 1 tahun |
| Jadwal berkala | EventBridge Scheduler | — |
Handler yang layak dicontoh
import json, os, logging
import boto3
# Init — sekali per lingkungan eksekusi, bukan per permintaan
logger = logging.getLogger()
logger.setLevel(os.environ.get("LOG_LEVEL", "INFO"))
bedrock = boto3.client("bedrock-runtime")
MODEL_ID = os.environ["MODEL_ID"]
def handler(event, context):
body = json.loads(event.get("body") or "{}") # API Gateway: body itu STRING
pertanyaan = body.get("pertanyaan", "")
if not pertanyaan:
return {"statusCode": 400,
"body": json.dumps({"error": "pertanyaan kosong"})}
resp = bedrock.converse(
modelId=MODEL_ID,
messages=[{"role": "user", "content": [{"text": pertanyaan}]}],
inferenceConfig={"maxTokens": 512},
)
logger.info(json.dumps({
"request_id": context.aws_request_id,
"token_masuk": resp["usage"]["inputTokens"],
"token_keluar": resp["usage"]["outputTokens"],
}))
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(
{"jawaban": resp["output"]["message"]["content"][0]["text"]},
ensure_ascii=False,
),
}
Idempotensi bukan opsional di sini. SQS dan EventBridge mengirim ulang saat gagal, dan pada
antrean Standard pesan bisa datang dua kali walau tidak ada yang gagal. Handler yang memanggil Bedrock lalu
menulis ke database akan membayar token dua kali dan menyimpan data dobel. Turunkan kunci idempotensi dari
messageId, dan cek sebelum bekerja.
Materi
-
AWS Lambda — konsep dasarResmiModel eksekusi Lambda: event, cold start, concurrency, dan batas-batas yang menentukan arsitekturmu.docs.aws.amazon.comBaca rangkuman →
-
Lambda — handler PythonResmiBentuk handler, isi objek
eventdancontext, serta pola kode yang membuat fungsimu cepat.docs.aws.amazon.comBaca rangkuman → -
Lambda — response streamingResmiMengirim jawaban sepotong demi sepotong. Baca sebelum merancang chatbot — ada jebakan besar untuk Python.docs.aws.amazon.comBaca rangkuman →
-
Lambda — container imageResmiSaat dependensimu tidak muat di zip 250 MB — kemas fungsi sebagai image sampai 10 GB.docs.aws.amazon.comBaca rangkuman →
-
API Gateway — HTTP APIResmiPintu masuk HTTP ke Lambda-mu: route, integrasi, CORS, dan authorizer JWT.docs.aws.amazon.comBaca rangkuman →
-
Amazon SQSResmiAntrean pesan untuk memisahkan permintaan dari pekerjaan berat — dan menyerap throttle Bedrock.docs.aws.amazon.comBaca rangkuman →
-
Amazon EventBridgeResmiBus event untuk menyambungkan komponen tanpa saling mengenal — plus penjadwalan cron tanpa server.docs.aws.amazon.comBaca rangkuman →
-
AWS Step FunctionsResmiOrkestrasi alur berkondisi, retry, dan paralel — fondasi pola agentik yang diuji di AIP-C01.docs.aws.amazon.comBaca rangkuman →
Kamu punya endpoint HTTP yang memanggil Bedrock, sebuah antrean berisi DLQ yang memproses pekerjaan latar, dan satu state machine yang mengarahkan pertanyaan ke model berbeda berdasarkan panjangnya.
IaC & CI/CD
Tujuan: semua yang kamu buat manual di Fase 1 berpindah ke kode, ter-review, dan bisa di-deploy ulang dari nol — termasuk gerbang kualitas sebelum rilis.
Alasannya bukan kerapian. Aplikasi GenAI punya banyak resource yang saling terkait — knowledge base, vector store, role, guardrail, alarm — dan mengurusnya lewat konsol berarti tidak ada seorang pun yang tahu keadaan sebenarnya setelah dua minggu.
Stack minimal dengan CDK
from aws_cdk import Duration, Stack, aws_lambda as lambda_, aws_iam as iam
from constructs import Construct
class TanyaBedrockStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
fn = lambda_.Function(
self, "FungsiTanya",
runtime=lambda_.Runtime.PYTHON_3_13,
handler="app.handler",
code=lambda_.Code.from_asset("../src"),
timeout=Duration.seconds(60),
memory_size=1024,
tracing=lambda_.Tracing.ACTIVE, # X-Ray, dipakai di Fase 7
environment={"MODEL_ID": MODEL_ID},
)
fn.add_to_role_policy(iam.PolicyStatement(
actions=["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"],
resources=[f"arn:aws:bedrock:{self.region}::foundation-model/{MODEL_ID}"],
))
Pipeline untuk aplikasi LLM
| Stage | Isi | Gerbang gagal |
|---|---|---|
| Build | ruff, mypy | Lint atau type check merah |
| Test | pytest, Bedrock di-mock | Tes gagal |
| Eval | Dataset pertanyaan emas → model | Skor turun dari baseline |
| Deploy staging | cdk deploy ke akun dev | Rollback CloudFormation |
| Approve | Persetujuan manual | Ditolak |
| Deploy prod | cdk deploy ke akun prod | — |
Stage Eval adalah yang membedakan pipeline aplikasi LLM. Mengubah satu kalimat di prompt tidak membuat satu pun tes unit gagal, tapi bisa menjatuhkan kualitas jawaban. Isi teknisnya dibangun di Fase 7 — kerangkanya dipasang sekarang.
Materi
-
AWS CloudFormationResmiMesin infrastruktur-sebagai-kode di AWS. Kamu jarang menulisnya langsung, tapi wajib paham cara kerjanya.docs.aws.amazon.comBaca rangkuman →
-
AWS CDK — memulaiResmiMenulis infrastruktur sebagai Python biasa: variabel, fungsi, tes. Ini cara paling nyaman ber-IaC di AWS.docs.aws.amazon.comBaca rangkuman →
-
CDK — construct L1, L2, L3ResmiTiga tingkat abstraksi CDK, dan cara turun ke lapisan bawah saat yang di atas belum mendukung fitur baru.docs.aws.amazon.comBaca rangkuman →
-
CDK — bootstrappingResmiKenapa
cdk deploypertama gagal sebelum kamu menjalankancdk bootstrap.docs.aws.amazon.comBaca rangkuman → -
AWS CodePipelineResmiMerangkai sumber → build → uji → deploy jadi satu alur yang berjalan sendiri tiap commit.docs.aws.amazon.comBaca rangkuman →
-
AWS CodeBuildResmiMesin yang menjalankan perintah build-mu — dan tempat menaruh langkah evaluasi model.docs.aws.amazon.comBaca rangkuman →
Seluruh infrastruktur Fase 1 hidup sebagai satu stack CDK, ter-deploy lewat pipeline yang berjalan
otomatis dari git push, dan kamu bisa membaca keluaran cdk diff untuk mengenali
resource mana yang akan diganti, bukan diperbarui.
Bedrock Dasar
Tujuan: memanggil foundation model dari kode dengan benar — termasuk streaming, pencatatan biaya, penanganan throttle, dan pemilihan strategi perutean.
Converse: satu bentuk untuk semua model
resp = runtime.converse(
modelId=MODEL_ID,
system=[{"text": "Jawab ringkas dan berbahasa Indonesia."}],
messages=[{"role": "user", "content": [{"text": pertanyaan}]}],
inferenceConfig={"maxTokens": 512, "temperature": 0.2},
)
jawaban = resp["output"]["message"]["content"][0]["text"]
pakai = resp["usage"] # inputTokens, outputTokens — CATAT SEJAK HARI PERTAMA
if resp["stopReason"] == "max_tokens":
... # jawaban TERPOTONG, jangan disimpan sebagai final
Tiga jebakan yang hampir semua orang temui di fase ini:
(1) akses model harus diaktifkan per akun per region — ini terpisah dari IAM;
(2) converse ada di client bedrock-runtime, bukan bedrock;
(3) system prompt punya field sendiri, bukan pesan ber-role system.
Empat tombol yang menentukan biaya dan latensi
| Tombol | Efek | Kapan |
|---|---|---|
maxTokens | Batas token keluaran — yang paling mahal | Selalu |
| Pilihan model | Sering perbedaan terbesar | Tugas sederhana → model kecil |
| Prompt caching | Prefiks panjang tidak dihitung ulang | Dokumen atau instruksi yang berulang |
| Inference profile | Ketersediaan naik; global ~10% lebih murah | Sering kena throttle |
Materi
-
Amazon Bedrock — pengantarResmiSatu API untuk banyak foundation model, plus fitur di sekitarnya: knowledge base, agent, guardrail, evaluasi.docs.aws.amazon.comBaca rangkuman →
-
Bedrock — akses modelResmiKenapa panggilan pertamamu ditolak walaupun IAM sudah benar — dan bagaimana memperbaikinya.docs.aws.amazon.comBaca rangkuman →
-
Converse APIResmiAPI percakapan yang seragam untuk semua model Bedrock. Tulis sekali, ganti model tanpa menyentuh kode.docs.aws.amazon.comBaca rangkuman →
-
ConverseStream — respons streamingResmiMenerima jawaban token demi token, dan bentuk event yang harus kamu tangani.docs.aws.amazon.comBaca rangkuman →
-
Parameter inferensiResmiTemperature, top-p, top-k, maxTokens — apa yang benar-benar mereka ubah, dan nilai mana untuk kasus mana.docs.aws.amazon.comBaca rangkuman →
-
Cross-Region inferenceResmiInference profile yang merutekan permintaan lintas region — menaikkan ketersediaan, dengan konsekuensi kepatuhan.docs.aws.amazon.comBaca rangkuman →
-
Prompt cachingResmiMenandai bagian prompt yang berulang supaya tidak dihitung ulang — hemat biaya dan latensi sekaligus.docs.aws.amazon.comBaca rangkuman →
-
Provisioned ThroughputResmiMembeli kapasitas tetap per jam. Wajib untuk model kustom, dan pilihan mahal kalau salah pakai.docs.aws.amazon.comBaca rangkuman →
Kamu bisa mengalirkan jawaban model token demi token ke terminal, mencatat token masuk dan keluar setiap permintaan, dan menjelaskan kapan inference profile geografis wajib dipakai alih-alih yang global.
RAG & Knowledge Bases
Tujuan: menjawab pertanyaan berdasarkan dokumenmu sendiri, dengan sitasi yang benar — dan tahu tombol mana yang diputar saat jawabannya salah.
Fase terberat sekaligus paling berbobot. Di learn-python kamu membangun RAG manual dengan
ChromaDB; di sini setiap komponennya punya padanan terkelola, dan yang perlu dipelajari adalah
keputusan-keputusannya, bukan kodenya.
Peta keputusan
| Keputusan | Pilihan | Dampak |
|---|---|---|
| Jenis knowledge base | Managed vs customer-managed | Kendali vs beban operasional |
| Chunking | Default, fixed, hierarchical, semantic | Terbesar — dan mengubahnya berarti ingest ulang |
| Model embedding & dimensi | Titan V2: 1.024 / 512 / 256 | Kualitas vs biaya; tidak bisa diganti tanpa ingest ulang |
| Vector store | OpenSearch, Aurora, Neptune, S3 vector | Biaya, filter, hybrid search |
| Jenis pencarian | Semantic vs hybrid | Hybrid menolong untuk kode produk dan singkatan |
| Reranker | Ya / tidak | Ambil 25, kirim 5 — sering menurunkan total biaya |
Retrieve, lalu susun sendiri
agen = boto3.client("bedrock-agent-runtime")
hasil = agen.retrieve(
knowledgeBaseId=KB_ID,
retrievalQuery={"text": pertanyaan},
retrievalConfiguration={"vectorSearchConfiguration": {
"numberOfResults": 10,
"overrideSearchType": "HYBRID",
"filter": {"equals": {"key": "departemen", "value": departemen_pengguna}},
}},
)
for p in hasil["retrievalResults"]:
print(round(p["score"], 3), p["content"]["text"][:80], "←", p["location"])
Filter metadata harus datang dari identitas, bukan dari permintaan. Kalau nilai
departemen diambil dari body yang dikirim klien, pengguna bisa mengubahnya dan membaca dokumen
tim lain. Ambil dari klaim token yang sudah diverifikasi authorizer.
Urutan menyetel saat jawaban salah
- Chunking — dampak terbesar, tapi butuh ingest ulang
- Filter metadata — murah dan langsung terasa
- Hybrid search — satu setelan
- Jumlah potongan — coba 5, 10, 20 lalu ukur
- Reranker — kalau jawaban benar sering ada di peringkat 6–15
- Prompt generasi — untuk nada dan pengendalian halusinasi
Materi
-
Bedrock Knowledge BasesResmiRAG terkelola: dari dokumen di S3 sampai jawaban bersitasi, tanpa menulis pipeline ingest sendiri.docs.aws.amazon.comBaca rangkuman →
-
Memilih vector storeResmiOpenSearch Serverless, Aurora, Neptune, atau S3 vector — apa bedanya dan kapan masing-masing masuk akal.docs.aws.amazon.comBaca rangkuman →
-
Strategi chunkingResmiFixed, default, hierarchical, semantic — pilihan yang paling menentukan kualitas RAG-mu.docs.aws.amazon.comBaca rangkuman →
-
Amazon Titan Text EmbeddingsResmiModel embedding bawaan AWS: batas masukan, pilihan dimensi, dan kuota yang dihitung per permintaan.docs.aws.amazon.comBaca rangkuman →
-
Menyetel retrievalResmiJumlah potongan, filter metadata, hybrid search, dan prompt generasi — tombol-tombol yang memperbaiki jawaban.docs.aws.amazon.comBaca rangkuman →
-
RerankerResmiAmbil banyak, urutkan ulang, kirim sedikit. Menaikkan relevansi sekaligus menurunkan biaya token.docs.aws.amazon.comBaca rangkuman →
-
OpenSearch Serverless — vector searchResmiVector store paling umum untuk knowledge base, dan satu-satunya yang mendukung vektor biner.docs.aws.amazon.comBaca rangkuman →
-
Aurora PostgreSQL + pgvectorResmiVektor dan data relasional di satu database, dicari dengan SQL biasa.docs.aws.amazon.comBaca rangkuman →
Knowledge base-mu menjawab sepuluh pertanyaan nyata dengan sitasi yang benar, filter metadata mencegah kebocoran antar departemen, dan kamu punya angka yang membandingkan dua strategi chunking — bukan sekadar kesan.
Agent, Tool Use & MCP
Tujuan: model bisa memanggil fungsimu, dengan batas yang jelas — dan kamu tahu kapan agent bukan jawabannya.
Loop yang harus kamu pahami dulu
pesan = [{"role": "user", "content": [{"text": pertanyaan}]}]
for _ in range(MAKS_GILIRAN): # batas langkah — WAJIB ada
resp = runtime.converse(modelId=MODEL_ID, messages=pesan, toolConfig=TOOLS)
pesan.append(resp["output"]["message"]) # simpan jawaban model apa adanya
if resp["stopReason"] != "tool_use":
break
hasil = []
for blok in resp["output"]["message"]["content"]:
if "toolUse" in blok:
minta = blok["toolUse"]
nilai = FUNGSI[minta["name"]](**minta["input"])
hasil.append({"toolResult": {
"toolUseId": minta["toolUseId"], # harus persis
"content": [{"json": nilai}],
}})
pesan.append({"role": "user", "content": hasil}) # role user, bukan assistant
Memilih tingkat abstraksi
| Pendekatan | Kendali | Beban | Untuk |
|---|---|---|---|
| Loop tool use sendiri | Penuh | Semua kamu | Belajar, alur sederhana |
| Step Functions | Tinggi, deklaratif | Rendah | Alur dengan aturan tegas |
| Strands Agents | Tinggi | Rendah | Agent kustom dalam Python |
| AgentCore Harness | Sedang | Sangat rendah | Agent umum, cepat jadi |
| Bedrock Agents Classic | Rendah | Rendah | Tertutup untuk pelanggan baru |
Perubahan penting yang perlu kamu tahu: Bedrock Agents kini disebut Agents Classic dan tidak dibuka lagi untuk pelanggan baru. Untuk kemampuan serupa, AWS mengarahkan ke Amazon Bedrock AgentCore. Konsep Classic tetap dipelajari karena istilahnya masih muncul, tapi yang kamu bangun sebaiknya di atas AgentCore atau framework seperti Strands.
Pengaman yang tidak boleh dilewati
- Batas jumlah giliran — tanpa ini, satu bug bisa berputar sampai timeout
- Timeout per tool — satu tool menggantung tidak boleh menahan semuanya
- IAM sempit untuk tiap tool — tool bukan pintu ke seluruh akun
- Validasi argumen — skema JSON itu petunjuk untuk model, bukan jaminan keamanan
- Persetujuan manusia untuk aksi yang mengubah keadaan — Step Functions task token
Materi
-
Tool use di BedrockResmiMemberi model kemampuan memanggil fungsimu. Ini mekanisme dasar di balik semua yang disebut "agent".docs.aws.amazon.comBaca rangkuman →
-
Amazon Bedrock AgentCoreResmiPlatform agentik AWS: runtime, memory, gateway, identity, observability — dipakai bersama framework apa pun.docs.aws.amazon.comBaca rangkuman →
-
AgentCore GatewayResmiSatu pintu masuk untuk seluruh lalu lintas agentik: API jadi tool MCP, plus autentikasi masuk dan keluar.docs.aws.amazon.comBaca rangkuman →
-
Model Context Protocol (MCP)ResmiProtokol terbuka yang menghubungkan model ke tool dan data. Disebut eksplisit di exam guide AIP-C01.modelcontextprotocol.ioBaca rangkuman →
-
Strands Agents SDKResmiSDK agent open source dari AWS. Satu dekorator mengubah fungsi Python jadi tool.strandsagents.comBaca rangkuman →
-
Bedrock Agents ClassicResmiAgent terkelola generasi sebelumnya — kini tertutup untuk pelanggan baru, tapi masih muncul di soal ujian.docs.aws.amazon.comBaca rangkuman →
-
Bedrock FlowsResmiMerangkai prompt, knowledge base, dan Lambda jadi alur visual — tanpa menulis orkestrasi.docs.aws.amazon.comBaca rangkuman →
Agent-mu memanggil knowledge base sebagai tool, berhenti setelah batas giliran, menangani error tool
tanpa jatuh, dan kamu bisa menjelaskan kenapa hasil tool dikirim dengan role user.
Safety, Security & Governance
Tujuan: aplikasimu punya pengaman yang aktif, data pribadi tidak bocor ke log maupun ke jawaban, dan setiap tindakan bisa ditelusuri.
Pertahanan berlapis
| Lapis | Alat | Bekerja saat |
|---|---|---|
| Data tersimpan | Macie | Berkala, atas isi S3 |
| Data yang lewat | Comprehend | Saat ingest dan sebelum logging |
| Saat inferensi | Bedrock Guardrails | Setiap prompt dan respons |
| Jaringan | VPC endpoint + aws:SourceVpce | Setiap panggilan API |
| Jejak | CloudTrail | Setiap panggilan API |
Guardrail yang layak dipasang
resp = runtime.converse(
modelId=MODEL_ID,
messages=pesan,
guardrailConfig={
"guardrailIdentifier": GUARDRAIL_ID,
"guardrailVersion": "3", # sebutkan versi — jangan DRAFT di produksi
"trace": "enabled",
},
)
if resp["stopReason"] == "guardrail_intervened":
return "Maaf, pertanyaan itu di luar cakupan saya."
| Pengaman | Menangkap |
|---|---|
| Content filters | Hate, Insults, Sexual, Violence, Misconduct, Prompt Attack |
| Denied topics | Topik yang kamu definisikan sendiri |
| Sensitive information | PII standar dan regex kustom — blokir atau samarkan |
| Contextual grounding | Jawaban yang tidak berpijak pada sumber (halusinasi RAG) |
| Automated reasoning | Pelanggaran aturan logis yang kamu tetapkan |
Ancaman yang khas aplikasi agentik: prompt injection lewat data. Dokumen yang dibaca agent bisa berisi instruksi jahat. Karena itu tool yang berdampak destruktif tidak boleh mengandalkan kebijaksanaan model — batasi di lapisan izin, dan kalau perlu minta persetujuan manusia.
Materi
-
Bedrock GuardrailsResmiPengaman yang bisa dikonfigurasi untuk input dan output — filter konten, topik terlarang, PII, dan cek halusinasi.docs.aws.amazon.comBaca rangkuman →
-
Menyusun guardrailResmiDetail tiap filter: kekuatan, tier, entitas PII, regex kustom, dan automated reasoning.docs.aws.amazon.comBaca rangkuman →
-
Amazon Comprehend — deteksi PIIResmiMendeteksi dan menyensor data pribadi sebelum teks masuk ke prompt atau ke log.docs.aws.amazon.comBaca rangkuman →
-
Amazon MacieResmiMenemukan data sensitif yang sudah telanjur ada di S3 — termasuk di bucket sumber knowledge base-mu.docs.aws.amazon.comBaca rangkuman →
-
Bedrock — perlindungan dataResmiModel tanggung jawab bersama, enkripsi, dan aturan sederhana yang sering dilanggar soal field bebas.docs.aws.amazon.comBaca rangkuman →
-
Bedrock lewat VPC & PrivateLinkResmiMemanggil Bedrock tanpa lalu lintas keluar ke internet — dan mengunci akses hanya lewat jalur itu.docs.aws.amazon.comBaca rangkuman →
-
CloudTrail untuk BedrockResmiSiapa memanggil apa, kapan, dari mana. Fondasi audit dan investigasi insiden.docs.aws.amazon.comBaca rangkuman →
-
SageMaker Model CardsResmiDokumentasi model yang terstruktur dan berversi — bahan wajib saat auditor bertanya.docs.aws.amazon.comBaca rangkuman →
Guardrail memblokir topik terlarang dan menyamarkan PII, log aplikasimu tidak memuat data pribadi, Bedrock hanya bisa dipanggil dari VPC-mu, dan ada alarm yang berbunyi kalau guardrail diubah.
Observability, Biaya & Evaluasi
Tujuan: kamu tahu berapa biaya per percakapan, di mana waktunya habis, dan apakah kualitas jawaban membaik atau memburuk — dengan angka.
Tiga lapis deteksi biaya
| Lapis | Alat | Kecepatan | Menangkap |
|---|---|---|---|
| 1 | Alarm CloudWatch atas OutputTokenCount | Menit | Loop kabur, penyalahgunaan |
| 2 | Cost Anomaly Detection | Beberapa jam | Pola pengeluaran menyimpang |
| 3 | AWS Budgets | Beberapa jam | Total bulanan lewat batas |
Hanya lapis pertama yang cukup cepat menghentikan kejadian yang sedang berlangsung — data biaya AWS selalu tertunda. Pertahanan tercepat selalu berbasis metrik operasional.
Menurunkan biaya, urut dari yang paling murah dicoba
- Model lebih kecil untuk tugas sederhana — sering perbedaan terbesar
- Prompt caching untuk prefiks yang berulang
- Batch inference untuk pekerjaan yang tidak buru-buru
maxTokenslebih ketat dan prompt yang dirapikan- Provisioned Throughput — hanya setelah hitungan menunjukkan titik impasnya terlewati
Evaluasi: memisahkan dua kegagalan
Pertanyaan ──▶ Retrieval ──▶ Potongan ──▶ Generasi ──▶ Jawaban
│ │
job retrieve-only job retrieve-and-generate
Tanpa memisahkan pengukuran, "potongan yang salah terambil" dan "jawaban buruk dari potongan yang benar" terlihat sama dari luar. Job retrieve only yang membedakannya — dan menentukan apakah kamu memperbaiki chunking atau memperbaiki prompt.
Perubahan prompt adalah perubahan produksi. Ia tidak membuat tes unit gagal, tidak memunculkan error, dan tidak terlihat di metrik operasional. Tanpa gerbang evaluasi di pipeline, satu-satunya alarmnya adalah keluhan pengguna beberapa minggu kemudian.
Materi
-
Metrik CloudWatch untuk BedrockResmiMetrik bawaan namespace
AWS/Bedrock: token, latensi, throttle. Fondasi alarm biaya dan kualitas.docs.aws.amazon.comBaca rangkuman → -
Model invocation loggingResmiMencatat isi prompt dan respons sesungguhnya. Sangat berguna, dan sangat sensitif.docs.aws.amazon.comBaca rangkuman →
-
CloudWatch Logs InsightsResmiBahasa kueri untuk log. Berhenti menggulir CloudWatch dan mulai bertanya.docs.aws.amazon.comBaca rangkuman →
-
AWS X-RayResmiDistributed tracing: melihat ke mana waktu sebuah permintaan sebenarnya habis.docs.aws.amazon.comBaca rangkuman →
-
Batch inferenceResmiMemproses ribuan prompt secara asinkron dengan tarif lebih murah — dengan batasan yang perlu diketahui.docs.aws.amazon.comBaca rangkuman →
-
Bedrock EvaluationsResmiMengukur kualitas model secara otomatis, dengan LLM-as-a-judge, atau dengan penilai manusia.docs.aws.amazon.comBaca rangkuman →
-
Evaluasi RAGResmiMengukur retrieval dan generasi secara terpisah — supaya kamu tahu bagian mana yang rusak.docs.aws.amazon.comBaca rangkuman →
-
AWS Cost Anomaly DetectionResmiMendeteksi lonjakan biaya yang tidak wajar tanpa kamu menebak ambang batasnya.docs.aws.amazon.comBaca rangkuman →
Ada dasbor yang menunjukkan token, p99 latensi, dan throttle; trace X-Ray menunjukkan berapa persen waktu habis di retrieval versus model; dan pipeline-mu menolak deploy kalau skor evaluasi turun dari baseline.
Capstone & Ujian AIP-C01
Tujuan: satu aplikasi utuh yang menggabungkan seluruh fase — dan kebetulan persis bentuk yang diuji di sertifikasi.
Teori tanpa proyek akan hilang dalam sebulan. Kerjakan satu ini sampai tuntas: asisten dokumen internal, berjalan di AWS, siap dipakai orang lain.
Requirement
- Ingest — dokumen di S3 → Knowledge Base, dipicu event S3 dan disinkronkan berkala lewat EventBridge Scheduler
- Retrieval —
Retrievedengan hybrid search, filter metadata dari identitas pengguna, dan reranker - Generasi — Converse dengan streaming, prompt yang memaksa menjawab hanya dari konteks
- Sitasi — setiap jawaban menyebut dokumen dan halaman sumbernya
- Tool — model bisa memanggil
cari_dokumen()sendiri, dengan batas giliran - API — API Gateway HTTP API + Lambda, dengan authorizer JWT dan throttling
- Guardrail — denied topics, filter PII bermode mask, contextual grounding aktif
- Jaringan — Lambda di VPC privat, Bedrock lewat interface endpoint, dikunci
aws:SourceVpce - IaC — semuanya satu stack CDK, ter-deploy lewat pipeline
- Observability — log terstruktur, X-Ray aktif, dasbor token dan latensi, alarm biaya
- Evaluasi — dataset 20 pertanyaan dengan ground truth, dijalankan sebagai gerbang di pipeline
- Dokumentasi — model card berisi maksud pemakaian, keterbatasan, dan skor evaluasi terakhir
Kenapa proyek ini: ia menyentuh keempat domain besar sekaligus — Domain 1 di ingest dan retrieval, Domain 2 di API dan tool, Domain 3 di guardrail dan jaringan, Domain 4 dan 5 di observability dan evaluasi. Kalau kamu bisa menjelaskan setiap keputusan di proyek ini, kamu siap ujian.
Bonus kalau masih semangat
- Multi-tenant — satu knowledge base, isolasi lewat filter metadata dari klaim token
- Human-in-the-loop — jawaban berisiko ditahan Step Functions sampai disetujui
- MCP — tool disajikan lewat server MCP di Lambda, dipakai lewat AgentCore Gateway
- Batch — klasifikasi topik pertanyaan historis dengan batch inference
- Well-Architected review — jalankan Generative AI Lens atas aplikasi ini
Materi
-
Exam guide AIP-C01ResmiLima domain, bobotnya, dan pemetaan ke fase-fase roadmap ini. Baca sebelum menjadwalkan ujian.docs.aws.amazon.comBaca rangkuman →
-
Well-Architected Generative AI LensResmiCara AWS menilai arsitektur GenAI. Logika yang sama dipakai soal "solusi mana yang paling tepat".docs.aws.amazon.comBaca rangkuman →
-
Amazon Bedrock SamplesResmiNotebook resmi AWS yang bisa langsung dijalankan: Converse, Knowledge Bases, agent, guardrail, evaluasi.aws-samples.github.ioBaca rangkuman →
-
Menjadwalkan ujian AIP-C01ResmiHalaman resmi sertifikasi: biaya, masa berlaku, cara mendaftar, dan sumber persiapan resmi.aws.amazon.comBaca rangkuman →
Aplikasi berjalan end-to-end di AWS, di-deploy dari pipeline, dan kamu bisa menjawab kedelapan pertanyaan kesiapan di materi terakhir tanpa membuka dokumentasi. Lalu — jadwalkan ujiannya.
Aturan main
- Bangun, jangan cuma baca. Soal ujian berupa skenario; skenario cuma masuk akal kalau kamu pernah mengalaminya.
- Hapus resource setelah berlatih. OpenSearch Serverless dan Provisioned Throughput ditagih per jam, dipakai atau tidak.
- Catat
usagesejak panggilan pertama. Tanpa data token, semua diskusi biaya jadi tebak-tebakan. - Baca pesan error sampai habis. Bedakan masalah izin, masalah region, dan masalah akses model — ketiganya terlihat mirip.
- Satu perubahan pada satu waktu. Mengubah chunking dan prompt bersamaan membuat hasil evaluasi tidak bisa dibaca.
- Layanan terkelola dulu. Di ujian maupun di pekerjaan, jawabannya hampir selalu yang bebannya paling rendah — kecuali soal menyebut kendala lain.
- Jangan lompat ke Fase 3. Godaannya besar, tapi tanpa IAM dan IaC kamu akan membangun sesuatu yang tidak bisa dijaga.
Sebelum ini
Roadmap ini mengandaikan kamu sudah bisa Python secara nyaman: type hints, async, Pydantic, dan pernah memanggil LLM lewat SDK. Kalau belum, mulai dari Python untuk AI Engineer — atau dari Python Dasar untuk Pemula kalau kamu belum pernah ngoding sama sekali.