

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Automatizza la generazione di eventi di test Lambda utilizzando Amazon Bedrock AgentCore
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore"></a>

*Ishita Gupta e Kriti Gupta, Amazon Web Services *

## Riepilogo
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-summary"></a>

Questo modello offre un AI-powered approccio per la generazione automatica di casi di test completi per le AWS Lambda funzioni utilizzando le funzionalità di intelligenza artificiale generativa di Amazon Bedrock. Questo modello implementa un'architettura a tre agenti (Analyzer, Generator e Validator) distribuita su Amazon Bedrock AgentCore che analizza il codice della funzione Lambda effettivo per estrarre input/output modelli e genera scenari di test positivi, negativi e limite con dati realistici.

L'architettura stabilisce un flusso di lavoro intelligente in cui l'Analyzer Agent recupera e analizza il codice Lambda utilizzando Amazon Bedrock, il Generator Agent crea casi di test basati su modelli appresi e il Validator Agent garantisce la qualità attraverso la deduplicazione e il ranking. Un archivio di DynamoDB-based memoria Amazon consente l'apprendimento continuo dal feedback degli utenti, migliorando la precisione della generazione dei test nel tempo. Amazon Cognito fornisce un'autenticazione utente sicura con autorizzazione API basata su JSON Web Token (JWT). Amazon Bedrock Guardrails fornisce un rapido filtraggio degli attacchi, la redazione delle informazioni sensibili e l'applicazione della sicurezza dei contenuti su tutte le chiamate API Amazon Bedrock. **Funzionalità chiave: **
+ **Multi-Language Supporto**: funzioni Python, Java, C\# e Ruby Lambda JavaScript/TypeScript
+ **Intelligent Code Chunking**: divide automaticamente le basi di codice di grandi dimensioni in blocchi gestibili per l'analisi
+ **Elaborazione parallela**: chiamate simultanee all'API Amazon Bedrock per una generazione di test più rapida (5 lavoratori simultanei per l'analisi del codice, generazione parallela di test per blocco)
+ **Target-Specific Analisi**: concentrati su funzioni, classi o file specifici all'interno del codice Lambda
+ **Pattern Learning**: Amazon DynamoDB-based memory store con storage di pattern specifico per l'obiettivo e globale
+ **Prevenzione del rifiuto**: impara dai test case rifiutati per evitare gli errori più comuni
+ **Meccanismo di continuazione**: gestisce le risposte incomplete di Amazon Bedrock con continuazione automatica.
+ **Ignora i modelli**: escludi dall'analisi i file di test, le dipendenze e i file non di codice.
+ **Distribuzione serverless**: viene eseguita su Amazon Bedrock con autenticazione AgentCore Cognito-based 
+ **Security Guardrails: ** Amazon Bedrock Guardrails per il rapido filtraggio degli attacchi, la redazione delle informazioni di identificazione personale (PII), la sicurezza dei contenuti e il blocco degli argomenti negati su tutte le chiamate AI 

  Questo modello è ideale per i team di sviluppo e le organizzazioni che desiderano accelerare i test Lambda, migliorare la copertura dei test e mantenere un'elevata qualità del codice attraverso la generazione di test. AI-assisted Questo modello utilizza i servizi gestiti di AWS per semplificare la creazione di test, migliorare la qualità attraverso l'apprendimento e scalare per soddisfare le esigenze di test in evoluzione.

## Prerequisiti e limitazioni
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-prereqs"></a>

**Prerequisiti **

Per implementare correttamente questo modello, assicurati che siano presenti i seguenti elementi:
+ **Un account AWS attivo**: un account AWS con autorizzazioni per accedere alle funzioni Lambda, richiamare modelli Amazon Bedrock, creare tabelle DynamoDB, gestire pool di utenti Cognito e distribuire agenti Amazon Bedrock. AgentCore 
+ **Accesso al modello Amazon Bedrock**: Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6) abilitato nella tua regione AWS. Per le istruzioni di configurazione, consulta [ Model Access nella documentazione di Amazon ](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) Bedrock.
+ **Un ambiente di sviluppo composto da: **

  - [ Python 3.11 o versioni successive ](https://www.python.org/downloads/)

  - [ AWS CLI installato e configurato ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

  - [ Git ](https://git-scm.com/install/) per la clonazione del repository
+ **Funzioni AWS Lambda**: almeno una funzione Lambda distribuita con codice sorgente accessibile per l'analisi. La funzione deve includere file sorgente (.py, .js, .java, .cs, .rb) nel pacchetto di distribuzione, non solo bytecode compilato.
+ **Runtime Lambda supportati: **

  - Python 3.x (tutte le versioni)

  - Node.js (JavaScript/TypeScript)

  - Java 8, 11, 17, 21 (richiede i file sorgente .java nel pacchetto di distribuzione)

  - .NET Core/.NET 6\+ (C\#) (richiede file sorgente .cs nel pacchetto di distribuzione)

  - Ruby 2.7, 3.2

**Limitazioni **
+ Ciò richiede l'accesso al modello Amazon Bedrock nella regione us-east-1 per Claude Sonnet 4.6. Le funzioni AWS Lambda possono essere presenti in qualsiasi regione.
+ I dati dei pattern in Amazon DynamoDB scadono dopo 90 giorni (configurabili tramite Time to Live (TTL)) per mantenere la pertinenza e controllare i costi.
+ Le funzioni Java e C\# Lambda devono includere file sorgente (.java, .cs) nei pacchetti di distribuzione. Compiled-only i pacchetti (.class, .dll) non possono essere analizzati.
+ Il sistema implementa la limitazione della frequenza in memoria per utente (5 richieste ogni 60 secondi). Per le implementazioni distribuite con più AgentCore istanze, la limitazione della velocità dovrebbe essere spostata su DynamoDB o Redis per motivi di coerenza.
+ Alcuni servizi AWS non sono disponibili in tutte le regioni AWS. Per la disponibilità delle regioni, consulta i servizi [ AWS per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta la [ pagina Endpoint e quote del ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) servizio e scegli il link per il servizio.

**Versioni del prodotto **
+ [Python 3.11 o versioni successive ](https://www.python.org/downloads/)
+ [Streamlit 1.28 o successivo ](https://docs.streamlit.io/get-started/installation)
+ [Boto3 (AWS SDK per Python) 1.42.75 o successivo ](https://docs.aws.amazon.com/boto3/latest/guide/quickstart.html#installation)
+ [AWS CLI 2.0 o versione successiva ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)
+ Claude Sonnet antropico 4 (us.anthropic.claude-sonnet-4-6)
+ bedrock-agentcore 1.4.7 o successivo
+ bedrock-agentcore-starter-toolkit 0.3.3 o successivo

## Architecture
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-architecture"></a>

**Architettura di destinazione **

Il diagramma seguente mostra l'architettura e il flusso di lavoro per questo modello:

![](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/c9fc8d32-56ec-4231-8b57-34769d9bd6d3/images/b57ae65b-60a7-4d32-97d1-155c50f102ce.png)


In questo flusso di lavoro:

1. **L'utente fornisce input: ** lo sviluppatore interagisce con Streamlit UI (app.py) in esecuzione localmente, fornisce il nome della funzione Lambda, istruzioni personalizzate opzionali per la generazione dei test, un filtro di destinazione per concentrarsi su functions/classes /files specifici e ignora i pattern per escludere file di test o dipendenze.

1. **Autenticazione Cognito: l'**applicazione autentica la richiesta con Cognito e restituisce JWT (token) a Streamlit. ID/Access 

1. **AgentCore Richiamo API: ** Streamlit richiama l' AgentCore API con Bearer Token \+ payload (nome della funzione, filtri, istruzioni, ignora i modelli).

1. **Convalida JWT: ** AgentCore l'API convalida JWT utilizzando la firma del token Cognito.

1. **Routing delle richieste: l'**AgentCore API indirizza la richiesta al flusso di lavoro Lambda Test Generator (Runtime). AgentCore 

1. **Richiesta di analisi del codice: ** Analyzer Agent avvia una richiesta per recuperare il codice e i metadati della funzione Lambda di destinazione.

1. **AWS Authentication for Lambda Access: ** Boto3 si autentica con AWS utilizzando il ruolo di esecuzione, richiedendo le autorizzazioni di accesso in lettura. AgentCore 

1. **Recupero ed elaborazione del codice AWS Lambda: il ruolo ** IAM autorizza l'accesso e recupera il codice della funzione Lambda come file ZIP, estrae i file sorgente, filtra le dipendenze (node\_modules, venv, ecc.) e i file non di codice, applica modelli di ignoramento definiti dall'utente e suddivide il codice in parti gestibili.

1. **Autenticazione Amazon Bedrock: il client Amazon Bedrock ** Boto3 esegue l'autenticazione con AWS IAM per l'accesso ad Amazon Bedrock, richiedendo l'invocazione delle autorizzazioni del modello per utilizzare Anthropic Claude Sonnet 4.6.

1. **AI-Powered Analisi del codice: il ruolo ** IAM autorizza e invia blocchi di codice ad Amazon Bedrock (us-east-1) utilizzando Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6) con Amazon Bedrock Guardrail applicato per il filtro degli attacchi tempestivi e la sicurezza dei contenuti. Amazon Bedrock esegue un'analisi avanzata Regex \+ LLM per estrarre dal codice i pattern di input effettivi (ad esempio, event ['body'], headers ['Authorization']), i pattern di output (ad esempio, StatusCode, struttura del corpo della risposta), le dipendenze, i modelli di gestione degli errori e i casi limite.

1. **I risultati dell'analisi sono impacchettati: ** Analyzer Agent impacchetta i risultati dell'analisi in un AnalysisResult oggetto contenente blocchi di codice, pattern di input, pattern di output, dipendenze, pattern di errore e metadati, quindi li passa al Generator Agent.

1. **Inizia il processo di generazione dei test: ** Generator Agent riceve i risultati dell'analisi e avvia una richiesta per generare casi di test, interrogando innanzitutto l'archivio di memoria DynamoDB alla ricerca di modelli storici da cui imparare.

1. **Amazon DynamoDB Authentication for Memory Access: il client ** Boto3 DynamoDB si autentica con AWS IAM per ottenere le autorizzazioni di accesso in lettura per recuperare i pattern memorizzati.

1. **I pattern storici vengono recuperati dal database: il ruolo ** IAM autorizza e interroga la tabella di archiviazione della memoria DynamoDB (lambda-testcase-memory) per recuperare i pattern precedentemente accettati e i pattern rifiutati (test falliti con motivi di rifiuto) per la specifica funzione Lambda.

1. **Autenticazione Amazon Bedrock per la generazione di test: il client Amazon Bedrock ** Boto3 si autentica nuovamente con AWS IAM per l'accesso ad Amazon Bedrock per generare casi di test.

1. **Generazione di casi di test AI: il ruolo ** IAM autorizza e invia i risultati delle analisi combinati con i modelli di memoria ad Amazon Bedrock. Amazon Bedrock genera schemi di test case con eventi di input realistici basati su modelli di codice effettivi, creando test positivi (35%), test negativi (35%) e casi limite (30%). La generazione avviene per blocco in parallelo per garantire l'efficienza, applica i modelli appresi dalla memoria, evita i modelli rifiutati e la generazione di blocchi, se necessario, per basi di codice di grandi dimensioni. Tutte le chiamate converse () di Bedrock includono GuardrailConfig per il rapido filtraggio degli attacchi, la redazione delle informazioni personali e l'imposizione degli argomenti negati.

1. **Inizia la convalida del test: ** Generator Agent passa i candidati al test case generati al Validator Agent per il controllo di qualità, la deduplicazione e la selezione finale.

1. **Il processo di convalida è configurato: ** Validator Agent riceve i candidati al test e avvia il processo di convalida, richiedendo l'accesso all'archivio di memoria DynamoDB per il punteggio e la convalida.

1. **Autenticazione DynamoDB per la convalida: il client DynamoDB ** Boto3 si autentica con AWS IAM per l'accesso in lettura ai pattern di memoria delle query per il calcolo dei punteggi di convalida.

1. **La qualità dei test viene valutata: il ruolo ** IAM autorizza e utilizza l'archivio di memoria DynamoDB per valutare i casi di test in base alle percentuali di successo dei pattern precedenti, alla copertura delle funzioni e alla complessità del codice. Validator esegue la convalida strutturale, la deduplicazione mediante pattern hashing, l'assegnazione di punteggi di qualità con sicurezza per le funzioni di gestione e la gestione degli errori, la selezione della diversità per coprire diversi blocchi e tipi di test e seleziona i primi N casi di test più diversi e di più alta qualità.

1. **Casi di test finali restituiti a AgentCore: ** Validator Agent restituisce i test case convalidati finali con metadati (punteggi di confidenza, descrizioni, eventi di input, categorie) all'orchestrator principale, che li formatta e li restituisce all' AgentCore API Amazon Bedrock

1. **Risultati inviati all'interfaccia utente: l'** AgentCore API restituisce i test generati all'interfaccia utente di Streamlit per la visualizzazione con il riepilogo dell'analisi, i metadati di generazione e i dettagli del test case.

1. **Esamina gli utenti e fornisce feedback: ** lo sviluppatore esamina i casi di test visualizzati nell'interfaccia utente di Streamlit, valuta ogni test per qualità e pertinenza, accetta casi di test validi o rifiuta quelli scadenti con motivi di rifiuto specifici (missing\_auth\_headers, wrong\_status\_code, unrealistic\_data, missing\_required\_fields, incorrect\_event\_source, ecc.) e note personalizzate opzionali che spiegano il rifiuto, quindi subemette un feedback.

1. **Il feedback viene inviato al sistema: ** Streamlit UI invia il feedback raccolto (accepted/rejected stato, motivi del rifiuto, note personalizzate) all' AgentCore API (save\_feedback).

1. **AgentCore indirizza il feedback: ** AgentCore l'API chiama l'agente Validator che contiene la logica per archiviare il feedback in DynamoDB.

1. **Inizia il processo di archiviazione del feedback: ** Validator Agent avvia il processo di archiviazione del feedback.

1. **L'accesso in scrittura di DynamoDB è autenticato: il client ** Boto3 DynamoDB si autentica con AWS IAM (ruolo di AgentCore esecuzione) per ottenere le autorizzazioni di accesso in scrittura per memorizzare i modelli di feedback.

1. **I modelli di apprendimento vengono archiviati: il ruolo ** IAM autorizza e memorizza il feedback degli utenti nella tabella di memoria di DynamoDB. Ogni modello viene archiviato con una chiave di partizione composita (function\_name \#target\_function o function\_name \#GLOBAL), una chiave di ordinamento composita (FEEDBACK\# accepted/rejected \#PATTERN \#hash), un pattern hash per la deduplicazione, il tipo di test, la struttura del modello di input, lo stato del feedback, il motivo del rifiuto (se rifiutato), note personalizzate, conteggio degli utilizzi, percentuale di successo, timestamp e TTL di 90 giorni per la pulizia automatica. Questi dati memorizzati consentono al sistema di apprendere dal feedback degli utenti e migliorare la generazione futura dei test.

**Automazione e scalabilità **

Questo modello si ridimensiona automaticamente utilizzando i servizi gestiti di AWS. Amazon Bedrock gestisce l'inferenza AI su richiesta con una finestra di contesto di 200.000 token e un output di 64.000 token per chiamata, mentre Amazon DynamoDB utilizza la fatturazione su richiesta che si adatta automaticamente ai modelli di traffico. Il sistema utilizza l'elaborazione parallela per aumentare la velocità, Analyzer Agent effettua 5 chiamate Bedrock simultanee per analizzare blocchi di codice (ThreadPoolExecutor con max\_workers=5), mentre Generator Agent elabora i blocchi in parallelo con 5 lavoratori simultanei. Un meccanismo di continuazione gestisce le risposte incomplete riprovando automaticamente le richieste. La limitazione della velocità (5 richieste ogni 60 secondi per utente) previene l'abuso dei costi dovuto a chiamate eccessive alle API Bedrock.

L'ottimizzazione dei costi include la TTL-based pulizia che rimuove i pattern più vecchi di 90 giorni, le query a chiave composita con begins\_with () per ricerche istantanee senza scansioni delle tabelle e BatchWriteItem le operazioni che riducono le operazioni di scrittura di DynamoDB di circa il 90%. Le prestazioni dipendono dalle dimensioni della funzione, le funzioni piccole (meno di 10 file) generano 10 casi di test in 30-60 secondi, le funzioni medie (10-50 file) richiedono 1-3 minuti e le funzioni grandi (oltre 50 file) richiedono 3-5 minuti, sebbene l'utilizzo di filtri di destinazione per concentrarsi su sezioni di codice specifiche riduca i tempi del 50-70%.

## Tools (Strumenti)
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-tools"></a>

**Servizi AWS**
+ [Amazon Bedrock](https://aws.amazon.com/bedrock/): fornisce funzionalità di intelligenza artificiale generativa tramite Anthropic Claude Sonnet 4 per l'analisi del codice, la generazione di test, la convalida e il riepilogo del rifiuto. Utilizza sempre la regione us-east-1 per l'accesso ai modelli.
+ [Amazon Bedrock AgentCore ](https://docs.aws.amazon.com/bedrock-agentcore/): fornisce un runtime di agenti serverless per la distribuzione e l'hosting del backend di generazione di test con scalabilità, autorizzazione e osservabilità automatiche. OAuth-based CloudWatch 
+ [Amazon Bedrock Guardrails](https://aws.amazon.com/bedrock/guardrails/): fornisce filtri di ML-based sicurezza su tutte le chiamate API Bedrock, incluso il rilevamento tempestivo degli attacchi (HIGH strength), il filtraggio dei contenuti, l'anonimizzazione delle PII (email, telefono, nome), il blocco dei keys/private keys/JWT token di accesso AWS e l'applicazione negata degli argomenti (generazione di codice exploit, output di codice sorgente non elaborato). Distribuito tramite. CloudFormation
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/): automatizza il provisioning completo dell'infrastruttura, tra cui tabella DynamoDB, Cognito User Pool, Amazon Bedrock Guardrail con controllo delle versioni e ruolo di esecuzione IAM per. AgentCore
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/): fornisce l'autenticazione degli utenti con registrazione tramite e-mail, emissione di token JWT e autorizzazione API sicura per il backend. AgentCore 
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/): memorizza i modelli di test accettati e rifiutati con statistiche di utilizzo per l'apprendimento e il miglioramento continui. Utilizza chiavi composite (function\_target, pattern\_sk) per query a scansione zero e archiviazione di pattern specifici per la destinazione.
+ [AWS Lambda](https://aws.amazon.com/lambda/): fonte del codice funzionale per l'analisi, l'API recupera codice e configurazione. GetFunction Lo strumento supporta i runtime Python, Java Node.js, .NET e Ruby.

**Altri strumenti **
+ [Python 3.11\+ ](https://www.python.org/downloads/) — Ambiente di runtime per l'orchestrazione di applicazioni e agenti.
+ [Streamlit](https://streamlit.io/): interfaccia Web-based utente per l'autenticazione, la generazione di test, la raccolta di feedback e il monitoraggio dello stato del sistema.
+ [Boto3 ](https://docs.aws.amazon.com/boto3/latest/) — SDK AWS per Python per interagire con i servizi Lambda, Amazon Bedrock, DynamoDB e Cognito.

**Repository di codice **

Il codice per questo pattern è disponibile in Github - [ Lambda Test Event Generator. ](https://github.com/aws-samples/sample-lambda-test-event-generator)

## Best practice
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-best-practices"></a>

Questo modello implementa le seguenti best practice:
+ Utilizza politiche IAM [ con privilegi minimi ](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) per l'accesso ad AWS Lambda (sola lettura), Amazon Bedrock (invoke), Amazon DynamoDB () e Amazon Cognito (autenticazione). query/write
+ Implementa l'apprendimento di modelli specifici per obiettivi con fallback globale per una maggiore precisione dei test.
+ Abilita DynamoDB TTL per la pulizia automatica dei vecchi pattern (90 giorni) per controllare i costi di archiviazione.
+ Usa le query zero-scan con tasti compositi (function\_target, pattern\_sk) per un rapido recupero dei pattern.
+ Applica i pattern di ignoramento per escludere dall'analisi file di test, dipendenze e file non di codice.
+ Usa la suddivisione in più lingue del codice con l'analisi Abstract Syntax Tree (AST) (Python) e i pattern regex (Java, C\#, JS, Ruby).
+ Memorizza i modelli con valori effettivi (non solo con la struttura) per una vera deduplicazione.
+ Implementa il backend su Amazon Bedrock AgentCore per scalabilità senza server e infrastruttura gestita.
+ Autentica gli utenti tramite Amazon Cognito con la convalida del token JWT su ogni richiesta API.
+ Applica Amazon Bedrock Guardrails a tutte le chiamate converse () per filtrare tempestivamente gli attacchi, cancellare le informazioni personali, bloccare i dati sensibili (chiavi AWS, chiavi private, JWT) e imporre argomenti negati.
+ Pulisci i risultati delle analisi prima di restituirli agli utenti: tutti i frammenti di codice sorgente non elaborato vengono rimossi dalle risposte, assicurando che il codice sorgente Lambda non esca mai dai limiti di runtime. AgentCore 
+ Convalida tutti gli input dell'API con modelli regex e limiti di lunghezza (nome della funzione max 170 caratteri, istruzioni personalizzate max 2000 caratteri, max 50 pattern di ignoramento) per prevenire iniezioni e abusi.
+ Implementa la limitazione della frequenza per utente (5 richieste ogni 60 secondi) per prevenire l'abuso dei costi dovuto a chiamate eccessive alle API Bedrock.
+ Pulisci i messaggi di errore prima di restituirli agli utenti: i percorsi interni dei file, i dettagli dell'SDK AWS e le informazioni sull'infrastruttura non vengono mai esposti nelle risposte agli errori.

Considera le seguenti best practice aggiuntive:
+ Fornisci motivi di feedback specifici quando rifiuti i casi di test per migliorare l'accuratezza dell'apprendimento.
+ Genera test in modo iterativo (2-3 volte) per la stessa funzione per consentire al sistema di apprendere e migliorare.
+ Fornisci istruzioni personalizzate quando hai bisogno di scenari di test o formati di dati specifici.
+ Abilita IAM Access Analyzer per monitorare le autorizzazioni delle risorse e identificare gli accessi non intenzionali.
+ Inizia con piccole funzioni Lambda per comprendere il sistema prima di analizzare basi di codice di grandi dimensioni.
+ Rivedi regolarmente le policy IAM e rimuovi le autorizzazioni non utilizzate.
+ Utilizza politiche di password complesse e abilita Cognito AdvancedSecurityMode per il rilevamento delle minacce.

## Epiche
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-epics"></a>

### Prepara l'ambiente
<a name="prepare-the-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Clona il GitHub repository sul tuo sistema locale e vai alla directory del progetto:<pre>git clone https://github.com/aws-samples/sample-lambda-test-event-generator.git<br /><br />cd sample-lambda-test-event-generator</pre><br />Questo repository contiene l'applicazione Python, il CloudFormation modello e i file di configurazione. | Sviluppatore di app | 
| Configura le credenziali AWS. | Configura le tue credenziali AWS per consentire all'AWS CLI di interagire con il tuo account AWS e per consentire all'applicazione di accedere alle funzioni Lambda che desideri testare. <br />Puoi farlo usando il comando di configurazione AWS CLI:<pre>aws configure</pre><br />Quando viene richiesto, fornire le seguenti informazioni:+ **ID chiave di accesso AWS**: la tua chiave di accesso AWS<br />+ **Chiave di accesso segreta AWS**: la tua chiave di accesso segreta AWS<br />+ **Nome della regione predefinita**: la regione AWS in cui desideri distribuire le risorse (ad es.) `us-east-1`<br />+ **Formato di output predefinito**: il formato di output preferito (ad es.) `json` | Sviluppatore di app | 

### Implementa l'infrastruttura completa
<a name="deploy-the-complete-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa l'infrastruttura utilizzando CloudFormation. | 1. Implementa l'infrastruttura backend completa (ruoli DynamoDB, Cognito, IAM) utilizzando il modello fornito. CloudFormation Esegui il seguente comando nella tua CLI:<pre>aws cloudformation create-stack \<br />      --stack-name lambda-test-generator-infra \<br />      --template-body file://cloudformation/complete-infrastructure.yaml \<br />      --capabilities CAPABILITY_NAMED_IAM \<br />      --region us-east-1</pre><br />2. Attendi il completamento della distribuzione dello stack:<pre>aws cloudformation wait stack-create-complete \<br />      --stack-name lambda-test-generator-infra \<br />      --region us-east-1</pre><br />3. Recupera tutti gli output:<pre>aws cloudformation describe-stacks \<br />      --stack-name lambda-test-generator-infra \<br />      --query 'Stacks[0].Outputs' \<br />      --output table</pre>Cosa viene creato:+ Tabella DynamoDB con TTL abilitato, ripristino point-in-time e crittografia lato server. <br />+ Pool di utenti Cognito con autenticazione e-mail, AdvancedSecurityMode ENFORCED, MFA opzionale (TOTP) e creazione di utenti solo amministrativi. <br />+ Amazon Bedrock Guardrail con filtro rapido degli attacchi, redazione delle informazioni personali, filtro dei contenuti e blocco degli argomenti negati. <br />+ Ruolo di esecuzione IAM per le politiche AgentCore con privilegi minimi, tra cui bedrock: permission. ApplyGuardrail Lo stack crea tutte le risorse necessarie. Assicurati che il CloudFormation modello sia completato correttamente prima di procedere alla fase successiva. | Sviluppatore di app | 
| Esporta le variabili di configurazione. | Esporta tutti i valori dagli output CloudFormation dello stack come variabili di ambiente:<pre>export AGENTCORE_ROLE_ARN=$(aws cloudformation describe-stacks \<br />      --stack-name lambda-test-generator-infra \<br />      --query 'Stacks[0].Outputs[?OutputKey==`AgentCoreExecutionRoleArn`].OutputValue' \<br />      --output text)<br /><br />export DISCOVERY_URL=$(aws cloudformation describe-stacks \<br />      --stack-name lambda-test-generator-infra \<br />      --query 'Stacks[0].Outputs[?OutputKey==`DiscoveryUrl`].OutputValue' \<br />      --output text)<br /><br />export CLIENT_ID=$(aws cloudformation describe-stacks \<br />      --stack-name lambda-test-generator-infra \<br />      --query 'Stacks[0].Outputs[?OutputKey==`ClientId`].OutputValue' \<br />      --output text)<br /><br />export DYNAMODB_TABLE=$(aws cloudformation describe-stacks \<br />      --stack-name lambda-test-generator-infra \<br />      --query 'Stacks[0].Outputs[?OutputKey==`DynamoDBTableName`].OutputValue' \<br />      --output text)<br /><br />export COGNITO_POOL_ID=$(aws cloudformation describe-stacks \<br />      --stack-name lambda-test-generator-infra \<br />      --query 'Stacks[0].Outputs[?OutputKey==`UserPoolId`].OutputValue' \<br />      --output text)<br /><br />export BEDROCK_GUARDRAIL_ID=$(aws cloudformation describe-stacks \<br />  --stack-name lambda-test-generator-infra \<br />  --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' \<br />  --output text)<br /><br />export BEDROCK_GUARDRAIL_VERSION=$(aws cloudformation describe-stacks \<br />  --stack-name lambda-test-generator-infra \<br />  --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailVersion`].OutputValue' \<br />  --output text)</pre><br />Queste variabili vengono utilizzate nei passaggi successivi per la AgentCore configurazione e la creazione di file .env. | Amministratore AWS | 

### Configura l'ambiente applicativo e distribuiscilo AgentCore
<a name="set-up-the-application-environment-and-deploy-agentcore"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Crea un ambiente virtuale. | 1. Crea e attiva un ambiente virtuale Python per isolare le dipendenze del progetto:<pre>python3 -m venv venv<br /><br />source venv/bin/activate</pre><br />2. Installa i pacchetti Python richiesti dal file dei requisiti:<pre>pip install -r requirements.txt </pre><br />Questo installa tutte le librerie necessarie, tra cui boto3 per AWS SDK, python-dotenv per la configurazione dell'ambiente, bedrock-agentcore-runtime per l'integrazione e Streamlit per l'interfaccia utente. AgentCore L'ambiente virtuale deve essere attivato (utilizzando) ogni volta che si apre una nuova sessione di terminale per eseguire l'applicazione. `source venv/bin/activate` | Sviluppatore di app | 
| Configurazione e distribuzione. AgentCore | + Configura l' AgentCore agente:<pre>agentcore configure \<br />  --entrypoint main.py \<br />  --name lambda_test_generator \<br />  --requirements-file requirements.txt \<br />  --region us-east-1 \<br />  --execution-role $AGENTCORE_ROLE_ARN</pre><br />+ Quando richiesto:<br />1. Tipo di distribuzione: 1 (Direct Code Deploy, non è necessario Docker)<br />2. Versione Python: 2 (PYTHON\_3\_11 o seleziona la tua particolare versione di Python)<br />3. Bucket S3: premi Invio (creazione automatica)<br />4. Autorizzatore OAuth: sì<br />5. URL di scoperta: incolla il valore $DISCOVERY\_URL<br />6. ID client: incolla il valore $CLIENT\_ID<br />7. Destinatari: premi Invio (lascia vuoto)<br />8. Ambiti: premi Invio (lascia vuoto)<br />9. Reclami personalizzati: premi Invio (lascia vuoto)<br />10. Intestazioni delle richieste: sì<br />11. Intestazioni: Autorizzazione<br />12. Memoria: s (salta - usando DynamoDB)<br />+ Distribuisci l'agente:<pre>agentcore deploy \<br />  --env DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE \<br />  --env AWS_REGION=us-east-1 \<br />  --env BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID \<br />  --env BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION</pre><br />+ Ottieni l'ID AgentCore di runtime e l'endpoint:<pre>RUNTIME_ID=$(agentcore status | grep "Agent ARN:" | sed 's/.*runtime\///' | sed 's/[│ ].*//')<br />AGENTCORE_ENDPOINT="https://bedrock-agentcore-runtime.us-east-1.amazonaws.com/agents/${RUNTIME_ID}/endpoints/DEFAULT"</pre> | Sviluppatore di app | 
| Crea un file .env per lo sviluppo locale. | Crea un file .env nella directory principale del progetto con tutti i valori di configurazione:<pre>cat > .env << EOF<br />AWS_REGION=us-east-1<br />DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE<br />COGNITO_POOL_ID=$COGNITO_POOL_ID<br />COGNITO_CLIENT_ID=$CLIENT_ID<br />COGNITO_REGION=us-east-1<br />AGENTCORE_ENDPOINT=$AGENTCORE_ENDPOINT<br />BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID<br />BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION<br />EOF</pre><br />Verifica la connettività ai servizi AWS:<pre>aws dynamodb describe-table --table-name $DYNAMODB_TABLE<br />aws bedrock list-foundation-models --region us-east-1</pre><br />Entrambi i comandi dovrebbero restituire risposte corrette. Se riscontri errori di autorizzazione, verifica che le policy IAM siano configurate correttamente. | Sviluppatore di app | 

### Crea un utente Cognito
<a name="create-a-cognito-user"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un nuovo utente Cognito. | Il pool di utenti Cognito è configurato con la creazione di utenti solo come amministratore per motivi di sicurezza, quindi gli utenti non possono registrarsi automaticamente. Crea un utente tramite l'interfaccia a riga di comando di AWS utilizzando l'ID del pool di Cognito e l'ID client esportati dagli output dello stack. CloudFormation Crea un nuovo utente (sostituiscilo `user@example.com` con la tua email):<pre>aws cognito-idp admin-create-user \<br />  --user-pool-id $COGNITO_POOL_ID \<br />  --username user@example.com \<br />  --user-attributes Name=email,Value=user@example.com Name=email_verified,Value=true \<br />  --temporary-password '[PASSWORD]!' \<br />  --region us-east-1</pre><br />Imposta una password permanente (minimo 8 caratteri, deve includere lettere maiuscole, minuscole e un numero):<pre>aws cognito-idp admin-set-user-password \<br />  --user-pool-id $COGNITO_POOL_ID \<br />  --username user@example.com \<br />  --password '[PASSWORD]!' \<br />  --permanent \<br />  --region us-east-1</pre><br />Usa queste credenziali per accedere tramite l'interfaccia utente di Streamlit nel passaggio successivo. | Sviluppatore di app | 

### Genera e convalida i casi di test
<a name="generate-and-validate-test-cases"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia l'interfaccia utente Streamlit. | Avvia l'applicazione:<pre>streamlit run app.py</pre><br />L'interfaccia utente si aprirà nel browser predefinito all'indirizzo `http://localhost:8501`<br />Accedi con le credenziali create nel passaggio precedente | Sviluppatore di app | 
| Configura le opzioni di generazione | Nell'interfaccia utente, configura le seguenti opzioni:1. **Nome o ARN della funzione Lambda**: immettere l'identificatore della funzione Lambda di destinazione<br />2. **Filtro di destinazione ** (opzionale): specifica una funzione, una classe o un file su cui concentrarti (ad esempio,,) `validate_user` `UserService` `auth.py`<br />3. **Ignora i modelli ** (opzionale): aggiungi i modelli di file o cartelle da escludere, uno per riga:`tests/`- Ignora la directory dei test`*.test.js`- Ignora i file di test`mock_data/`- Ignora i dati fittizi<br />4. **Istruzioni personalizzate ** (opzionali): aggiungi requisiti di test specifici | Sviluppatore di app | 
| Genera casi di test. | Fai clic sul ** pulsante ** «Genera casi di test». Il sistema consentirà di:1. Effettua l'autenticazione AgentCore utilizzando il token Cognito JWT.<br />2. Recupera il codice Lambda da AWS.<br />3. Applica i modelli di ignoramento per escludere i file indesiderati.<br />4. Codice in blocchi che utilizza strategie specifiche della lingua.<br />5. Applica il filtro di destinazione se specificato.<br />6. Analizza il codice con Amazon Bedrock.<br />7. Interroga DynamoDB per individuare i modelli appresi.<br />8. Genera casi di test.<br />9. Convalida e classifica i casi di test. | Sviluppatore di app | 
| Rivedi i test generati. | Esamina ogni test case generato, che include:+ **Tipo**: Positivo (input validi), Negativo (input non validi) o Edge (condizioni limite)<br />+ **Descrizione**: cosa convalida il test<br />+ **Dati del test**: il payload effettivo dell'evento di test | DevOps ingegnere, sviluppatore di app | 
| Fornisci feedback. | Per ogni test case, fornisci un feedback:<br />**Per accettare un test case: **+ Fai clic sul ** pulsante ** «Accetta»<br />**Per rifiutare un test case: **1. Fai clic sul pulsante ** «Rifiuta» **<br />2. Seleziona un motivo del rifiuto dal menu a discesa o aggiungi un motivo personalizzato<br />3. Fai clic sul pulsante ** «Invia rifiuto» ** | Tecnico collaudatore | 
| Salva il feedback in memoria. | Dopo aver esaminato tutti i casi di test:1. Fai clic sul ** pulsante ** «Salva tutti i feedback in memoria»<br />2. Il sistema verifica che tutti i casi respinti abbiano motivato<br />3. Il feedback viene inviato all' AgentCore API che viene indirizzata al Validator Agent.<br />4. Il feedback viene archiviato in batch in DynamoDB con pattern hash per la deduplicazione.<br />5. Visualizza il riepilogo accepted/rejected del feedback che mostra i conteggi | Tecnico collaudatore | 
| Iterate per migliorare. | Genera test altre 2-3 volte per la stessa funzione per migliorare la qualità:+ Il sistema recupera i pattern appresi da DynamoDB<br />+ La qualità migliora ad ogni iterazione in base al tuo feedback<br />+ Utilizza il filtro target per test mirati su componenti specifici<br />+ Usa i modelli di ignora per escludere codice irrilevante e migliorare la qualità della generazioneIl sistema di apprendimento diventa più efficace con un uso ripetuto. Ogni ciclo di feedback aiuta l'IA a comprendere le tue preferenze di test e a generare casi di test più pertinenti per le tue funzioni Lambda. | Sviluppatore di app | 

### Richiamo diretto all'API (opzionale)
<a name="direct-api-invocation-optional"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Richiama direttamente AgentCore l'API. | Per l'automazione e l'integrazione, richiama il AgentCore backend direttamente utilizzando le chiamate API con l'autenticazione Cognito.<br />Ottieni un token Cognito:<br />`TOKEN=$(agentcore identity get-cognito-inbound-token)`<br />Richiama la generazione del test:<pre>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"] }'</pre><br />O usando curl:<pre>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}'</pre> | Sviluppatore di app | 

### Monitora e ottimizza
<a name="monitor-and-optimize"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Monitora i modelli DynamoDB e tieni traccia dei costi. | 1. Interroga la tabella DynamoDB per esaminare i modelli accettati e capire cosa ha appreso il sistema:<pre>aws dynamodb query \<br />  --table-name $DYNAMODB_TABLE \<br />  --key-condition-expression "function_target = :ft AND begins_with(pattern_sk, :prefix)" \<br />  --expression-attribute-values '{":ft":{"S":"my-function#GLOBAL"},":prefix":{"S":"FEEDBACK#accepted"}}'<br /></pre><br />`my-function`Sostituiscila con il nome effettivo della tua funzione Lambda per visualizzare i modelli specifici di quella funzione.<br />2. Tieni traccia del consumo di risorse per ottimizzare i costi:**AWS Cost Explorer**: monitora la spesa complessiva per i servizi Bedrock, DynamoDB e Lambda**Amazon Bedrock**: esamina l'utilizzo dei token e le metriche relative alle chiamate API nella console Bedrock**DynamoDB**: controlla le metriche delle richieste, la capacità consumata e l'utilizzo dello storage.**AgentCore: ** Monitora le metriche di runtime degli agenti e il conteggio delle chiamate in CloudWatch<br />3. Usa CloudWatch i log per diagnosticare i problemi e monitorare il comportamento del sistema:**AgentCore registri: ** <pre>aws logs tail /aws/bedrock-agentcore/runtimes/lambda_test_generator --follow</pre>**Errori dell'applicazione**: esamina gli errori e le eccezioni a livello di applicazione**Risposte API Bedrock**: analizza le risposte del modello AI e il consumo di token**Operazioni DynamoDB**: monitora i read/write modelli e gli eventi di limitazioneIl monitoraggio regolare aiuta a identificare le opportunità di ottimizzazione dei costi e garantisce che il sistema continui a imparare in modo efficace. La configurazione TTL sulla tabella DynamoDB elimina automaticamente i vecchi schemi, aiutando a gestire i costi di storage nel tempo. | Amministratore AWS | 

### Pulizia
<a name="cleanup"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare le risorse distribuite. | Per rimuovere tutte le risorse distribuite:<br />Eliminare l' AgentCore agente:<pre>agentcore destroy</pre><br />Elimina lo CloudFormation stack (elimina la tabella DynamoDB, il pool di utenti Cognito e il ruolo IAM):<pre>aws cloudformation delete-stack <br />\ --stack-name lambda-test-generator-infra <br />\ --region us-east-1</pre> | Amministratore AWS | 

## Risoluzione dei problemi
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errore «Accesso negato» durante il recupero del codice Lambda | + Verifica che le autorizzazioni IAM includano `lambda:GetFunction` e `lambda:GetFunctionConfiguration` per la funzione Lambda di destinazione<br />+ Controlla le tue credenziali AWS CLI<pre>aws sts get-caller-identity</pre> | 
| «Errori di scrittura in DynamoDB» | + Verifica che il nome della tabella nel `.env` file corrisponda al nome della tabella distribuita<br />+ Controlla gli CloudFormation output:<pre>aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey=DynamoDBTableName].OutputValue' --output text</pre><br />+ Oppure verifica direttamente:<pre>aws dynamodb describe-table --table-name $DYNAMODB_TABLE</pre> | 
| Nessun caso di test generato | **Possibili cause e soluzioni: **+ **Il codice della funzione Lambda non è accessibile**: controlla le autorizzazioni IAM per l'accesso Lambda<br />+ **Il pacchetto di distribuzione Lambda contiene solo codice compilato**: i file senza `.dll` file sorgente non possono essere `.class` analizzati<br />+ **Tutti i file filtrati in base ai modelli di ignoramento**: rivedi e modifica i modelli di ignoramento<br />+ **Le istruzioni personalizzate sono troppo restrittive**: semplifica o rimuovi le istruzioni personalizzate<br />+ Verifica che la funzione Lambda esista:<pre>aws lambda get-function --function-name <name></pre> | 
| Java/C\# Lambda mostra «Nessun codice sorgente trovato» | Java e C\# Lambdas richiedono i file sorgente nel pacchetto di distribuzione:<br />**Java (Maven): **1. Aggiungi la configurazione di inclusione dei sorgenti a `pom.xml` (vedi) `docs/JAVA_SETUP.md`<br />2. Ricostruisci e ridistribuisci la tua funzione Lambda<br />**C\# (.NET): **1. Includi `.cs` file nella configurazione della build (vedi`docs/CSHARP_SETUP.md`)<br />2. Ricostruisci e ridistribuisci la tua funzione Lambda | 
| Errori di scrittura in DynamoDB | + Controlla le autorizzazioni di DynamoDB e lo stato della tabella:+ Verifica che la politica IAM includa e `dynamodb:PutItem` `dynamodb:BatchWriteItem`<br />+ Controlla lo stato della tabella: <pre>aws dynamodb describe-table --table-name $DYNAMODB_TABLE</pre><br />Il nome della tabella include il suffisso del nome dello stack. Usa il valore dei tuoi CloudFormation output o del file .env.+ Abilita CloudWatch i log per DynamoDB per visualizzare messaggi di errore dettagliati | 
| Generazione lenta dei test | Ottimizza la velocità di generazione:1. **Usa il filtro target ** per concentrarti su funzioni specifiche (50-70% più veloce)<br />2. **Aggiungi pattern di ignoramento ** per escludere file di test, dipendenze e codice irrilevante<br />3. **Riduci le dimensioni del codice ** filtrando i file non necessari prima dell'analisi | 
| AgentCore: «Agente non trovato» | Verifica che l'agente sia installato:<pre>agentcore status<br /><br />agentcore configure list</pre> | 
| AgentCore: «Autorizzazione negata» in fase di esecuzione | Verifica che il ruolo di esecuzione abbia le politiche corrette:<pre>aws iam list-role-policies --role-name agentcore-exec-lambda-test-generator-infra</pre> | 
| Cognito: «Nome utente o password non validi» | Verifica che le tue credenziali siano corrette. Puoi creare un nuovo utente utilizzando il flusso «Crea account» dell'interfaccia utente di Streamlit o tramite l'interfaccia a riga di comando di AWS:<pre>aws cognito-idp admin-create-user --user-pool-id <POOL_ID> --username <username> --temporary-password '<password>' --region us-east-1</pre><pre>aws cognito-idp admin-set-user-password --user-pool-id <POOL_ID> --username <username> --password '<password>' --permanent --region us-east-1</pre> | 
| Avviso «Bedrock Guardrail non configurato» nei log | Le variabili di verifica `BEDROCK_GUARDRAIL_ID` e di `BEDROCK_GUARDRAIL_VERSION` ambiente sono impostate nella AgentCore distribuzione. <br />Controlla gli CloudFormation output: <pre>aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' --output text</pre> | 
| Errore «Limite di frequenza superato» | Il sistema limita a 5 richieste ogni 60 secondi per utente. Attendi il tempo indicato prima di riprovare. Per l'uso in produzione con esigenze di produttività più elevate, aggiustate `RATE_LIMIT_MAX_REQUESTS` e `RATE_LIMIT_WINDOW` costanti in main.py. | 

## Risorse correlate
<a name="automate-lambda-test-event-generation-using-bedrock-agentcore-resources"></a>

**Documentazione AWS**
+  [Guida per l’utente di Amazon Bedrock](https://docs.aws.amazon.com/bedrock/)
+  [Riferimento all'API Amazon Bedrock — InvokeModel ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)
+ [Guida per gli sviluppatori di Amazon Bedrock AgentCore ](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html)
+ [Guida per sviluppatori AWS Lambda: test delle funzioni Lambda ](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html)
+  [Guida per sviluppatori Amazon DynamoDB: best practice ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html)
+  [Time to Live (TTL) di DynamoDB ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html)
+  [Guida per l'utente di AWS CloudFormation ](https://docs.aws.amazon.com/cloudformation)
+ [Guida per gli sviluppatori di Amazon Cognito ](https://docs.aws.amazon.com/cognito/)
+ [Infrastruttura in codice con CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [Guida per l'utente di Amazon Bedrock Guardrails ](https://aws.amazon.com/bedrock/guardrails/)