Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Coques interactives (terminaux)
L'InvokeAgentRuntimeCommandShellopération ouvre une session de terminal interactive et persistante dans le cadre d'une session AgentCore Runtime terminée WebSocket. Contrairement à l'exécution de commandes ponctuelle, les sessions shell conservent leur état : les variables d'environnement, le répertoire de travail et l'historique des commandes sont transmis à toutes les entrées. Cela permet le débogage, l'inspection de l'environnement et la création d'expériences terminales dans votre application.
Pour appelerInvokeAgentRuntimeCommandShell, vous avez besoin d'bedrock-agentcore:InvokeAgentRuntimeCommandShellautorisations.
Comment ça marche
InvokeAgentRuntimeCommandShellétablit une WebSocket connexion à un processus shell interactif qui s'exécute dans la session de votre agent. La connexion utilise des trames binaires pour diffuser l'entrée et la sortie du terminal dans les deux sens.
Même agent, même session
InvokeAgentRuntimeCommandShellfonctionne sur le même environnement d'exécution de l'agent que InvokeAgentRuntime etInvokeAgentRuntimeCommand. Vous ne créez pas de ressources distinctes. L'agent que vous avez utilisé pour le déploiement CreateAgentRuntime accepte les connexions shell sur n'importe quelle session active.
Note
Vous pouvez transmettre un session_id pour cibler une session d'exécution spécifique. En cas d'omission, une nouvelle session est créée pour chaque connexion. Pour utiliser la reconnexion, vous devez stocker et réutiliser à la fois session_id etshellId.
La connexion prend en charge :
| Fonctionnalité | Description |
|---|---|
|
État persistant |
Les variables d'environnement, le répertoire de travail et l'historique des commandes transfèrent les entrées d'une même session. |
|
Reconnexion |
Fournissez la même chose |
|
Plusieurs coques simultanées |
Jusqu'à 10 sessions shell actives (terminaux) par exécution. Les nouvelles connexions sont rejetées lorsqu'elles sont à pleine capacité. |
Conditions préalables
-
Autorisation IAM
bedrock-agentcore:InvokeAgentRuntimeCommandShell -
Un ARN de point AgentCore d'exécution valide avec un environnement d'exécution à l'état READY
Note
Les agents créés après le 5 juin 2026 prennent automatiquement en charge les shells interactifs (terminaux). Si vous avez déployé votre agent avant cette date, vous devez le redéployer pour mettre à jour le runtime de l'agent.
Utilisation de la AgentCore CLI
Pour obtenir des instructions d'installation et de configuration, voir Commencer à utiliser l' AgentCore interface de ligne de commande.
La CLI fournit une expérience de terminal intégrée avecagentcore exec.
agentcore exec --it
Pour vous connecter à un environnement d'exécution spécifique :
agentcore exec --it --runtime <runtime-arn> --region us-west-2
Appuyez Ctrl+] pour détacher la coque sans la fermer. La CLI imprime une commande de reconnexion :
agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>
Pour les commandes ponctuelles, --it omettez :
agentcore exec "ls -la /tmp"
Pour une sortie lisible par machine, utilisez le mode JSON :
agentcore exec --json "echo hello" # Output: {"success":true,"exitCode":0,"stdout":"hello\n","stderr":""}
Pour d'autres exemples de CLI, consultez les AgentCore exemples
Utilisation du AgentCore SDK
Installez le SDK Python :
pip install bedrock-agentcore
Exemple
Reconnexion
Un modèle courant est utilisé pour se reconnecter shellId à un shell après une déconnexion, tout en préservant l'état de la session.
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
Le SDK peut également se reconnecter automatiquement lorsque la WebSocket connexion est interrompue. Utilisez ReconnectConfig pour activer ceci :
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())
Pour d'autres exemples de SDK, consultez les AgentCore exemples
Cas d’utilisation courants
- Débogage interactif
-
Ouvrez un shell pour inspecter l'environnement d'exécution de votre agent : vérifiez les packages installés, lisez les fichiers journaux, examinez le système de fichiers ou testez les commandes avant de les ajouter au code de votre agent.
python --version && pip list | head -20 - Inspection environnementale
-
Vérifiez les variables d'environnement, la connectivité réseau, les outils disponibles et l'état du système de fichiers. Utile pour diagnostiquer les défaillances des agents ou valider la configuration du déploiement.
env | grep AWS && curl -s http://169.254.169.254/latest/meta-data/ - Accès au terminal de l'agent de codage
-
Les agents de codage IA utilisent des shells interactifs (terminaux) comme environnement d'exécution. Lorsqu'un agent de codage doit exécuter du code, installer des packages ou exécuter des tests, il ouvre une session shell dans le AgentCore Runtime et exécute des commandes directement, de la même manière qu'un développeur utiliserait un terminal. Par exemple, Claude Code, Amazon Kiro et OpenAI Codex se connectent chacun à une session shell où ils peuvent écrire du code de manière itérative, l'exécuter, observer les résultats et corriger les erreurs en boucle. L'état persistant signifie que l'agent peut exécuter une séquence de commandes sans perdre le contexte entre les étapes.
# 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 processus
-
Démarrez des processus qui survivent à une seule requête HTTP. Utilisez la fonction de reconnexion pour vérifier la progression ou fournir des informations supplémentaires au fil du temps.
nohup python train.py > /tmp/train.log 2>&1 &
Principaux choix de conception
- Sessions interactives persistantes
-
Chaque connexion correspond à un processus de coque de longue durée. Vous pouvez envoyer plusieurs commandes sans rétablir la connexion, et l'état accumulé par les commandes précédentes (variables exportées,
cdmodifications) est disponible pour les commandes ultérieures. - Encadrement binaire WebSocket
-
I/O Le terminal est diffusé sous forme de WebSocket trames binaires. Cela prend en charge les séquences brutes de contrôle des terminaux, les couleurs, le mouvement du curseur et les applications en plein écran sans surcharge d'encodage.
- Reconnexion avec rediffusion de la sortie
-
Lorsque vous vous reconnectez à l'aide de la même connexion
shellId, le service rejoue jusqu'à 256 Ko de sortie récente. Cela vous permet de vous remettre des interruptions du réseau sans perdre le contexte. Le processus shell continue de s'exécuter pendant la déconnexion. - Limite de session
-
Lorsque 10 sessions shell (terminaux) sont déjà ouvertes lors d'un runtime, les nouvelles connexions sont rejetées avec une erreur. Vous devez fermer une session existante avant d'en ouvrir une nouvelle.
Considérations sur la sécurité
Astuce
Pour une vue consolidée de toutes les recommandations de sécurité relatives à Runtime, consultez la section Bonnes pratiques en matière de sécurité pour AgentCore Runtime.
Important
Dans le cadre du modèle de responsabilité AWS partagée, vous êtes responsable des commandes que vous exécutez dans vos sessions AgentCore Runtime. AWS fournit une infrastructure sécurisée et une isolation au niveau de la microVM. Vous êtes responsable des commandes que vous exécutez, des données que vous traitez et des contrôles d'accès que vous configurez.
La limite de sécurité pour les sessions shell (terminaux) est la microVM. Chaque session AgentCore d'exécution s'exécute dans une microVM isolée dotée de son propre noyau, de sa propre mémoire et de son propre système de fichiers. Les sessions Shell ne peuvent pas accéder aux charges de travail des autres clients ni échapper aux limites des machines virtuelles. Cependant, au sein de votre machine virtuelle, les commandes shell ont un accès complet au système de fichiers du conteneur et à toutes les informations d'identification ou secrets que vous avez configurés.
Audit à l'aide de CloudWatch journaux
AgentCore Runtime envoie l'ID de demande et les métadonnées de connexion au groupe de CloudWatch journaux Amazon Logs de votre agent. Vous pouvez utiliser ces journaux pour surveiller l'activité des connexions shell et conserver une piste d'audit. I/O Le contenu du terminal (stdin/stdout) est diffusé vers votre client et n'est pas enregistré par le service.
Audit avec CloudTrail
AWS CloudTrail enregistre les appels d'InvokeAgentRuntimeCommandShellAPI sur votre compte. Chaque enregistrement inclut des métadonnées telles que l'identité de l'appelant, l'horodatage, l'adresse IP source et l'état de la réponse. CloudTrail n'enregistre pas la charge utile de la demande ou de la réponse. Utilisez-le CloudTrail pour vérifier qui a ouvert les sessions shell et quand, puis établissez une corrélation avec CloudWatch les journaux en utilisant l'ID de demande pour les détails de connexion.
Pour les charges de travail sensibles, envisagez de mettre en œuvre des contrôles supplémentaires tels que :
-
Utiliser les politiques IAM pour restreindre les numéros d'appel que les principaux peuvent appeler
InvokeAgentRuntimeCommandShell -
Configuration des points de terminaison VPC pour maintenir le trafic au sein de votre réseau
-
Configuration CloudWatch des filtres métriques et des alarmes des journaux pour détecter les modèles de connexion inattendus
-
Examiner régulièrement CloudTrail les journaux pour détecter les tentatives d'accès non autorisées
Gestion des erreurs
Lors de l'établissement d'une connexion à une session shell, vous pouvez rencontrer les erreurs suivantes lors de la WebSocket mise à niveau :
- ValidationException
-
Survient lorsque les paramètres de demande ne sont pas valides. Cela peut se produire si l'ID de session comporte moins de 33 caractères, si la fonctionnalité n'est pas activée dans la région cible ou si l'agent n'est pas en état PRÊT.
- AccessDeniedException
-
Se produit lorsque vous ne disposez pas des autorisations nécessaires. Assurez-vous que votre politique IAM inclut cette
bedrock-agentcore:InvokeAgentRuntimeCommandShellautorisation. - ResourceNotFoundException
-
Se produit lorsque l'environnement d'exécution de l'agent spécifié est introuvable. Vérifiez que l'ARN d'exécution est correct.
- RuntimeClientError (424)
-
Cela se produit dans plusieurs scénarios : (1) Nombre maximum de sessions shell simultanées (terminaux) atteint (10 ouvertes) : fermez une session existante et réessayez. (2) Le format d'identification du shell n'est pas valide. Il doit contenir entre 1 et 128 caractères alphanumériques, des traits de soulignement ou des tirets. (3) Runtime inaccessible — réessayez après la réinitialisation. Analysez le
errorchamp JSON du corps de la réponse pour en distinguer les causes. - ThrottlingException
-
Se produit lorsque vous dépassez la limite de débit de l'API. Implémentez une logique d'attente exponentielle et de nouvelle tentative.
- ConflictException
-
Une autre connexion revendique la même chose
shellIdsimultanément. Réessayez après 1 seconde. Il s'agit d'une condition de course restreinte (et non d'un état persistant) qui se résout immédiatement lors d'une nouvelle tentative. - RetryableConflictException (409)
-
Se produit lorsque vous ouvrez une connexion à une session shell pendant que le service provisionne ou supprime la session cible. Le message est
Session operation in progress, please retry. Cette condition est transitoire et peut être réessayée. La fenêtre est courte et les sessions déjà en cours ne sont pas affectées. Réessayez avec une courte temporisation exponentielle. Comme ilInvokeAgentRuntimeCommandShells'agit d'une WebSocket API, les AWS SDK ne la réessayent pas automatiquement. Réessayez vous-même.
Une fois la connexion établie, les codes de fermeture suivants indiquent pourquoi la connexion a été interrompue :
| Code | Signification | Action du client |
|---|---|---|
|
|
Fermeture normale : la coque est sortie proprement ou débranchée gracieusement |
Affichage « déconnecté ». Résiliation normale. |
|
|
Départ : déploiement ou arrêt du serveur |
Auto-reconnect avec stocké |
|
|
Données non prises en charge : envoyées après 5 blocs de texte consécutifs (protocole binaire uniquement) |
NE VOUS RECONNECTEZ PAS automatiquement. Passez aux trames binaires. |
|
|
Fermeture anormale — synthétisée localement lorsqu'aucune trame fermée n'est reçue (mort du réseau, TCP RST) |
Auto-reconnect avec stocké |
|
|
Violation de politique : expiration du TTL de connexion (1 heure), limite de fréquence d'images dépassée (250 frames/sec) ou dépassement de la mémoire tampon d'écriture |
Auto-reconnect pour l'expiration du TTL (nouveau TTL lors de la reconnexion). Pour la limite de débit : redémarrez, puis reconnectez-vous. |
|
|
Message trop volumineux : la charge utile de la trame a dépassé 64 Ko |
Réduisez la taille de l'image (segment à moins de 64 Ko), puis reconnectez-vous. La session est toujours en cours. |
|
|
Erreur de serveur : défaillance interne inattendue |
Réessayez avec backoff. |
|
|
Remplacé : un autre client connecté au même |
NE VOUS RECONNECTEZ PAS automatiquement. Afficher « session jointe depuis un autre client ». |
Bonnes pratiques
Suivez ces bonnes pratiques lors de l'utilisation de InvokeAgentRuntimeCommandShell :
-
Utilisez un identifiant unique
shellId(tel qu'un UUID) pour chaque session logique afin de permettre la reconnexion. Conservez-lesshellIdcôté client. -
ReconnectConfigÀ utiliser dans le SDK pour gérer automatiquement les interruptions transitoires du réseau sans logique de reconnexion manuelle. -
Lisez rapidement les trames de sortie. Si le client est en retard, la mémoire tampon d'écriture du serveur se remplit et la connexion se ferme avec du code
1008. -
Pour les entrées volumineuses (comme le collage d'un fichier), divisez le contenu en morceaux de moins de 64 Ko par image pour éviter de fermer le code.
1009 -
Définissez les délais de connexion appropriés. La durée de connexion maximale est d'une heure. Reconnectez-vous à la même connexion
shellIdpour continuer au-delà. -
Fermez les sessions de manière explicite lorsque vous avez terminé. Les sessions individuelles sont prises en compte dans la limite de 10 sessions.
Quotas et limites
| Limite | Value | Description |
|---|---|---|
|
Taille de charge utile maximale du châssis |
64 Ko |
Les trames dépassant cette limite génèrent un code fermé |
|
Fréquence de trames |
250 frames/sec |
Le dépassement de cette limite déclenche un code de fermeture |
|
Durée de connexion maximale |
1 heure |
La connexion se ferme à l'aide d'un code |
|
Sessions shell simultanées (terminaux) par exécution |
10 |
Les nouvelles connexions sont rejetées si 10 sessions sont déjà ouvertes. Fermez une session existante et réessayez. |
|
Tampon de reconnexion |
256 Ko |
Puissance maximale rejouée lors de la reconnexion à un shell. |
Pour connaître les limites de service complètes, consultez Quotas pour Amazon Bedrock AgentCore.