Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Carcasas interactivas (terminales)
La InvokeAgentRuntimeCommandShell operación abre una sesión de terminal interactiva y persistente dentro de una sesión AgentCore de Runtime en ejecución WebSocket. A diferencia de la ejecución de comandos en un solo paso, las sesiones de shell mantienen el estado: las variables de entorno, el directorio de trabajo y el historial de comandos se transfieren entre las entradas. Esto permite la depuración, la inspección del entorno y la creación de experiencias de terminal en su aplicación.
Para llamarInvokeAgentRuntimeCommandShell, necesita bedrock-agentcore:InvokeAgentRuntimeCommandShell permisos.
Funcionamiento
InvokeAgentRuntimeCommandShellestablece una WebSocket conexión con un proceso de shell interactivo que se ejecuta dentro de la sesión de su agente. La conexión utiliza marcos binarios para transmitir la entrada y la salida del terminal en ambas direcciones.
Mismo agente, misma sesión
InvokeAgentRuntimeCommandShellfunciona en el mismo tiempo de ejecución del agente que InvokeAgentRuntime yInvokeAgentRuntimeCommand. No se crean recursos independientes. El agente con el que implementaste CreateAgentRuntime acepta conexiones de shell en cualquier sesión activa.
nota
Puede pasar un session_id a una sesión de tiempo de ejecución específica como objetivo. Si se omite, se crea una nueva sesión para cada conexión. Para usar la reconexión, debe almacenar y reutilizar tanto comosession_id. shellId
La conexión admite:
| Característica | Description (Descripción) |
|---|---|
|
Estado persistente |
Las variables de entorno, el directorio de trabajo y el historial de comandos se transfieren a las entradas de la misma sesión. |
|
Reconexión |
Proporcione lo mismo |
|
Múltiples shells simultáneos |
Hasta 10 sesiones de shell activas (terminales) por tiempo de ejecución. Las conexiones nuevas se rechazan cuando están llenas. |
Requisitos previos
-
Permiso de IAM
bedrock-agentcore:InvokeAgentRuntimeCommandShell -
Un ARN AgentCore de punto final de ejecución válido con un tiempo de ejecución en estado LISTO
nota
Los agentes creados después del 5 de junio de 2026 admiten automáticamente los shells interactivos (terminales). Si implementó el agente antes de esta fecha, debe volver a implementarlo para actualizar el tiempo de ejecución del agente.
Uso de la CLI AgentCore
Para obtener instrucciones de instalación y configuración, consulte Introducción a la AgentCore CLI.
La CLI proporciona una experiencia de terminal integrada conagentcore exec.
agentcore exec --it
Para conectarse a un tiempo de ejecución específico:
agentcore exec --it --runtime <runtime-arn> --region us-west-2
Presiona Ctrl+] para separarte de una carcasa sin cerrarla. La CLI imprime un comando de reconexión:
agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>
Para los comandos de un solo uso, omita: --it
agentcore exec "ls -la /tmp"
Para obtener una salida legible por máquina, usa el modo JSON:
agentcore exec --json "echo hello" # Output: {"success":true,"exitCode":0,"stdout":"hello\n","stderr":""}
Para ver más ejemplos de CLI, consulta los AgentCore ejemplos
Uso del AgentCore SDK
Instale el SDK de Python:
pip install bedrock-agentcore
ejemplo
Reconexión
Un patrón común es volver a conectarse shellId a un shell después de una desconexión, conservando todo el estado de la sesión.
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
El SDK también puede volver a conectarse automáticamente cuando se interrumpe la WebSocket conexión. ReconnectConfigUtilízalo para habilitar esto:
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())
Para ver más ejemplos de SDK, consulta los AgentCore ejemplos
Casos de uso comunes
- Depuración interactiva
-
Abre un shell para inspeccionar el entorno de ejecución de tu agente: comprueba los paquetes instalados, lee los archivos de registro, examina el sistema de archivos o prueba los comandos antes de añadirlos al código del agente.
python --version && pip list | head -20 - Inspección del entorno
-
Verifique las variables de entorno, la conectividad de la red, las herramientas disponibles y el estado del sistema de archivos. Resulta útil para diagnosticar errores de agentes o validar la configuración de implementación.
env | grep AWS && curl -s http://169.254.169.254/latest/meta-data/ - Acceso al terminal del agente de codificación
-
Los agentes de codificación de IA utilizan shells interactivos (terminales) como entorno de ejecución. Cuando un agente de codificación necesita ejecutar código, instalar paquetes o ejecutar pruebas, abre una sesión de shell en el AgentCore Runtime y ejecuta los comandos directamente, del mismo modo que un desarrollador utilizaría una terminal. Por ejemplo, Claude Code, Amazon Kiro y OpenAI Codex se conectan cada uno a una sesión de shell en la que pueden escribir código, ejecutarlo, observar el resultado y corregir errores de forma iterativa. El estado persistente significa que el agente puede ejecutar una secuencia de comandos sin perder el contexto entre los pasos.
# 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 procesos
-
Inicie procesos que sobrevivan a una sola solicitud HTTP. Utilice la reconexión para comprobar el progreso o para proporcionar información adicional a lo largo del tiempo.
nohup python train.py > /tmp/train.log 2>&1 &
Elecciones clave de diseño
- Sesiones interactivas persistentes
-
Cada conexión se asigna a un proceso de shell de larga duración. Puede enviar varios comandos sin restablecer la conexión, y el estado acumulado por los comandos anteriores (variables exportadas,
cdcambios) está disponible para los comandos posteriores. - Se acabó el encuadre binario WebSocket
-
I/O La terminal se transmite como fotogramas binarios WebSocket . Esto admite secuencias de control de terminales sin procesar, colores, movimientos del cursor y aplicaciones de pantalla completa sin procesar sin sobrecargar la codificación.
- Reconexión con reproducción de salida
-
Cuando se vuelve a conectar con la misma herramienta
shellId, el servicio reproduce hasta 256 KB de la salida reciente. Esto le permite recuperarse de las interrupciones de la red sin perder el contexto. El proceso de shell continúa ejecutándose durante la desconexión. - Límite de sesión
-
Cuando ya hay 10 sesiones de shell (terminales) abiertas en un tiempo de ejecución, las nuevas conexiones se rechazan con un error. Debe cerrar una sesión existente antes de abrir una nueva.
Consideraciones de seguridad
sugerencia
Para obtener una vista consolidada de todas las recomendaciones de seguridad en Runtime, consulte las prácticas recomendadas de seguridad para AgentCore Runtime.
importante
Según el modelo de responsabilidad AWS compartida, eres responsable de los comandos que ejecutas en tus sesiones AgentCore de Runtime. AWS proporciona la infraestructura segura y el aislamiento a nivel de microVM. Usted es responsable de los comandos que ejecuta, los datos que procesa y los controles de acceso que configura.
El límite de seguridad para las sesiones de shell (terminales) es la microVM. Cada sesión AgentCore de Runtime se ejecuta en una microVM aislada con su propio núcleo, memoria y sistema de archivos. Las sesiones de Shell no pueden acceder a las cargas de trabajo de otros clientes ni escapar de los límites de las máquinas virtuales. Sin embargo, dentro de su máquina virtual, los comandos de shell tienen acceso total al sistema de archivos del contenedor y a cualquier credencial o secreto que haya configurado.
Auditoría con registros CloudWatch
AgentCore Runtime envía el identificador de la solicitud y los metadatos de la conexión al grupo de CloudWatch registros de Amazon Logs de su agente. Puede utilizar estos registros para supervisar la actividad de las conexiones de shell y mantener un registro de auditoría. I/O El contenido del terminal (stdin/stdout) se transmite a su cliente y el servicio no lo registra.
Auditoría con CloudTrail
AWS CloudTrail graba las llamadas a la InvokeAgentRuntimeCommandShell API en su cuenta. Cada registro incluye metadatos como la identidad de la persona que llama, la marca de tiempo, la dirección IP de origen y el estado de la respuesta. CloudTrail no registra la carga útil de la solicitud o la respuesta. CloudTrail Utilízalo para auditar quién abrió las sesiones de shell y cuándo y, a continuación, correlaciona con CloudWatch los registros utilizando el identificador de solicitud para obtener información sobre la conexión.
En el caso de las cargas de trabajo delicadas, considera la posibilidad de implementar controles adicionales, como los siguientes:
-
Usar políticas de IAM para restringir qué directores pueden llamar
InvokeAgentRuntimeCommandShell -
Configurar los puntos finales de la VPC para mantener el tráfico dentro de la red
-
Configuración de CloudWatch registros, filtros métricos y alarmas para detectar patrones de conexión inesperados
-
Revisar CloudTrail los registros con regularidad para detectar intentos de acceso no autorizados
Gestión de errores
Al establecer una conexión de sesión de shell, es posible que se produzcan los siguientes errores durante la WebSocket actualización:
- ValidationException
-
Se produce cuando los parámetros de la solicitud no son válidos. Esto puede ocurrir si el identificador de sesión tiene menos de 33 caracteres, si la función no está habilitada en la región de destino o si el agente no está en estado LISTO.
- AccessDeniedException
-
Se produce cuando no tiene los permisos necesarios. Asegúrese de que su política de IAM incluya el
bedrock-agentcore:InvokeAgentRuntimeCommandShellpermiso. - ResourceNotFoundException
-
Se produce cuando no se puede encontrar el tiempo de ejecución del agente especificado. Compruebe que el ARN en tiempo de ejecución sea correcto.
- RuntimeClientError (424)
-
Ocurre en varios escenarios: (1) Se alcanza el máximo de sesiones simultáneas de shell (terminales) (10 abiertas); cierra una sesión existente y vuelve a intentarlo. (2) El formato del identificador de shell no es válido: debe contener entre 1 y 128 caracteres alfanuméricos, guiones bajos o guiones. (3) No se puede acceder al tiempo de ejecución: vuelva a intentarlo después de retroceder. Analice el
errorcampo JSON del cuerpo de la respuesta para distinguir las causas. - ThrottlingException
-
Se produce cuando superas el límite de velocidad de la API. Implemente la lógica de retroceso y reintento exponencial.
- ConflictException
-
Otra conexión afirma lo mismo simultáneamente.
shellIdVuelva a intentarlo después de 1 segundo. Se trata de una condición de carrera limitada (no un estado persistente) y se resuelve inmediatamente al volver a intentarlo. - RetryableConflictException (409)
-
Se produce cuando se abre una conexión de sesión shell mientras el servicio aprovisiona o desactiva la sesión de destino. El mensaje es.
Session operation in progress, please retryEsta condición es transitoria y se puede volver a intentar. La ventana es breve y las sesiones que ya se están ejecutando no se ven afectadas. Vuelva a intentarlo con un breve retroceso exponencial. ComoInvokeAgentRuntimeCommandShelles una WebSocket API, los AWS SDK no la reintentan automáticamente. Vuelva a intentarlo usted mismo.
Una vez conectada, los siguientes códigos de cierre indican el motivo por el que se interrumpió la conexión:
| Código | Significado | Acción del cliente |
|---|---|---|
|
|
Cierre normal: la carcasa salió limpiamente o se desconectó correctamente |
Muestra «desconectado». Terminación normal. |
|
|
Desaparición: implementación o cierre del servidor |
Auto-reconnect con almacenamiento |
|
|
Datos no compatibles: se envían después de 5 marcos de texto consecutivos (protocolo solo binario) |
NO te vuelvas a conectar automáticamente. Cambie a marcos binarios. |
|
|
Cierre anormal: se sintetiza localmente cuando no se recibe ningún fotograma cerrado (muerte de la red, TCP RST) |
Auto-reconnect con almacenado |
|
|
Infracción de la política: el TTL de la conexión ha caducado (1 hora), se ha superado el límite de velocidad de fotogramas (250 frames/sec) o se ha desbordado el búfer de escritura |
Auto-reconnect por caducidad del TTL (TTL nuevo al volver a conectarse). Para el límite de velocidad: apágalo y vuelve a conectarte. |
|
|
El mensaje es demasiado grande: la carga útil de fotogramas supera los 64 KB |
Reduzca el tamaño del marco (el fragmento a menos de 64 KB) y vuelva a conectarlo. La sesión sigue activa. |
|
|
Error del servidor: fallo interno inesperado |
Vuelva a intentarlo con la opción de retroceso. |
|
|
Reemplazado: otro cliente conectado al mismo |
NO vuelva a conectarse automáticamente. Muestra «sesión adjunta desde otro cliente». |
Prácticas recomendadas
Siga estas prácticas recomendadas cuando utiliceInvokeAgentRuntimeCommandShell:
-
Utilice un identificador único
shellId(como un UUID) para cada sesión lógica a fin de permitir la reconexión. AlmacénelosshellIden el lado del cliente. -
Úselo
ReconnectConfigen el SDK para gestionar automáticamente las interrupciones transitorias de la red sin la lógica de reconexión manual. -
Lea los fotogramas de salida con prontitud. Si el cliente se retrasa, el búfer de escritura del servidor se llena y la conexión se cierra con código
1008. -
En el caso de entradas de gran tamaño (como pegar un archivo), divida el contenido en fragmentos de menos de 64 KB por fotograma para evitar cerrar el código.
1009 -
Establezca los tiempos de espera de conexión adecuados. La duración máxima de la conexión es de 1 hora; vuelve a conectarte con la misma conexión
shellIdpara continuar más allá de esa hora. -
Cierre las sesiones de forma explícita cuando haya terminado. Las sesiones independientes se tienen en cuenta para el límite de 10 sesiones.
Cuotas y límites
| Límite | Valor | Description (Descripción) |
|---|---|---|
|
Tamaño máximo de carga útil de fotogramas |
64 KB |
Los fotogramas que superen este límite dan como resultado un código |
|
Velocidad de fotogramas |
250 frames/sec |
Superar este límite activa el código de cierre |
|
Duración máxima de la conexión |
1 hora |
La conexión se cierra con un código |
|
Sesiones de shell simultáneas (terminales) por tiempo de ejecución |
10 |
Las conexiones nuevas se rechazan si ya hay 10 sesiones abiertas. Cierre una sesión existente y vuelva a intentarlo. |
|
Búfer de reconexión |
256 KB |
Salida máxima que se reproduce al volver a conectarse a un shell. |
Para ver los límites de servicio completos, consulte Cuotas para Amazon Bedrock. AgentCore