Esegui comandi shell nelle sessioni AgentCore di Runtime
L'InvokeAgentRuntimeCommandoperazione consente di eseguire i comandi della shell direttamente all'interno di una sessione AgentCore di Runtime in esecuzione e di trasmettere nuovamente l'output HTTP/2. I comandi vengono eseguiti nello stesso contenitore, filesystem e ambiente dell'agente, la stessa sessione utilizzata da. InvokeAgentRuntime Ciò abilita flussi di lavoro in cui l'applicazione utilizza l'agente per attività di ragionamento e comandi per operazioni deterministiche come l'esecuzione di test, le operazioni git o la configurazione dell'ambiente.
Per chiamareInvokeAgentRuntimeCommand, sono necessarie le autorizzazioni. bedrock-agentcore:InvokeAgentRuntimeCommand
Come funziona
InvokeAgentRuntimeCommandesegue un comando shell all'interno del contenitore di una sessione AgentCore Runtime attiva e restituisce l'output.
Stesso agente, stessa sessione
InvokeAgentRuntimeCommandopera sullo stesso runtime e sulla stessa sessione dell'agente diInvokeAgentRuntime. Non si creano risorse separate. L'agente con cui hai distribuito CreateAgentRuntime accetta sia le chiamate degli agenti che l'esecuzione dei comandi in qualsiasi sessione attiva.
Nota
Per impostazione predefinita, il AgentCore Runtime MicroVM non include strumenti di sviluppo come gitnpm, o runtime linguistici. Tutti gli strumenti da cui dipendono i comandi devono essere inclusi nell'immagine del contenitore (tramite il Dockerfile) o installati dinamicamente in fase di esecuzione.
La risposta è un flusso di tre tipi di eventi:
| Event | Quando | Contiene |
|---|---|---|
|
|
Primo pezzo |
Conferma l'avvio del comando |
|
|
Durante l'esecuzione |
Output |
|
|
Ultimo pezzo |
|
Flussi di output in tempo reale. I risultati vengono visualizzati man mano che vengono eseguiti, non dopo che sono terminati.
Prerequisiti
-
Autorizzazione IAM
bedrock-agentcore:InvokeAgentRuntimeCommand -
Un ARN AgentCore di endpoint Runtime valido
Nota
Gli agenti creati dopo il 17 marzo 2026 supportano automaticamente l'esecuzione dei comandi. Se l'agente è stato distribuito prima di questa data, è necessario ridistribuirlo per aggiornare il runtime dell'agente.
Esegui un comando
Esempio
Esempio di flusso di lavoro dell'agente di codifica
Uno schema comune viene utilizzato InvokeAgentRuntime per il ragionamento e InvokeAgentRuntimeCommand per le operazioni deterministiche nella stessa sessione.
Esempio di flusso di lavoro dell'agente End-to-end di codifica
import boto3 import json client = boto3.client('bedrock-agentcore', region_name='us-west-2') AGENT_ARN = 'arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/my-agent' SESSION_ID = 'session-id-at-least-33-characters-long' def run_command(command, timeout=60): """Helper to run a command and return the exit code.""" response = client.invoke_agent_runtime_command( agentRuntimeArn=AGENT_ARN, runtimeSessionId=SESSION_ID, contentType='application/json', accept='application/vnd.amazon.eventstream', body={'command': command, 'timeout': timeout} ) for event in response.get('stream', []): if 'chunk' in event and 'contentStop' in event['chunk']: return event['chunk']['contentStop'].get('exitCode') return None # Step 1: Invoke the agent to analyze and write a fix response = client.invoke_agent_runtime( agentRuntimeArn=AGENT_ARN, runtimeSessionId=SESSION_ID, payload=json.dumps({"prompt": "Read JIRA-1234 and implement the fix in /workspace"}).encode() ) # Process agent response... # Step 2: Run tests deterministically exit_code = run_command('/bin/bash -c "cd /workspace && npm test"', timeout=300) # Step 3: If tests pass, commit and push if exit_code == 0: run_command('/bin/bash -c "cd /workspace && git checkout -b fix/JIRA-1234"') run_command('/bin/bash -c "cd /workspace && git add -A && git commit -m \'Fix JIRA-1234\'"') run_command('/bin/bash -c "cd /workspace && git push origin fix/JIRA-1234"')
L'agente scrive il codice. La piattaforma esegue i comandi. Ognuno fa ciò che sa fare meglio.
Casi di utilizzo comune
- Esecuzione di suite di test
-
Dopo che l'agente ha scritto il codice, esegui la suite di test del progetto come comando. La risposta in streaming consente di rilevare tempestivamente gli errori e di inviare un output di errore specifico all'agente per l'iterazione.
/bin/bash -c "cd /workspace && npm test 2>&1" - Operazioni Git
-
La ramificazione, il commit e il push sono operazioni deterministiche. Eseguile come comandi dopo che l'agente ha completato il suo lavoro, mantenendo la logica di controllo della versione fuori dal LLM.
/bin/bash -c "cd /workspace && git add -A && git commit -m 'Fix issue'" - Installazione delle dipendenze
-
Avvia l'ambiente prima di richiamare i repository agent -clone, installa i pacchetti, configura gli strumenti di compilazione. Questa preparazione viene eseguita più velocemente e in modo più affidabile come comandi diretti.
/bin/bash -c "pip install -r requirements.txt" - Compila e compila
-
Compila i passaggi e la generazione di risorse, qualsiasi cosa con un comando noto che dovrebbe essere eseguito esattamente come specificato.
/bin/bash -c "cd /workspace && cargo build --release" - Linting e validazione
-
Esegui i controlli di qualità del codice come porta di convalida dopo che l'agente ha scritto il codice, prima del commit.
/bin/bash -c "cd /workspace && npx eslint src/ --format json" - Ispezione ambientale
-
Controlla lo stato di runtime, i pacchetti installati, gli strumenti disponibili, utili per il debug degli agenti.
/bin/bash -c "python --version && node --version && git --version" - Operazioni sui dati
-
Recupera set di dati, carica risultati, esegui trasformazioni di dati: operazioni di rete e di calcolo che vengono eseguite più velocemente come comandi diretti.
/bin/bash -c "aws s3 cp s3://my-bucket/data.csv /workspace/"
Principali scelte di progettazione
- One-shot, esecuzione non interattiva
-
Ogni comando genera un nuovo processo bash, viene eseguito fino al completamento (o timeout) e restituisce. Non esiste una sessione di shell persistente tra i comandi. Ciò corrisponde al modo in cui i framework degli agenti utilizzano l'esecuzione dei comandi: creano un comando, lo eseguono, leggono l'output, decidono cosa fare dopo.
- Risposta in streaming su HTTP/2
-
L'output arriva così come viene prodotto, non viene memorizzato nel buffer fino al completamento. A
npm testche richiede due minuti, trasmette i risultati in tempo reale. L'applicazione è in grado di rilevare un errore nei primi secondi e di annullarlo in anticipo anziché attendere l'esecuzione completa. - Isolamento del container
-
I comandi vengono eseguiti all'interno dello stesso contenitore del codice dell'agente. Vedono lo stesso filesystem, le stesse variabili di ambiente e gli stessi pacchetti installati. Un file in cui l'agente ha scritto
/workspace/fix.pyè immediatamente visibile all'esecuzione di un comando.cat /workspace/fix.py - Non-blocking al runtime
-
L'esecuzione dei comandi non blocca le chiamate agli agenti. È possibile richiamare l'agente ed eseguire comandi contemporaneamente nella stessa sessione. La piattaforma gestisce la concorrenza.
- Senza stato tra i comandi
-
Ogni comando inizia da zero: nessuna cronologia della shell, nessuna modifica della variabile di ambiente rispetto ai comandi precedenti viene trasferita. Se hai bisogno di state, codificalo nel comando stesso:.
cd /workspace && export NODE_ENV=test && npm test
Considerazioni relative alla sicurezza
Suggerimento
Per una visione consolidata di tutti i consigli sulla sicurezza di Runtime, consulta le migliori pratiche di sicurezza per AgentCore Runtime.
Importante
In base al modello di responsabilità AWS condivisa, sei responsabile della sicurezza dei comandi che esegui nelle sessioni di AgentCore Runtime. AWS fornisce l'infrastruttura sicura e l'isolamento a livello di MicroVM. Sei responsabile dei comandi che esegui, dei dati che elabori e dei controlli di accesso che configuri.
Il limite di sicurezza per l'esecuzione dei comandi è la microVM. Ogni sessione AgentCore di Runtime viene eseguita in una microVM isolata con kernel, memoria e filesystem propri. I comandi eseguiti non possono accedere ai carichi di lavoro di altri clienti o sfuggire ai limiti della VM. Tuttavia, all'interno della macchina virtuale, i comandi hanno pieno accesso al filesystem del contenitore e a tutte le credenziali o i segreti configurati.
Controllo con log CloudWatch
AgentCore Runtime invia l'ID della richiesta e il comando di input al gruppo di log Amazon CloudWatch Logs del tuo agente. Puoi utilizzare questi log per monitorare l'attività dei comandi e mantenere una traccia di controllo dei comandi eseguiti nelle tue sessioni. L'output di esecuzione del comando (stdout e stderr) viene trasmesso in streaming all'applicazione e non viene registrato dal servizio.
Controllo con CloudTrail
AWS CloudTrail registra le chiamate InvokeAgentRuntimeCommand API nel tuo account. Ogni record include metadati come l'identità del chiamante, il timestamp, l'indirizzo IP di origine e lo stato della risposta. CloudTrail non registra il payload della richiesta o della risposta. Viene utilizzato CloudTrail per verificare chi ha eseguito i comandi e quando, quindi correla con i log di CloudWatch Logs utilizzando l'ID della richiesta per vedere quale comando è stato eseguito.
Per i carichi di lavoro sensibili, prendi in considerazione l'implementazione di controlli aggiuntivi come:
-
Utilizzo delle policy IAM per limitare le chiamate da parte dei principali
InvokeAgentRuntimeCommand -
Configurazione degli endpoint VPC per mantenere il traffico all'interno della rete
-
Configurazione di CloudWatch Logs, filtri metrici e allarmi per rilevare schemi di comando imprevisti
-
Rivedere regolarmente CloudTrail i log per verificare la presenza di tentativi di accesso non autorizzati
Gestione degli errori
Quando si utilizza l'InvokeAgentRuntimeCommandoperazione, è possibile che si verifichino i seguenti errori:
- ValidationException
-
Si verifica quando i parametri della richiesta non sono validi. Verifica che l'ARN, l'ID di sessione e il comando dell'agente siano formattati correttamente. Il comando deve essere compreso tra 1 byte e 64 KB, il timeout deve essere compreso tra 1 e 3600 secondi e l'ID di sessione deve contenere almeno 33 caratteri.
- ResourceNotFoundException
-
Si verifica quando non è possibile trovare il runtime o la sessione dell'agente specificato. Verificare che l'ARN dell'agente sia corretto e che la sessione sia attiva.
- AccessDeniedException
-
Si verifica quando non si dispone delle autorizzazioni necessarie. Assicurati che la tua policy IAM includa l'
bedrock-agentcore:InvokeAgentRuntimeCommandautorizzazione. - ThrottlingException
-
Si verifica quando si supera il limite di frequenza di richiesta di 25 TPS. Implementa la logica esponenziale di backoff e riprova nella tua applicazione.
Un comando che viene completato con un codice di uscita diverso da zero non è un errore API. Controlla l'exitCodecontentStopevento per determinare se il comando stesso ha avuto successo. Un status of TIMED_OUT indica che il comando ha superato il timeout specificato.
Best practice
Segui queste best practice per l'utilizzo dell'InvokeAgentRuntimeCommandoperazione:
-
Da utilizzare
InvokeAgentRuntimeCommandper operazioni deterministiche (tests, git, build) eInvokeAgentRuntimeper attività di ragionamento. Non indirizzate le operazioni deterministiche attraverso l'LLM. -
Includi tutti gli strumenti di sviluppo da cui dipendono i tuoi comandi (ad esempio
gitnpm, o i runtime del linguaggio) nell'immagine del contenitore tramite il tuo Dockerfile. -
Controlla sempre l'
exitCodecontentStopevento per determinare se il comando ha avuto successo. -
Imposta i timeout appropriati. Una suite di test potrebbe richiedere 5 minuti, mentre una
git pushpotrebbe richiedere solo 30 secondi. -
Elabora l'output dello streaming in modo incrementale per rilevare tempestivamente i guasti. È possibile annullare un comando a esecuzione prolungata anziché attendere il completamento.
-
Codifica lo stato nel comando stesso usando il
&&concatenamento (ad esempio,cd /workspace && export NODE_ENV=test && npm test), poiché ogni comando avvia un nuovo processo bash. -
Utilizzate gli UUID per gli ID di sessione per soddisfare il requisito minimo di 33 caratteri (ad esempio,).
12345678-1234-1234-1234-123456789012