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à.
Conchiglie interattive (terminali)
L'InvokeAgentRuntimeCommandShelloperazione apre una sessione terminale persistente e interattiva all'interno di una sessione di AgentCore Runtime in esecuzione. WebSocket A differenza dell'esecuzione immediata dei comandi, le sessioni di shell mantengono lo stato: le variabili di ambiente, la directory di lavoro e la cronologia dei comandi vengono trasferite tra gli input. Ciò consente il debug, l'ispezione dell'ambiente e la creazione di esperienze terminali nell'applicazione.
Per chiamareInvokeAgentRuntimeCommandShell, sono necessarie bedrock-agentcore:InvokeAgentRuntimeCommandShell le autorizzazioni.
Come funziona
InvokeAgentRuntimeCommandShellstabilisce una WebSocket connessione a un processo shell interattivo in esecuzione all'interno della sessione dell'agente. La connessione utilizza frame binari per trasmettere l'input e l'output del terminale in entrambe le direzioni.
Stesso agente, stessa sessione
InvokeAgentRuntimeCommandShellopera sullo stesso runtime dell'agente di InvokeAgentRuntime eInvokeAgentRuntimeCommand. Non si creano risorse separate. L'agente con cui hai eseguito la distribuzione CreateAgentRuntime accetta connessioni shell in qualsiasi sessione attiva.
Nota
È possibile passare session_id a una sessione di runtime specifica. Se omesso, viene creata una nuova sessione per ogni connessione. Per utilizzare la riconnessione, è necessario archiviare e riutilizzare entrambi e. session_id shellId
La connessione supporta:
| Funzionalità | Description |
|---|---|
|
Stato persistente |
Le variabili di ambiente, la directory di lavoro e la cronologia dei comandi vengono trasferite tra gli input all'interno della stessa sessione. |
|
Riconnessione |
Fornire la stessa |
|
Conchiglie multiple simultanee |
Fino a 10 sessioni di shell attive (terminali) per runtime. Le nuove connessioni vengono rifiutate quando sono esaurite. |
Prerequisiti
-
Autorizzazione IAM
bedrock-agentcore:InvokeAgentRuntimeCommandShell -
Un endpoint ARN AgentCore di runtime valido con un runtime in stato READY
Nota
Gli agenti creati dopo il 5 giugno 2026 supportano automaticamente le shell interattive (terminali). Se l'agente è stato installato prima di questa data, è necessario ridistribuirlo per aggiornare il runtime dell'agente.
Utilizzo della CLI AgentCore
Per le istruzioni di installazione e configurazione, consulta Get started with the AgentCore CLI.
La CLI offre un'esperienza terminale integrata con. agentcore exec
agentcore exec --it
Per connettersi a un runtime specifico:
agentcore exec --it --runtime <runtime-arn> --region us-west-2
Ctrl+]Premi per staccarti da un guscio senza chiuderlo. La CLI stampa un comando di riconnessione:
agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>
Per i comandi one-shot, ometti: --it
agentcore exec "ls -la /tmp"
Per un output leggibile dalla macchina, usa la modalità JSON:
agentcore exec --json "echo hello" # Output: {"success":true,"exitCode":0,"stdout":"hello\n","stderr":""}
Per ulteriori esempi di CLI, consulta gli esempi su. AgentCore
Utilizzo dell'SDK AgentCore
Installa l'SDK Python:
pip install bedrock-agentcore
Esempio
Riconnessione
Un modello comune viene utilizzato per riconnettersi shellId a una shell dopo una disconnessione, preservando tutto lo stato della sessione.
import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient async def main(): client = AgentCoreRuntimeClient(region="us-west-2") runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" session_id = "my-session-0000000000000000000000" shell_id = "my-shell" shell = await client.open_shell( runtime_arn, session_id=session_id, shell_id=shell_id, ).__aenter__() print(f"connected (reconnected={shell.reconnected})") await shell.send("export GREETING='hello'\n") await asyncio.sleep(1) async with client.open_shell( runtime_arn, session_id=session_id, shell_id=shell_id, ) as shell2: print(f"reconnected (reconnected={shell2.reconnected})") assert shell2.reconnected if __name__ == "__main__": asyncio.run(main())
Auto-reconnect
L'SDK può anche riconnettersi automaticamente quando la connessione si interrompe. WebSocket Usa ReconnectConfig per abilitare questo:
import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, ReconnectConfig, ShellChannel async def on_reconnect(reconnected: bool): print(f"Reconnected: {reconnected}") async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" shell_id = "my-persistent-shell" config = ReconnectConfig(max_retries=5, base_delay=0.5, on_reconnect=on_reconnect) client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, shell_id=shell_id, reconnect_config=config) as shell: # If the connection drops, the SDK retries automatically await shell.send("long-running-command\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") asyncio.run(main())
Per ulteriori esempi di SDK, consulta gli AgentCore esempi
Casi di utilizzo comune
- Debug interattivo
-
Aprite una shell per controllare l'ambiente di runtime dell'agente: controllate i pacchetti installati, leggete i file di log, esaminate il filesystem o testate i comandi prima di aggiungerli al codice dell'agente.
python --version && pip list | head -20 - Ispezione dell'ambiente
-
Verifica le variabili di ambiente, la connettività di rete, gli strumenti disponibili e lo stato del file system. Utile per diagnosticare i guasti degli agenti o convalidare la configurazione di distribuzione.
env | grep AWS && curl -s http://169.254.169.254/latest/meta-data/ - Accesso al terminale dell'agente di codifica
-
Gli agenti di codifica AI utilizzano shell interattive (terminali) come ambiente di esecuzione. Quando un agente di codifica deve eseguire codice, installare pacchetti o eseguire test, apre una sessione di shell su AgentCore Runtime ed esegue i comandi direttamente, nello stesso modo in cui uno sviluppatore utilizzerebbe un terminale. Ad esempio, Claude Code, Amazon Kiro e OpenAI Codex si connettono ciascuno a una sessione di shell in cui possono scrivere codice in modo iterativo, eseguirlo, osservare l'output e correggere gli errori in un ciclo. Lo stato persistente significa che l'agente può eseguire una sequenza di comandi senza perdere il contesto tra i passaggi.
# A coding agent opens a shell and iterates on code async with client.open_shell(runtime_arn, shell_id="agent-workspace") as shell: await shell.send("cd /workspace && git clone https://github.com/user/repo.git\n") await shell.send("cd repo && pip install -r requirements.txt\n") await shell.send("python -m pytest tests/ -v\n") # Agent reads test output, fixes failures, re-runs — all in the same shell - Long-running processi
-
Avvia processi che sopravvivono a una singola richiesta HTTP. Usa la riconnessione per verificare lo stato di avanzamento o fornire input aggiuntivi nel tempo.
nohup python train.py > /tmp/train.log 2>&1 &
Scelte di progettazione chiave
- Sessioni interattive persistenti
-
Ogni connessione è associata a un processo shell di lunga durata. È possibile inviare più comandi senza ristabilire la connessione e lo stato accumulato dai comandi precedenti (variabili esportate,
cdmodifiche) è disponibile per quelli successivi. - Framing binario finito WebSocket
-
I/O Il terminale viene trasmesso in streaming come frame binari WebSocket . Questo supporta sequenze di controllo del terminale non elaborate, colori, movimenti del cursore e applicazioni a schermo intero senza sovraccarico di codifica.
- Riconnessione con replay in uscita
-
Quando ci si riconnette utilizzando lo stesso
shellId, il servizio riproduce fino a 256 KB dell'output recente. Ciò consente di ripristinare le interruzioni della rete senza perdere il contesto. Il processo shell continua a funzionare durante la disconnessione. - Limite di sessione
-
Quando 10 sessioni di shell (terminali) sono già aperte in un runtime, le nuove connessioni vengono rifiutate con un errore. È necessario chiudere una sessione esistente prima di aprirne una nuova.
Considerazioni relative alla sicurezza
Suggerimento
Per una visione consolidata di tutti i consigli di sicurezza di Runtime, consulta le best practice di sicurezza per AgentCore Runtime.
Importante
In base al modello di responsabilità AWS condivisa, sei responsabile dei comandi eseguiti 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 le sessioni di shell (terminali) è la MicroVM. Ogni sessione AgentCore di Runtime viene eseguita in una MicroVM isolata con kernel, memoria e file system propri. Le sessioni Shell non possono accedere ai carichi di lavoro di altri clienti o sfuggire ai confini della VM. Tuttavia, all'interno della tua VM, i comandi della shell hanno pieno accesso al filesystem del contenitore e a tutte le credenziali o i segreti che hai configurato.
Controllo con i log CloudWatch
AgentCore Runtime invia l'ID della richiesta e i metadati di connessione al gruppo di CloudWatch log Amazon Logs del tuo agente. Puoi utilizzare questi log per monitorare l'attività di connessione alla shell e mantenere un audit trail. Il I/O contenuto del terminale (stdin/stdout) viene trasmesso in streaming al client e non viene registrato dal servizio.
Revisione con CloudTrail
AWS CloudTrail registra le chiamate InvokeAgentRuntimeCommandShell 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 aperto le sessioni di shell e quando, quindi esegue la correlazione con CloudWatch i log utilizzando l'ID della richiesta per i dettagli della connessione.
Per carichi di lavoro sensibili, prendi in considerazione l'implementazione di controlli aggiuntivi come:
-
Utilizzo delle policy IAM per limitare i responsabili che possono chiamare
InvokeAgentRuntimeCommandShell -
Configurazione degli endpoint VPC per mantenere il traffico all'interno della rete
-
Impostazione dei filtri metrici e degli allarmi dei CloudWatch log per rilevare schemi di connessione imprevisti
-
Esame regolare CloudTrail dei log per individuare eventuali tentativi di accesso non autorizzati
Gestione degli errori
Quando si stabilisce una connessione con una sessione shell, è possibile che si verifichino i seguenti errori durante l' WebSocket aggiornamento:
- ValidationException
-
Si verifica quando i parametri della richiesta non sono validi. Ciò può verificarsi se l'ID di sessione è inferiore a 33 caratteri, la funzionalità non è abilitata nell'area di destinazione o l'agente non è in stato READY.
- AccessDeniedException
-
Si verifica quando non si dispone delle autorizzazioni necessarie. Assicurati che la tua politica IAM includa l'
bedrock-agentcore:InvokeAgentRuntimeCommandShellautorizzazione. - ResourceNotFoundException
-
Si verifica quando non è possibile trovare il runtime dell'agente specificato. Verificare che l'ARN di runtime sia corretto.
- RuntimeClientError (424)
-
Si verifica in diversi scenari: (1) Raggiunto il numero massimo di sessioni di shell simultanee (terminali) (10 aperte): chiusura di una sessione esistente e riprova. (2) Formato dell'ID shell non valido: deve contenere da 1 a 128 caratteri alfanumerici, trattini bassi o trattini. (3) Runtime irraggiungibile: riprova dopo il backoff. Analizza il campo
errorJSON del corpo della risposta per distinguere le cause. - ThrottlingException
-
Si verifica quando si supera il limite di velocità dell'API. Implementa la logica esponenziale di backoff e retry.
- ConflictException
-
Un'altra connessione afferma la stessa cosa contemporaneamente.
shellIdRiprova dopo 1 secondo. Si tratta di una condizione di gara ristretta (non persistente) che si risolve immediatamente dopo un nuovo tentativo. - RetryableConflictException (409)
-
Si verifica quando si apre una connessione a una sessione di shell mentre il servizio esegue il provisioning o interrompe la sessione di destinazione. Il messaggio è.
Session operation in progress, please retryQuesta condizione è transitoria e riprovabile. La finestra è breve e le sessioni già in esecuzione non sono interessate. Riprova con un breve backoff esponenziale. PoichéInvokeAgentRuntimeCommandShellsi tratta di un' WebSocket API, gli AWS SDK non la riprovano automaticamente. Riprova tu stesso.
Una volta effettuata la connessione, i seguenti codici di chiusura indicano il motivo per cui una connessione è stata interrotta:
| Codice | Significato | Azione del cliente |
|---|---|---|
|
|
Chiusura normale: la shell è uscita correttamente o si è disconnessa correttamente |
Display «disconnesso». Terminazione normale. |
|
|
Andata via: distribuzione o spegnimento del server |
Auto-reconnect con memorizzato. |
|
|
Dati non supportati: inviati dopo 5 frame di testo consecutivi (protocollo solo binario) |
NON effettuare la riconnessione automatica. Passa ai frame binari. |
|
|
Chiusura anomala: sintetizzata localmente quando non viene ricevuto alcun frame chiuso (morte della rete, TCP RST) |
Auto-reconnect con |
|
|
Violazione delle norme: connessione TTL scaduta (1 ora), limite di frame rate superato (250 frames/sec) o overflow del buffer di scrittura |
Auto-reconnect per la scadenza del TTL (nuovo TTL alla riconnessione). Per il limite di velocità: disattiva, quindi riconnetti. |
|
|
Messaggio troppo grande: il payload del frame ha superato i 64 KB |
Riduci la dimensione del frame (blocco a <64 KB), quindi riconnetti. La sessione è ancora attiva. |
|
|
Errore del server: errore interno imprevisto |
Riprova con il backoff. |
|
|
Sostituito: un altro client connesso allo stesso |
NON riconnettersi automaticamente. Visualizza «sessione collegata da un altro client». |
Best practice
Segui queste best practice quando usiInvokeAgentRuntimeCommandShell:
-
Utilizza un codice univoco
shellId(ad esempio un UUID) per ogni sessione logica per abilitare la riconnessione. ArchiviateloshellIdsul lato client. -
Utilizzalo
ReconnectConfignell'SDK per gestire automaticamente le interruzioni transitorie della rete senza logica di riconnessione manuale. -
Leggi prontamente i frame di output. Se il client rimane indietro, il buffer di scrittura del server si riempie e la connessione si chiude con il codice.
1008 -
Per input di grandi dimensioni (ad esempio incollare un file), suddividete il contenuto in blocchi inferiori a 64 KB per fotogramma per evitare la chiusura del codice.
1009 -
Imposta i timeout di connessione appropriati. La durata massima della connessione è di 1 ora: riconnettiti alla stessa
shellIdper continuare oltre. -
Al termine, chiudi le sessioni in modo esplicito. Le sessioni separate vengono conteggiate ai fini del limite di 10 sessioni.
Quote e limiti
| Limite | Valore | Description |
|---|---|---|
|
Dimensione massima del payload del frame |
64 KB |
I frame che superano questo limite generano un codice chiuso. |
|
Frequenza fotogrammi |
250 frames/sec |
Il superamento di questo valore attiva la chiusura del codice. |
|
Durata massima di una connessione |
1 ora |
La connessione si chiude con un codice. |
|
Sessioni di shell simultanee (terminali) per runtime |
10 |
Le nuove connessioni vengono rifiutate se sono già aperte 10 sessioni. Chiudi una sessione esistente e riprova. |
|
Buffer di riconnessione |
256 KB |
Uscita massima riprodotta quando ci si riconnette a una shell. |
Per i limiti di servizio completi, consulta Quote per Amazon Bedrock. AgentCore