View a markdown version of this page

Mengotomatiskan pembuatan acara uji Lambda menggunakan Amazon Bedrock AgentCore - Panduan Prescriptive AWS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengotomatiskan pembuatan acara uji Lambda menggunakan Amazon Bedrock AgentCore

Ishita Gupta dan Kriti Gupta, Layanan Web Amazon

Ringkasan

Pola ini memberikan AI-powered pendekatan untuk secara otomatis menghasilkan kasus uji komprehensif untuk AWS Lambda fungsi menggunakan kemampuan AI generatif Amazon Bedrock. Pola ini mengimplementasikan arsitektur tiga agen (Analyzer, Generator, dan Validator) yang digunakan di Amazon Bedrock AgentCore yang menganalisis kode fungsi Lambda aktual untuk mengekstrak input/output pola dan menghasilkan skenario pengujian positif, negatif, dan kasus tepi dengan data realistis.

Arsitektur menetapkan alur kerja cerdas di mana Analyzer Agent mengambil dan menganalisis kode Lambda menggunakan Amazon Bedrock, Generator Agen membuat kasus uji berdasarkan pola yang dipelajari, dan Agen Validator memastikan kualitas melalui deduplikasi dan peringkat. Penyimpanan DynamoDB-based memori Amazon memungkinkan pembelajaran berkelanjutan dari umpan balik pengguna, meningkatkan akurasi pembuatan tes dari waktu ke waktu. Amazon Cognito menyediakan otentikasi pengguna yang aman dengan otorisasi API berbasis JSON Web Token (JWT). Amazon Bedrock Guardrails menyediakan pemfilteran serangan yang cepat, penyuntingan informasi sensitif, dan penegakan keamanan konten pada semua panggilan API Amazon Bedrock. Kemampuan Utama:

  • Multi-Language Dukungan: Fungsi Python, Java, C # JavaScript/TypeScript, dan Ruby Lambda

  • Pemotongan Kode Cerdas: Secara otomatis membagi basis kode besar menjadi potongan yang dapat dikelola untuk analisis

  • Pemrosesan Paralel: Panggilan API Amazon Bedrock Bersamaan untuk pembuatan pengujian yang lebih cepat (5 pekerja bersamaan untuk analisis kode, pembuatan pengujian paralel per potongan)

  • Target-Specific Analisis: Fokus pada fungsi, kelas, atau file tertentu dalam kode Lambda

  • Pembelajaran Pola: DynamoDB-based Penyimpanan memori Amazon dengan penyimpanan pola spesifik target dan global

  • Penghindaran Penolakan: Belajar dari kasus uji yang ditolak untuk menghindari kesalahan umum

  • Mekanisme Kelanjutan: Menangani respons Amazon Bedrock yang tidak lengkap dengan kelanjutan otomatis.

  • Abaikan Pola: Kecualikan file pengujian, dependensi, dan file non-kode dari analisis.

  • Penerapan Tanpa Server: Berjalan di Amazon Bedrock AgentCore dengan otentikasi Cognito-based

  • Pagar Keamanan: Amazon Bedrock Guardrails untuk pemfilteran serangan yang cepat, redaksi informasi identitas pribadi (PII), keamanan konten, dan pemblokiran topik yang ditolak pada semua panggilan AI

    Pola ini sangat ideal untuk tim pengembangan dan organisasi yang ingin mempercepat pengujian Lambda, meningkatkan cakupan pengujian, dan mempertahankan kualitas kode yang tinggi melalui pembuatan AI-assisted tes. Pola ini menggunakan layanan terkelola AWS untuk menyederhanakan pembuatan pengujian, meningkatkan kualitas melalui pembelajaran, dan skala untuk memenuhi kebutuhan pengujian yang terus berkembang.

Prasyarat dan batasan

Prasyarat

Agar berhasil menerapkan pola ini, pastikan bahwa berikut ini ada:

  • Akun AWS aktif - Akun AWS dengan izin untuk mengakses fungsi Lambda, memanggil model Amazon Bedrock, membuat tabel DynamoDB, mengelola kumpulan pengguna Cognito, dan menyebarkan agen Amazon Bedrock. AgentCore

  • Akses model Amazon Bedrock - Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6) diaktifkan di Wilayah AWS Anda. Untuk petunjuk penyiapan, lihat Akses model di dokumentasi https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html Amazon Bedrock.

  • Lingkungan pengembangan yang terdiri dari:

    - Python 3.11 atau lebih tinggi

    - AWS CLI diinstal dan dikonfigurasi

    - Git untuk mengkloning repositori

  • Fungsi AWS Lambda - Setidaknya satu fungsi Lambda yang digunakan dengan kode sumber yang dapat diakses untuk analisis. Fungsi harus menyertakan file sumber (.py, .js, .java, .cs, .rb) dalam paket penerapan, bukan hanya bytecode yang dikompilasi.

  • Runtime Lambda yang didukung:

    - Python 3.x (semua versi)

    - Node.js (JavaScript/TypeScript)

    - Java 8, 11, 17, 21 (membutuhkan file sumber.java dalam paket penerapan)

    -.NET Core/.NET 6+ (C #) (membutuhkan file sumber.cs dalam paket penerapan)

    - Ruby 2.7, 3.2

Keterbatasan

  • Ini membutuhkan akses model Amazon Bedrock di wilayah us-east-1 untuk Claude Sonnet 4.6. Fungsi AWS Lambda dapat berada di wilayah mana pun.

  • Data pola di Amazon DynamoDB kedaluwarsa setelah 90 hari (dapat dikonfigurasi melalui Time to Live (TTL)) untuk mempertahankan relevansi dan mengontrol biaya.

  • Fungsi Java dan C# Lambda harus menyertakan file sumber (.java, .cs) dalam paket penerapan. Compiled-only paket (.class, .dll) tidak dapat dianalisis.

  • Sistem menerapkan pembatasan laju per pengguna dalam memori (5 permintaan per 60 detik). Untuk penerapan terdistribusi dengan beberapa AgentCore instance, pembatasan kecepatan perlu dipindahkan ke DynamoDB atau Redis untuk konsistensi.

  • Beberapa layanan AWS tidak tersedia di semua Wilayah AWS. Untuk Ketersediaan Wilayah, lihat Layanan AWS menurut Wilayah. Untuk titik akhir tertentu, lihat halaman Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.

Versi produk

Arsitektur

Arsitektur target

Diagram berikut menunjukkan arsitektur dan alur kerja untuk pola ini:

Dalam alur kerja ini:

  1. Pengguna memberikan masukan: Pengembang berinteraksi dengan Streamlit UI (app.py) yang berjalan secara lokal, menyediakan nama fungsi Lambda, instruksi kustom opsional untuk pembuatan pengujian, filter target untuk fokus pada functions/classes /file tertentu, dan mengabaikan pola untuk mengecualikan file pengujian atau dependensi.

  2. Otentikasi Cognito: Aplikasi mengotentikasi permintaan dengan Cognito dan mengembalikan JWT (ID/Access token) ke Streamlit.

  3. AgentCore Pemanggilan API: Streamlit memanggil AgentCore API dengan Bearer Token + payload (nama fungsi, filter, instruksi, pola abaikan).

  4. Validasi JWT: AgentCore API memvalidasi JWT menggunakan tanda tangan token Cognito.

  5. Perutean Permintaan: AgentCore Permintaan rute API ke alur kerja Lambda Test Generator (AgentCore Runtime).

  6. Permintaan Analisis Kode: Analyzer Agent memulai permintaan untuk mengambil kode dan metadata fungsi Lambda target.

  7. Otentikasi AWS untuk Akses Lambda: Boto3 melakukan otentikasi dengan AWS menggunakan peran AgentCore eksekusi, meminta izin akses baca.

  8. Pengambilan dan Pemrosesan Kode AWS Lambda: Peran IAM mengotorisasi akses dan mengambil kode fungsi Lambda sebagai file ZIP, mengekstrak file sumber, menyaring dependensi (node_modules, venv, dll.) dan file non-kode, menerapkan pola abaikan yang ditentukan pengguna, dan memotong kode menjadi bagian-bagian yang dapat dikelola.

  9. Otentikasi Amazon Bedrock: Kli en Boto3 Amazon Bedrock mengautentikasi dengan AWS IAM untuk akses Amazon Bedrock, meminta izin model pemanggilan untuk menggunakan Anthropic Claude Sonnet 4.6.

  10. AI-Powered Analisis Kode: Peran IAM mengotorisasi dan mengirimkan potongan kode ke Amazon Bedrock (us-east-1) menggunakan Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6) dengan Amazon Bedrock Guardrail diterapkan untuk pemfilteran serangan yang cepat dan keamanan konten. Amazon Bedrock melakukan analisis yang disempurnakan Regex + LLM untuk mengekstrak pola input aktual (misalnya, event ['body'], header ['Authorization']), pola keluaran (misalnya, StatusCode, struktur badan respons), dependensi, pola penanganan kesalahan, dan kasus tepi dari kode.

  11. Hasil analisis dikemas: Analyzer Agent mengemas hasil analisis ke dalam AnalysisResult objek yang berisi potongan kode, pola input, pola keluaran, dependensi, pola kesalahan, dan metadata, kemudian meneruskannya ke Generator Agen.

  12. Proses pembuatan pengujian dimulai: Agen Generator menerima hasil analisis dan memulai permintaan untuk menghasilkan kasus uji, pertama-tama menanyakan penyimpanan memori DynamoDB untuk mempelajari pola historis.

  13. Otentikasi Amazon DynamoDB untuk Akses Memori: Klien Boto3 DynamoDB melakukan otentikasi dengan AWS IAM untuk izin akses baca untuk mengambil pola yang disimpan.

  14. Pola historis diambil dari Database: Peran IAM mengotorisasi dan menanyakan tabel penyimpanan memori DynamoDB (lambda-testcase-memory) untuk mengambil pola yang diterima sebelumnya dan pola yang ditolak (tes gagal dengan alasan penolakan) untuk fungsi Lambda tertentu.

  15. Otentikasi Amazon Bedrock untuk Pembuatan Tes: Kli en Boto3 Amazon Bedrock mengautentikasi lagi dengan AWS IAM untuk akses Amazon Bedrock untuk menghasilkan kasus uji.

  16. Generasi Kasus Uji AI: Peran IAM mengotorisasi dan mengirimkan hasil analisis yang dikombinasikan dengan pola memori ke Amazon Bedrock. Amazon Bedrock menghasilkan skema kasus uji dengan peristiwa input realistis berdasarkan pola kode aktual, membuat tes positif (35%), tes negatif (35%), dan kasus tepi (30%). Generasi terjadi per potongan secara paralel untuk efisiensi, menerapkan pola yang dipelajari dari memori, menghindari pola yang ditolak, dan pembuatan potongan jika diperlukan untuk basis kode yang besar. Semua panggilan Bedrock converse () menyertakan GuardrailConfig untuk pemfilteran serangan yang cepat, penyuntingan PII, dan penegakan topik yang ditolak.

  17. Validasi pengujian dimulai: Agen Generator meneruskan kandidat kasus uji yang dihasilkan ke Agen Validator untuk kontrol kualitas, deduplikasi, dan seleksi akhir.

  18. Proses validasi dikonfigurasi: Agen Validator menerima kandidat tes dan memulai proses validasi, meminta akses ke penyimpanan memori DynamoDB untuk penilaian dan validasi.

  19. Otentikasi DynamoDB untuk Validasi: Kli en Boto3 DynamoDB mengautentikasi dengan AWS IAM untuk akses baca ke pola memori kueri untuk penilaian validasi.

  20. Kualitas pengujian dinilai: Peran IAM mengotorisasi dan menggunakan penyimpanan memori DynamoDB untuk menilai kasus uji berdasarkan tingkat keberhasilan pola sebelumnya, cakupan fungsi, dan kompleksitas kode. Validator melakukan validasi struktural, deduplikasi menggunakan hashing pola, penilaian kualitas dengan peningkatan kepercayaan untuk fungsi handler dan penanganan kesalahan, pemilihan keragaman untuk mencakup berbagai potongan dan jenis pengujian, dan memilih N kasus uji berkualitas tinggi dan paling beragam.

  21. Kasus uji akhir dikembalikan ke AgentCore: Agen Validator mengembalikan kasus uji akhir yang divalidasi dengan metadata (skor kepercayaan, deskripsi, peristiwa masukan, kategori) ke orkestrator utama, yang memformat dan mengembalikannya kembali ke Amazon Bedrock API AgentCore

  22. Hasil dikirimkan ke UI: AgentCore API mengembalikan pengujian yang dihasilkan kembali ke UI Streamlit untuk ditampilkan dengan ringkasan analisis, metadata pembuatan, dan detail kasus uji.

  23. Ulasan pengguna dan memberikan umpan balik: Pengembang meninjau kasus uji yang ditampilkan di UI Streamlit, mengevaluasi setiap pengujian untuk kualitas dan relevansi, menerima kasus uji yang baik atau menolak yang buruk dengan alasan penolakan tertentu (missing_auth_headers, wrong status_code, unrealistic_data, missing_required_fields, inexactit_event_source, dll.) Dan catatan kustom opsional yang menjelaskan penolakan, lalu mengirimkan umpan balik.

  24. Umpan balik dikirimkan ke sistem: Streamlit UI mengirimkan umpan balik yang dikumpulkan (accepted/rejected status, alasan penolakan, catatan khusus) ke AgentCore API (save_feedback).

  25. AgentCore umpan balik rute: AgentCore API memanggil agen Validator yang berisi logika untuk menyimpan umpan balik di DynamoDB.

  26. Proses penyimpanan umpan balik dimulai: Agen Validator memulai proses untuk menyimpan umpan balik.

  27. Akses tulis DynamoDB diautentikasi: Klien Boto3 DynamoDB mengautentikasi dengan AWS IAM (Peran AgentCore eksekusi) untuk izin akses menulis untuk menyimpan pola umpan balik.

  28. Pola pembelajaran disimpan: Peran IAM mengotorisasi dan menyimpan umpan balik pengguna di tabel penyimpanan memori DynamoDB. Setiap pola disimpan dengan kunci partisi komposit (function_name #target_function atau function_name #GLOBAL), kunci pengurutan komposit (UMPAN BALIK # accepted/rejected #PATTERN #hash), hash pola untuk deduplikasi, jenis pengujian, struktur pola input, status umpan balik, alasan penolakan (jika ditolak), catatan khusus, jumlah penggunaan, tingkat keberhasilan, stempel waktu, dan TTL 90 hari untuk pembersihan otomatis. Data yang tersimpan ini memungkinkan sistem untuk belajar dari umpan balik pengguna dan meningkatkan generasi pengujian di masa depan.

Otomatisasi dan skala

Pola ini dinaikkan secara otomatis menggunakan layanan terkelola AWS. Amazon Bedrock menangani inferensi AI sesuai permintaan dengan jendela konteks token 200K dan output token 64K per panggilan, dan Amazon DynamoDB menggunakan penagihan sesuai permintaan yang secara otomatis menyesuaikan dengan pola lalu lintas. Sistem menggunakan pemrosesan paralel untuk kecepatan, Analyzer Agent membuat 5 panggilan Bedrock bersamaan untuk menganalisis potongan kode (ThreadPoolExecutor dengan max_workers=5), sedangkan Generator Agen memproses potongan secara paralel dengan 5 pekerja bersamaan. Mekanisme kelanjutan menangani tanggapan yang tidak lengkap dengan mencoba kembali permintaan secara otomatis. Pembatasan tarif (5 permintaan per 60 detik per pengguna) mencegah penyalahgunaan biaya dari panggilan API Bedrock yang berlebihan.

Pengoptimalan biaya mencakup TTL-based pembersihan yang menghapus pola yang lebih lama dari 90 hari, kueri kunci komposit dengan begins_with () untuk pencarian instan tanpa pemindaian tabel, dan BatchWriteItem operasi yang mengurangi operasi penulisan DynamoDB sekitar 90%. Kinerja tergantung pada ukuran fungsi, fungsi kecil (di bawah 10 file) menghasilkan 10 kasus uji dalam 30-60 detik, fungsi menengah (10—50 file) memakan waktu 1-3 menit, dan fungsi besar (50+ file) membutuhkan waktu 3-5 menit, meskipun menggunakan filter target untuk fokus pada bagian kode tertentu mengurangi waktu hingga 50— 70%.

Alat

Layanan AWS

  • Amazon Bedrock — Menyediakan kemampuan AI generatif melalui Anthropic Claude Sonnet 4 untuk analisis kode, pembuatan tes, validasi, dan ringkasan penolakan. Selalu menggunakan wilayah us-east-1 untuk akses model.

  • Amazon Bedrock AgentCore — Menyediakan runtime agen tanpa server untuk menerapkan dan menghosting backend generasi pengujian dengan penskalaan, OAuth-based otorisasi, dan pengamatan otomatis. CloudWatch

  • Amazon Bedrock Guardrails — Menyediakan penyaringan ML-based keamanan pada semua panggilan API Bedrock termasuk deteksi serangan cepat (kekuatan TINGGI), pemfilteran konten, anonimisasi PII (email, telepon, nama), pemblokiran keys/private keys/JWT token akses AWS, dan penegakan topik yang ditolak (pembuatan kode eksploitasi, keluaran kode sumber mentah). Diterapkan melalui CloudFormation.

  • AWS CloudFormation — Mengotomatiskan penyediaan infrastruktur lengkap termasuk tabel DynamoDB, Kumpulan Pengguna Cognito, Amazon Bedrock Guardrail dengan pembuatan versi, dan peran eksekusi IAM untuk. AgentCore

  • Amazon Cognito — Menyediakan otentikasi pengguna dengan pendaftaran berbasis email, penerbitan token JWT, dan otorisasi API aman untuk backend. AgentCore

  • Amazon DynamoDB — Menyimpan pola pengujian yang diterima dan ditolak dengan statistik penggunaan untuk pembelajaran dan peningkatan berkelanjutan. Menggunakan kunci komposit (function_target, pattern_sk) untuk kueri zero-scan dan penyimpanan pola spesifik target.

  • AWS Lambda — Sumber kode fungsi untuk analisis, GetFunction API mengambil kode dan konfigurasi. Alat ini mendukung runtime Python Node.js, Java, .NET, dan Ruby.

Alat-alat lainnya

  • Python 3.11+ - Lingkungan Runtime untuk orkestrasi aplikasi dan agen.

  • Streamlit — antarmuka Web-based pengguna untuk otentikasi, pembuatan tes, pengumpulan umpan balik, dan pemantauan status sistem.

  • Boto3 — AWS SDK untuk Python untuk berinteraksi dengan layanan Lambda, Amazon Bedrock, DynamoDB, dan Cognito.

Repositori kode

Kode untuk pola ini tersedia di Github - Lambda Test Event Generator.

Praktik terbaik

Pola ini menerapkan praktik terbaik berikut:

  • Menggunakan kebijakan IAM dengan hak istimewa terendah untuk akses AWS Lambda (read-only), Amazon Bedrock (invoke), Amazon DynamoDB (), dan Amazon Cognito (otentikasi). query/write

  • Terapkan pembelajaran pola spesifik target dengan fallback global untuk meningkatkan akurasi pengujian.

  • Aktifkan DynamoDB TTL untuk pembersihan otomatis pola lama (90 hari) untuk mengontrol biaya penyimpanan.

  • Gunakan kueri zero-scan dengan kunci komposit (function_target, pattern_sk) untuk pengambilan pola yang cepat.

  • Terapkan pola abaikan untuk mengecualikan file pengujian, dependensi, dan file non-kode dari analisis.

  • Gunakan pemotongan kode multi-bahasa dengan parsing Abstrak Syntax Tree (AST) (Python) dan pola regex (Java, C #, JS, Ruby).

  • Simpan pola dengan nilai aktual (bukan hanya struktur) untuk deduplikasi sejati.

  • Terapkan backend di Amazon Bedrock AgentCore untuk penskalaan tanpa server dan infrastruktur terkelola.

  • Otentikasi pengguna melalui Amazon Cognito dengan validasi token JWT pada setiap permintaan API.

  • Terapkan Amazon Bedrock Guardrails pada semua panggilan converse () untuk pemfilteran serangan cepat, penyuntingan PII, pemblokiran data sensitif (kunci AWS, kunci pribadi, JWT), dan penegakan topik yang ditolak.

  • Sanitasi hasil analisis sebelum kembali ke pengguna - semua potongan kode sumber mentah dihapus dari respons, memastikan kode sumber Lambda tidak pernah meninggalkan batas runtime. AgentCore

  • Validasi semua input API dengan pola regex dan batas panjang (nama fungsi maks 170 karakter, instruksi khusus maks 2000 karakter, maks 50 pola abaikan) untuk mencegah injeksi dan penyalahgunaan.

  • Terapkan pembatasan tarif per pengguna (5 permintaan per 60 detik) untuk mencegah penyalahgunaan biaya dari panggilan API Bedrock yang berlebihan.

  • Bersihkan pesan kesalahan sebelum kembali ke pengguna - jalur file internal, detail AWS SDK, dan informasi infrastruktur tidak pernah terekspos dalam respons kesalahan.

Pertimbangkan praktik terbaik tambahan berikut:

  • Berikan alasan umpan balik spesifik saat menolak kasus uji untuk meningkatkan akurasi pembelajaran.

  • Hasilkan tes secara berulang (2-3 kali) untuk fungsi yang sama untuk memungkinkan sistem belajar dan meningkatkan.

  • Berikan instruksi khusus saat Anda memerlukan skenario pengujian atau format data tertentu.

  • Aktifkan IAM Access Analyzer untuk memantau izin sumber daya dan mengidentifikasi akses yang tidak diinginkan.

  • Mulailah dengan fungsi Lambda kecil untuk memahami sistem sebelum menganalisis basis kode besar.

  • Tinjau kebijakan IAM secara teratur dan hapus izin yang tidak digunakan.

  • Gunakan kebijakan kata sandi yang kuat dan aktifkan Cognito AdvancedSecurityMode untuk deteksi ancaman.

Epos

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

Klon GitHub ing repositori ke sistem lokal Anda dan navigasikan ke direktori proyek:

git clone https://github.com/aws-samples/sample-lambda-test-event-generator.git cd sample-lambda-test-event-generator

Repositori ini berisi aplikasi Python, CloudFormation template, dan file konfigurasi.

Pengembang aplikasi

Konfigurasikan KredenSIAL AWS.

Konfigurasikan kredenSIAL AWS Anda untuk mengaktifkan AWS CLI berinteraksi dengan akun AWS Anda dan untuk mengaktifkan aplikasi mengakses fungsi Lambda yang ingin Anda uji.

Anda dapat melakukan ini menggunakan perintah konfigurasi AWS CLI:

aws configure

Saat diminta, berikan informasi berikut:

  • ID Kunci Akses AWS: Kunci akses AWS Anda

  • Kunci Akses Rahasia AWS: Kunci akses rahasia AWS Anda

  • Nama wilayah default: Wilayah AWS tempat Anda ingin menyebarkan sumber daya (mis.,us-east-1)

  • Format keluaran default: Format keluaran yang disukai (mis.,json)

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan infrastruktur menggunakan CloudFormation.

  1. Terapkan infrastruktur backend lengkap (DynamoDB, Cognito, peran IAM) menggunakan template yang disediakan. CloudFormation Jalankan perintah berikut di CLI Anda:

    aws cloudformation create-stack \ --stack-name lambda-test-generator-infra \ --template-body file://cloudformation/complete-infrastructure.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-east-1
  2. Tunggu penerapan tumpukan selesai:

    aws cloudformation wait stack-create-complete \ --stack-name lambda-test-generator-infra \ --region us-east-1
  3. Ambil semua output:

    aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs' \ --output table

Apa yang dibuat:

  • Tabel DynamoDB dengan TTL diaktifkan, pemulihan point-in-time, dan enkripsi sisi server.

  • Kumpulan Pengguna Cognito dengan otentikasi email, DI AdvancedSecurityMode PAKSAKAN, MFA opsional (TOTP), dan pembuatan pengguna khusus admin.

  • Amazon Bedrock Guardrail dengan pemfilteran serangan cepat, penyuntingan PII, pemfilteran konten, dan pemblokiran topik yang ditolak.

  • Peran eksekusi IAM untuk AgentCore dengan kebijakan hak istimewa terendah termasuk landrock: izin. ApplyGuardrail

catatan

Tumpukan menciptakan semua sumber daya yang dibutuhkan. Pastikan CloudFormation template selesai dengan sukses sebelum melanjutkan ke langkah berikutnya.

Pengembang aplikasi

Ekspor variabel konfigurasi.

Ekspor semua nilai dari output CloudFormation tumpukan sebagai variabel lingkungan:

export AGENTCORE_ROLE_ARN=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`AgentCoreExecutionRoleArn`].OutputValue' \ --output text) export DISCOVERY_URL=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`DiscoveryUrl`].OutputValue' \ --output text) export CLIENT_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`ClientId`].OutputValue' \ --output text) export DYNAMODB_TABLE=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`DynamoDBTableName`].OutputValue' \ --output text) export COGNITO_POOL_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`UserPoolId`].OutputValue' \ --output text) export BEDROCK_GUARDRAIL_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' \ --output text) export BEDROCK_GUARDRAIL_VERSION=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailVersion`].OutputValue' \ --output text)

Variabel ini digunakan dalam langkah-langkah selanjutnya untuk AgentCore konfigurasi dan pembuatan file.env.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat lingkungan virtual.

  1. Buat dan aktifkan lingkungan virtual Python untuk mengisolasi dependensi proyek::

    python3 -m venv venv source venv/bin/activate
  2. Instal paket Python yang diperlukan dari file persyaratan:

    pip install -r requirements.txt

    Ini menginstal semua pustaka yang diperlukan termasuk boto3 untuk AWS SDK, python-dotenv untuk konfigurasi lingkungan, bedrock-agentcore-runtime untuk integrasi, dan Streamlit untuk antarmuka pengguna. AgentCore

    catatan

    Lingkungan virtual harus diaktifkan (menggunakansource venv/bin/activate) setiap kali Anda membuka sesi terminal baru untuk menjalankan aplikasi.

Pengembang aplikasi

Konfigurasikan dan terapkan AgentCore.

  • Konfigurasikan AgentCore agen:

    agentcore configure \ --entrypoint main.py \ --name lambda_test_generator \ --requirements-file requirements.txt \ --region us-east-1 \ --execution-role $AGENTCORE_ROLE_ARN
  • Saat diminta:

    1. Jenis penerapan: 1 (Direct Code Deploy - tidak diperlukan Docker)

    2. Versi Python: 2 (PYTHON_3_11 atau pilih Versi Python khusus Anda)

    3. Bucket S3: Tekan Enter (buat otomatis)

    4. OAutorizer OAuth: ya

    5. URL Penemuan: Tempel nilai $DISCOVERY_URL

    6. ID Klien: Tempel nilai $CLIENT_ID

    7. Audiens: Tekan Enter (biarkan kosong)

    8. Cakupan: Tekan Enter (biarkan kosong)

    9. Klaim khusus: Tekan Enter (biarkan kosong)

    10. Minta header: ya

    11. Header: Otorisasi

    12. Memori: s (lewati - menggunakan DynamoDB)

  • Menyebarkan agen:

    agentcore deploy \ --env DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE \ --env AWS_REGION=us-east-1 \ --env BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID \ --env BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION
  • Dapatkan ID AgentCore runtime dan titik akhir:

    RUNTIME_ID=$(agentcore status | grep "Agent ARN:" | sed 's/.*runtime\///' | sed 's/[│ ].*//') AGENTCORE_ENDPOINT="https://bedrock-agentcore-runtime.us-east-1.amazonaws.com/agents/${RUNTIME_ID}/endpoints/DEFAULT"
Pengembang aplikasi

Buat file.env untuk pengembangan lokal.

Buat file.env di direktori root proyek dengan semua nilai konfigurasi:

cat > .env << EOF AWS_REGION=us-east-1 DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE COGNITO_POOL_ID=$COGNITO_POOL_ID COGNITO_CLIENT_ID=$CLIENT_ID COGNITO_REGION=us-east-1 AGENTCORE_ENDPOINT=$AGENTCORE_ENDPOINT BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION EOF

Uji konektivitas ke layanan AWS:

aws dynamodb describe-table --table-name $DYNAMODB_TABLE aws bedrock list-foundation-models --region us-east-1

Kedua perintah harus mengembalikan respons yang berhasil. Jika Anda mengalami kesalahan izin, verifikasi bahwa kebijakan IAM dikonfigurasi dengan benar.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat Pengguna Cognito baru.

Kumpulan Pengguna Cognito dikonfigurasi dengan pembuatan pengguna khusus admin untuk keamanan, sehingga pengguna tidak dapat mendaftar sendiri. Buat pengguna melalui AWS CLI menggunakan ID Kumpulan Cognito dan ID Klien yang diekspor dari output CloudFormation tumpukan. Buat pengguna baru (ganti user@example.com dengan email Anda):

aws cognito-idp admin-create-user \ --user-pool-id $COGNITO_POOL_ID \ --username user@example.com \ --user-attributes Name=email,Value=user@example.com Name=email_verified,Value=true \ --temporary-password '[PASSWORD]!' \ --region us-east-1

Tetapkan kata sandi permanen (minimal 8 karakter, harus menyertakan huruf besar, huruf kecil, dan angka):

aws cognito-idp admin-set-user-password \ --user-pool-id $COGNITO_POOL_ID \ --username user@example.com \ --password '[PASSWORD]!' \ --permanent \ --region us-east-1

Gunakan kredenSIAL ini untuk masuk melalui UI Streamlit di langkah berikutnya.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Luncurkan Streamlit UI.

Mulai aplikasi:

streamlit run app.py

UI akan terbuka di browser default Anda di http://localhost:8501

Masuk dengan kredenSIAL yang dibuat pada langkah sebelumnya

Pengembang aplikasi

Konfigurasikan opsi pembuatan

Di UI, konfigurasikan opsi berikut:

  1. Nama fungsi lambda atau ARN: Masukkan pengidentifikasi fungsi Lambda target

  2. Filter Target (Opsional): Tentukan fungsi, kelas, atau file untuk fokus (misalnya,validate_user,UserService,auth.py)

  3. Abaikan P ola (Opsional): Tambahkan pola file atau folder untuk dikecualikan, satu per baris:

    • tests/- Abaikan direktori tes

    • *.test.js- Abaikan file uji

    • mock_data/- Abaikan data tiruan

  4. Instruksi Kustom (Opsional): Tambahkan persyaratan pengujian khusus

Pengembang aplikasi

Hasilkan kasus uji.

Klik tombol “Hasilkan Kasus Uji”. Sistem akan:

  1. Otentikasi dengan AgentCore menggunakan token Cognito JWT.

  2. Ambil kode Lambda dari AWS.

  3. Terapkan pola abaikan untuk mengecualikan file yang tidak diinginkan.

  4. Kode potongan menggunakan strategi khusus bahasa.

  5. Terapkan filter target jika ditentukan.

  6. Analisis kode dengan Amazon Bedrock.

  7. Kueri DynamoDB untuk pola yang dipelajari.

  8. Hasilkan kasus uji.

  9. Validasi dan beri peringkat kasus uji.

Pengembang aplikasi

Tinjau tes yang dihasilkan.

Tinjau setiap kasus uji yang dihasilkan, yang meliputi:

  • Jenis: Positif (input valid), Negatif (input tidak valid), atau Edge (kondisi batas)

  • Deskripsi: Apa yang divalidasi oleh tes

  • Data uji: Muatan acara pengujian yang sebenarnya

DevOps insinyur, Pengembang aplikasi

Berikan umpan balik.

Untuk setiap kasus uji, berikan umpan balik:

Untuk menerima kasus uji:

  • Klik tombol “Terima”

Untuk menolak kasus uji:

  1. Klik tombol “Tolak”

  2. Pilih alasan penolakan dari dropdown atau tambahkan alasan khusus

  3. Klik tombol “Kirim Penolakan”

Insinyur uji

Simpan umpan balik ke memori.

Setelah meninjau semua kasus uji:

  1. Klik tombol “Simpan Semua Umpan Balik ke Memori”

  2. Sistem memvalidasi bahwa semua kasus yang ditolak telah mengirimkan alasan

  3. Umpan balik dikirim ke AgentCore API yang mengarahkan ke Agen Validator.

  4. Umpan balik disimpan batch ke DynamoDB dengan hash pola untuk deduplikasi.

  5. Lihat ringkasan umpan balik yang menunjukkan accepted/rejected jumlah

Insinyur uji

Iterasi untuk perbaikan.

Hasilkan tes 2-3 kali lagi untuk fungsi yang sama untuk meningkatkan kualitas:

  • Sistem mengambil pola yang dipelajari dari DynamoDB

  • Kualitas meningkat dengan setiap iterasi berdasarkan umpan balik Anda

  • Gunakan filter target untuk pengujian terfokus pada komponen tertentu

  • Gunakan pola abaikan untuk mengecualikan kode yang tidak relevan dan meningkatkan kualitas generasi

catatan

Sistem pembelajaran menjadi lebih efektif dengan penggunaan berulang. Setiap siklus umpan balik membantu AI memahami preferensi pengujian Anda dan menghasilkan kasus uji yang lebih relevan untuk fungsi Lambda Anda.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Panggil AgentCore API secara langsung.

Untuk otomatisasi dan integrasi, panggil AgentCore backend secara langsung menggunakan panggilan API dengan otentikasi Cognito.

Dapatkan token Cognito:

TOKEN=$(agentcore identity get-cognito-inbound-token)

Memanggil pembuatan tes:

agentcore invoke --bearer-token "$TOKEN" '{"action": "generate_test_cases", "function_name": "your-lambda-function", "num_test_cases": 10,"custom_instructions": "Focus on authentication scenarios", "target_filter": "validate_user","ignore_patterns": ["tests/", "*.test.js"] }'

Atau menggunakan curl:

curl -X POST "$AGENTCORE_ENDPOINT" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "action": "generate_test_cases", "function_name": "your-lambda-function", "num_test_cases": 10}'
Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Pantau pola DynamoDB dan lacak biaya.

  1. Kueri tabel DynamoDB untuk meninjau pola yang diterima dan memahami apa yang telah dipelajari sistem:

    aws dynamodb query \ --table-name $DYNAMODB_TABLE \ --key-condition-expression "function_target = :ft AND begins_with(pattern_sk, :prefix)" \ --expression-attribute-values '{":ft":{"S":"my-function#GLOBAL"},":prefix":{"S":"FEEDBACK#accepted"}}'

    Ganti my-function dengan nama fungsi Lambda Anda yang sebenarnya untuk melihat pola khusus untuk fungsi itu.

  2. Lacak konsumsi sumber daya untuk mengoptimalkan biaya:

    • AWS Cost Explorer: Pantau pengeluaran keseluruhan untuk layanan Bedrock, DynamoDB, dan Lambda

    • Amazon Bedrock: Tinjau penggunaan token dan metrik panggilan API di konsol Bedrock

    • DynamoDB: Periksa metrik permintaan, kapasitas yang dikonsumsi, dan penggunaan penyimpanan.

    • AgentCore: Mem antau metrik runtime agen dan jumlah pemanggilan di CloudWatch

  3. Gunakan CloudWatch Log untuk mendiagnosis masalah dan memantau perilaku sistem:

    • AgentCore log:

      aws logs tail /aws/bedrock-agentcore/runtimes/lambda_test_generator --follow
    • Kesalahan aplikasi: Tinjau kesalahan dan pengecualian tingkat aplikasi

    • Tanggapan API Bedrock: Analisis respons model AI dan konsumsi token

    • Operasi DynamoDB: Memantau read/write pola dan peristiwa pelambatan

catatan

Pemantauan rutin membantu mengidentifikasi peluang pengoptimalan biaya dan memastikan sistem terus belajar secara efektif. Konfigurasi TTL pada tabel DynamoDB Anda secara otomatis membersihkan pola lama, membantu mengelola biaya penyimpanan dari waktu ke waktu.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus sumber daya yang digunakan.

Untuk menghapus semua sumber daya yang digunakan:

Hapus AgentCore agen:

agentcore destroy

Hapus CloudFormation tumpukan (menghapus tabel DynamoDB, Cognito User Pool, dan peran IAM):

aws cloudformation delete-stack \ --stack-name lambda-test-generator-infra \ --region us-east-1
Administrator AWS

Pemecahan masalah

IsuSolusi

Kesalahan “Akses Ditolak” saat mengambil kode Lambda

  • Verifikasi izin IAM termasuk lambda:GetFunction dan lambda:GetFunctionConfiguration untuk fungsi Lambda target

  • Periksa kredensibilitas AWS CLI Anda

    aws sts get-caller-identity

“Kesalahan penulisan DynamoDB”

  • Verifikasi nama tabel dalam .env file Anda cocok dengan nama tabel yang digunakan

  • Periksa CloudFormation keluaran:

    aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey=DynamoDBTableName].OutputValue' --output text
  • Atau verifikasi langsung:

    aws dynamodb describe-table --table-name $DYNAMODB_TABLE

Tidak ada kasus uji yang dihasilkan

Kemungkinan penyebab dan solusi:

  • Kode fungsi lambda tidak dapat diakses: Periksa izin IAM untuk akses Lambda

  • Paket penerapan Lambda hanya berisi kode yang dikompilasi:.class, .dll file tanpa file sumber tidak dapat dianalisis

  • Semua file disaring berdasarkan pola abaikan: Tinjau dan sesuaikan pola abaikan Anda

  • Instruksi khusus terlalu ketat: Sederhanakan atau hapus instruksi khusus

  • Verifikasi fungsi Lambda ada:

    aws lambda get-function --function-name <name>

Java/C# Lambda menunjukkan “Tidak ada kode sumber yang ditemukan”

Java dan C# Lambdas memerlukan file sumber dalam paket penerapan:

Jawa (Maven):

  1. Tambahkan konfigurasi inklusi sumber ke pom.xml (lihatdocs/JAVA_SETUP.md)

  2. Bangun kembali dan gunakan kembali fungsi Lambda Anda

C# (.NET):

  1. Sertakan .cs file dalam konfigurasi build (lihatdocs/CSHARP_SETUP.md)

  2. Bangun kembali dan gunakan kembali fungsi Lambda Anda

Kesalahan penulisan DynamoDB

  • Periksa izin DynamoDB dan status tabel:

  • Verifikasi kebijakan IAM termasuk dan dynamodb:PutItem dynamodb:BatchWriteItem

  • Periksa status tabel:

    aws dynamodb describe-table --table-name $DYNAMODB_TABLE

    Nama tabel menyertakan akhiran nama tumpukan. Gunakan nilai dari CloudFormation output atau file.env Anda.

  • Aktif CloudWatch kan Log untuk DynamoDB untuk melihat pesan kesalahan terperinci

Pembuatan tes lambat

Mengoptimalkan kecepatan generasi:

  1. Gunakan filter target untuk fokus pada fungsi tertentu (50-70% lebih cepat)

  2. Tambahkan pola abaikan untuk mengecualikan file pengujian, dependensi, dan kode yang tidak relevan

  3. Kurangi ukuran kode dengan menyaring file yang tidak perlu sebelum analisis

AgentCore: “Agen tidak ditemukan”

Verifikasi agen digunakan:

agentcore status agentcore configure list

AgentCore: “Izin ditolak” saat runtime

Verifikasi peran eksekusi memiliki kebijakan yang benar:

aws iam list-role-policies --role-name agentcore-exec-lambda-test-generator-infra

Cognito: “Nama pengguna atau kata sandi tidak valid”

Verifikasi kredensibilitas Anda benar. Anda dapat membuat pengguna baru menggunakan alur “Buat Akun” Streamlit UI, atau melalui AWS CLI:

aws cognito-idp admin-create-user --user-pool-id <POOL_ID> --username <username> --temporary-password '<password>' --region us-east-1
aws cognito-idp admin-set-user-password --user-pool-id <POOL_ID> --username <username> --password '<password>' --permanent --region us-east-1

Peringatan “Bedrock Guardrail tidak dikonfigurasi” di log

Veri BEDROCK_GUARDRAIL_ID fikasi dan variabel BEDROCK_GUARDRAIL_VERSION lingkungan diatur dalam AgentCore penerapan.

Periksa CloudFormation keluaran:

aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' --output text

Kesalahan “Batas tarif terlampaui”

Sistem membatasi 5 permintaan per 60 detik per pengguna. Tunggu waktu yang ditunjukkan sebelum mencoba lagi. Untuk penggunaan produksi dengan kebutuhan throughput yang lebih tinggi, sesuaikan RATE_LIMIT_MAX_REQUESTS dan RATE_LIMIT_WINDOW konstanta di main.py.

Sumber daya terkait

Dokumentasi AWS