

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.

# Detener una sesión en ejecución
<a name="runtime-stop-session"></a>

La `StopRuntimeSession` operación le permite terminar inmediatamente las sesiones de AgentCore ejecución de los agentes activas para limpiar los recursos y gestionar el ciclo de vida de la sesión de forma adecuada.

Cuando se invoca, esta operación termina instantáneamente la sesión especificada y detiene cualquier respuesta de transmisión en curso. Esto permite que los recursos del sistema se liberen correctamente y evita la acumulación de sesiones huérfanas.

Úselo `StopRuntimeSession` en los siguientes escenarios:
+  **User-initiated final**: cuando los usuarios concluyen explícitamente su conversación
+  **Cierre de la aplicación**: limpieza proactiva antes de la finalización de la aplicación
+  **Gestión de errores**: forzar la finalización de sesiones estancadas o que no responden
+  **Administración de cuotas**: manténgase dentro de los límites de sesión cerrando las sesiones no utilizadas
+  **Gestión del tiempo de espera**: borra las sesiones que superan la duración esperada

## Requisitos previos
<a name="prerequisites"></a>

Para usarlo [ StopRuntimeSession](https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_StopRuntimeSession.html), necesita:
+  Permiso de IAM `bedrock-agentcore:StopRuntimeSession`
+ Un ARN de AgentCore ejecución del agente válido
+ El ID de una sesión activa que se va a terminar

**Example**  

1. Puede usar el AWS SDK para detener las sesiones de AgentCore Runtime mediante programación.

   Ejemplo de Python en el que se usa boto3 para detener una sesión de Runtime. AgentCore 

   ```
   import boto3
   
   # Initialize the AgentCore client
   client = boto3.client('bedrock-agentcore', region_name='us-west-2')
   
   try:
       # Stop the runtime session
       response = client.stop_runtime_session(
           agentRuntimeArn='arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent',
           runtimeSessionId='your-session-id',
           qualifier='DEFAULT'  # Optional: endpoint name
       )
   
       print(f"Session terminated successfully")
       print(f"Request ID: {response['ResponseMetadata']['RequestId']}")
   
   except client.exceptions.ResourceNotFoundException:
       print("Session not found or already terminated")
   except client.exceptions.AccessDeniedException:
       print("Insufficient permissions to stop session")
   except Exception as e:
       print(f"Error stopping session: {str(e)}")
   ```

1. Para las aplicaciones que utilizan la autenticación OAuth, realiza solicitudes HTTPS directas:

   ```
   import requests
   import urllib.parse
   
   def stop_session_with_oauth(agent_arn, session_id, bearer_token, qualifier="DEFAULT"):
       # URL encode the agent ARN
       encoded_arn = agent_arn.replace(':', '%3A').replace('/', '%2F')
   
       # Construct the endpoint URL
       url = f"https://bedrock-agentcore.us-west-2.amazonaws.com/runtimes/{encoded_arn}/stopruntimesession?qualifier={qualifier}"
   
       headers = {
           "Authorization": f"Bearer {bearer_token}",
           "Content-Type": "application/json",
           "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id": session_id
       }
   
       try:
           response = requests.post(url, headers=headers)
           response.raise_for_status()
   
           print(f"Session {session_id} terminated successfully")
           return response.json()
   
       except requests.exceptions.HTTPError as e:
           if e.response.status_code == 404:
               print("Session not found or already terminated")
           elif e.response.status_code == 403:
               print("Insufficient permissions or invalid token")
           else:
               print(f"HTTP error: {e.response.status_code}")
           raise
       except requests.exceptions.RequestException as e:
           print(f"Request failed: {str(e)}")
           raise
   
   # Usage
   stop_session_with_oauth(
       agent_arn="arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent",
       session_id="your-session-id",
       bearer_token="your-oauth-token"
   )
   ```

## Formato de las respuestas
<a name="response-format"></a>

Formato de respuesta esperado para operaciones exitosas`StopRuntimeSession`.

```
{
    "ResponseMetadata": {
        "RequestId": "12345678-1234-1234-1234-123456789012",
        "HTTPStatusCode": 200
    }
}
```

## Gestión de errores
<a name="error-handling"></a>

Respuestas de error comunes:


| Código de estado | Error | Description (Descripción) | 
| --- | --- | --- | 
| 404 | ResourceNotFoundException | No se ha encontrado la sesión o ya ha finalizado | 
| 403 | AccessDeniedException | Permisos insuficientes | 
| 400 | ValidationException | Parámetros no válidos | 
| 409 | RetryableConflictException | La sesión está en curso, inténtelo de nuevo | 
| 500 | InternalServerException | Error de servicio | 

El servicio regresa `RetryableConflictException` (HTTP 409) cuando la `StopRuntimeSession` llamada llega mientras el servicio aún está aprovisionando o interrumpiendo la sesión. Esta condición es transitoria y se puede volver a intentar. Vuelva a intentarlo con un breve retroceso exponencial en lugar de tratarlo como una falla terminal. Los AWS SDK reintentan automáticamente esta excepción cuando están habilitados los reintentos predeterminados. Si inhabilitaste los reintentos o llamaste a la API directamente sin un AWS SDK (por ejemplo, la solicitud HTTPS que se mostró anteriormente), vuelve a intentarlo tú mismo.

## Prácticas recomendadas
<a name="best-practices"></a>

### Administración del ciclo de sesiones
<a name="session-lifecycle-management"></a>

```
class SessionManager:
    def __init__(self, client, agent_arn):
        self.client = client
        self.agent_arn = agent_arn
        self.active_sessions = set()

    def invoke_agent(self, session_id, payload):
        """Invoke agent and track session"""
        try:
            response = self.client.invoke_agent_runtime(
                agentRuntimeArn=self.agent_arn,
                runtimeSessionId=session_id,
                payload=payload
            )
            self.active_sessions.add(session_id)
            return response
        except Exception as e:
            print(f"Failed to invoke agent: {e}")
            raise

    def stop_session(self, session_id):
        """Stop session and remove from tracking"""
        try:
            self.client.stop_runtime_session(
                agentRuntimeArn=self.agent_arn,
                runtimeSessionId=session_id,
                qualifier=endpoint_name
            )
            self.active_sessions.discard(session_id)
            print(f"Session {session_id} stopped")
        except Exception as e:
            print(f"Failed to stop session {session_id}: {e}")

    def cleanup_all_sessions(self):
        """Stop all tracked sessions"""
        for session_id in list(self.active_sessions):
            self.stop_session(session_id)
```

### Recomendaciones
<a name="recommendations"></a>
+  **Gestione siempre las excepciones ** al detener las sesiones
+  **Realice un seguimiento de las sesiones activas ** en su aplicación para su limpieza
+  **Establece tiempos de espera para las solicitudes ** de suspensión para evitar que se bloqueen
+  **Registra las terminaciones de las sesiones ** para la depuración y la supervisión
+  **Utilice los administradores de sesión ** para aplicaciones complejas con varias sesiones