View a markdown version of this page

Coques interactives (terminaux) - Base rocheuse de l'Amazonie AgentCore

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 session_id et reconnectez-vous shellId au même shell après une déconnexion. Le service relit jusqu'à 256 Ko de sortie mise en mémoire tampon.

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 sur GitHub.

Utilisation du AgentCore SDK

Installez le SDK Python :

pip install bedrock-agentcore
Exemple
SigV4 (default)
  1. L'exemple suivant montre comment ouvrir une session shell à l'aide des AWS informations d'identification par défaut.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn) as shell: print(f"Connected. Shell ID: {shell.shell_id}") # Send a command await shell.send("echo Hello from AgentCore Shell\n") # Read output frames async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") if "Hello from AgentCore Shell" in frame.text: break asyncio.run(main())
Pre-signed URL
  1. L'exemple suivant montre comment ouvrir une session shell à l'aide d'une URL pré-signée.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, PresignedAuth, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, auth=PresignedAuth(expires=120)) as shell: await shell.send("whoami\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") break asyncio.run(main())
OAuth
  1. L'exemple suivant montre comment ouvrir une session shell à l'aide d'un jeton porteur OAuth.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, OAuthAuth, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" bearer_token = "your_oauth_token_here" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, auth=OAuthAuth(bearer_token=bearer_token)) as shell: await shell.send("echo oauth-connected\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") if "oauth-connected" in frame.text: break asyncio.run(main())

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 sur GitHub.

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, cd modifications) 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 connexionshellId, 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:InvokeAgentRuntimeCommandShell autorisation.

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 error champ 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 shellId simultané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 estSession 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 il InvokeAgentRuntimeCommandShell s'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

1000

Fermeture normale : la coque est sortie proprement ou débranchée gracieusement

Affichage « déconnecté ». Résiliation normale.

1001

Départ : déploiement ou arrêt du serveur

Auto-reconnect avec stockéshellId.

1003

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.

1006

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éshellId.

1008

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.

1009

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.

1011

Erreur de serveur : défaillance interne inattendue

Réessayez avec backoff.

4000

Remplacé : un autre client connecté au même shellId

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-les shellId cô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 code1008.

  • 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 shellId pour 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é1009.

Fréquence de trames

250 frames/sec

Le dépassement de cette limite déclenche un code de fermeture1008.

Durée de connexion maximale

1 heure

La connexion se ferme à l'aide d'un code1008. Reconnectez-vous en utilisant la même méthode shellId pour continuer.

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.