View a markdown version of this page

Commencez sans la AgentCore CLI - Amazon Bedrock AgentCore

Commencez sans la AgentCore CLI

Vous pouvez créer un agent AgentCore Runtime sans la AgentCore CLI. Vous pouvez plutôt utiliser une combinaison d'outils de ligne de commande pour configurer et déployer votre agent sur un AgentCore environnement d'exécution.

Ce didacticiel explique comment déployer un agent personnalisé sans utiliser la AgentCore CLI. Un agent personnalisé est un agent créé sans utiliser le SDK AgentCore Python. Dans ce didacticiel, l'agent personnalisé est créé à l'aide de FastAPI et Docker. L'agent personnalisé respecte les exigences AgentCore d'exécution, ce qui signifie qu'il doit exposer les points de terminaison /invocations POST et /ping GET et être empaqueté dans un conteneur Docker. Amazon Bedrock AgentCore nécessite une architecture ARM64 pour tous les agents déployés.

Note

Vous pouvez également utiliser cette approche pour les agents que vous créez avec le SDK AgentCore Python.

Configuration de démarrage rapide

Offrez l'observabilité à votre agent

Amazon Bedrock AgentCore Observability vous permet de suivre, de déboguer et de surveiller les agents que vous hébergez dans Runtime. AgentCore Pour observer un agent, activez d'abord la recherche de CloudWatch transactions en suivant les instructions de la section Activation de l' AgentCore observabilité.

Installez UV

Pour cet exemple, nous utiliserons le gestionnaire de uv packages, mais vous pouvez utiliser n'importe quel utilitaire ou gestionnaire de packages Python. Pour l'installer uv sur macOS :

curl -LsSf https://astral.sh/uv/install.sh | sh

Pour les instructions d'installation sur d'autres plateformes, reportez-vous à la documentation UV.

Créez votre projet d'agent

Configuration de votre projet

  1. Créez et accédez au répertoire de votre projet :

    mkdir my-custom-agent && cd my-custom-agent
  2. Initialisez le projet avec Python 3.11 :

    uv init --python 3.11
  3. Ajoutez les dépendances requises (uv crée automatiquement un fichier .venv) :

    uv add fastapi 'uvicorn[standard]' pydantic httpx strands-agents

Exigences relatives au contrat d'agent

Votre agent personnalisé doit satisfaire aux exigences fondamentales suivantes :

  • Point de terminaison /invocations : point de terminaison POST pour les interactions avec les agents (OBLIGATOIRE)

  • /ping Endpoint : point de terminaison GET pour les contrôles de santé (OBLIGATOIRE)

  • Docker Container : package de déploiement conteneurisé ARM64

Structure du projet

Remarque : Pour des raisons pratiques, l'exemple ci-dessous utilise le serveur FastAPI comme infrastructure de serveur Web pour le traitement des demandes.

Votre projet doit avoir la structure suivante :

my-custom-agent/ ├── agent.py # FastAPI application ├── Dockerfile # ARM64 container configuration ├── pyproject.toml # Created by uv init └── uv.lock # Created automatically by uv

Exemple d'agent à mèches complètes

Créez agent.py à la racine de votre projet avec le contenu suivant :

Exemple agent.py

from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import Dict, Any from datetime import datetime from strands import Agent app = FastAPI(title="Strands Agent Server", version="1.0.0") # Initialize Strands agent strands_agent = Agent() class InvocationRequest(BaseModel): input: Dict[str, Any] class InvocationResponse(BaseModel): output: Dict[str, Any] @app.post("/invocations", response_model=InvocationResponse) async def invoke_agent(request: InvocationRequest): try: user_message = request.input.get("prompt", "") if not user_message: raise HTTPException( status_code=400, detail="No prompt found in input. Please provide a 'prompt' key in the input." ) result = strands_agent(user_message) response = { "message": result.message, "timestamp": datetime.utcnow().isoformat() } return InvocationResponse(output=response) except Exception as e: raise HTTPException(status_code=500, detail=f"Agent processing failed: {str(e)}") @app.get("/ping") async def ping(): return {"status": "healthy"} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8080)

Cette implémentation :

  • Crée une application FastAPI avec les points de terminaison requis

  • Initialise un agent Strands pour traiter les messages des utilisateurs

  • Implémente le point de terminaison /invocations POST pour les interactions entre agents

  • Implémente le point de terminaison /ping GET pour les contrôles de santé

  • Configure le serveur pour qu'il s'exécute sur l'hôte 0.0.0.0 et le port 8080

Test local

Tester votre agent

  1. Exécutez l'application :

    uv run uvicorn agent:app --host 0.0.0.0 --port 8080
  2. Testez le /ping point de terminaison (dans un autre terminal) :

    curl http://localhost:8080/ping
  3. Testez le /invocations point final :

    curl -X POST http://localhost:8080/invocations \ -H "Content-Type: application/json" \ -d '{ "input": {"prompt": "What is artificial intelligence?"} }'

Créer un fichier docker

Créez Dockerfile à la racine de votre projet avec le contenu suivant :

Exemple de Dockerfile

# Use uv's ARM64 Python base image FROM --platform=linux/arm64 ghcr.io/astral-sh/uv:python3.11-bookworm-slim WORKDIR /app # Copy uv files COPY pyproject.toml uv.lock ./ # Install dependencies (including strands-agents) RUN uv sync --frozen --no-cache # Copy agent file COPY agent.py ./ # Expose port EXPOSE 8080 # Run application CMD ["uv", "run", "uvicorn", "agent:app", "--host", "0.0.0.0", "--port", "8080"]

Ce Dockerfile :

  • Utilise une image de base Python ARM64 (requise par Amazon AgentCore Bedrock)

  • Configure le répertoire de travail

  • Copie les fichiers de dépendance et installe les dépendances

  • Copie le code de l'agent

  • Expose le port 8080

  • Configure la commande pour exécuter l'application

Création et déploiement d'une image ARM64

Configurer docker buildx

Docker buildx vous permet de créer des images pour différentes architectures. Configurez-le avec :

docker buildx create --use

Compiler pour ARM64 et tester localement

Construire et tester votre image

  1. Créez l'image localement à des fins de test :

    docker buildx build --platform linux/arm64 -t my-agent:arm64 --load.
  2. Testez localement avec des informations d'identification (les agents Strands ont besoin AWS d'informations d'identification) :

    docker run --platform linux/arm64 -p 8080:8080 \ -e AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID" \ -e AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY" \ -e AWS_SESSION_TOKEN="$AWS_SESSION_TOKEN" \ -e AWS_REGION="$AWS_REGION" \ my-agent:arm64

Création d'un référentiel ECR et déploiement

Déploiement vers ECR

  1. Créez un référentiel ECR :

    aws ecr create-repository --repository-name my-strands-agent --region us-west-2
  2. Connectez-vous à ECR :

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin account-id.dkr.ecr.us-west-2.amazonaws.com
  3. Créez et transférez vers ECR :

    docker buildx build --platform linux/arm64 -t account-id.dkr.ecr.us-west-2.amazonaws.com/my-strands-agent:latest --push.
  4. Vérifiez que l'image a été envoyée :

    aws ecr describe-images --repository-name my-strands-agent --region us-west-2

Déployer l'environnement d'exécution

Créez un fichier nommé deploy_agent.py avec le contenu suivant:

Exemple deploy_agent.py

import boto3 client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') response = client.create_agent_runtime( agentRuntimeName='strands_agent', agentRuntimeArtifact={ 'containerConfiguration': { 'containerUri': 'account-id.dkr.ecr.us-west-2.amazonaws.com/my-strands-agent:latest' } }, networkConfiguration={"networkMode": "PUBLIC"}, roleArn='arn:aws:iam::account-id:role/AgentRuntimeRole', lifecycleConfiguration={ 'idleRuntimeSessionTimeout': 300, # 5 min, configurable 'maxLifetime': 1800 # 30 minutes, configurable }, ) print(f"Agent Runtime created successfully!") print(f"Agent Runtime ARN: {response['agentRuntimeArn']}") print(f"Status: {response['status']}")

Exécutez le script pour déployer votre agent :

uv run deploy_agent.py

Ce script utilise l'create_agent_runtimeopération pour déployer votre agent sur Amazon Bedrock AgentCore. Assurez-vous de le account-id remplacer par votre identifiant de AWS compte réel et assurez-vous que le rôle IAM dispose des autorisations nécessaires. Pour plus d'informations, consultez la section Permissions IAM pour AgentCore Runtime.

Invocation de l’agent

Créez un fichier nommé invoke_agent.py avec le contenu suivant:

Exemple invoke_agent.py

import boto3 import json agent_core_client = boto3.client('bedrock-agentcore', region_name='us-west-2') payload = json.dumps({ "input": {"prompt": "Explain machine learning in simple terms"} }) response = agent_core_client.invoke_agent_runtime( agentRuntimeArn='arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/myStrandsAgent-suffix', runtimeSessionId='dfmeoagmreaklgmrkleafremoigrmtesogmtrskhmtkrlshmt', # Must be 33+ chars payload=payload, qualifier="DEFAULT" ) response_body = response['response'].read() response_data = json.loads(response_body) print("Agent Response:", response_data)

Exécutez le script pour appeler votre agent :

uv run invoke_agent.py

Ce script utilise l'opération du InvokeAgentRuntime AWS SDK pour envoyer une demande à votre agent déployé. Assurez-vous de remplacer account-id et agentArn par vos valeurs réelles.

Si vous envisagez d'intégrer votre agent à OAuth, vous ne pouvez pas utiliser le AWS SDK pour appeler. InvokeAgentRuntime Envoyez plutôt une requête HTTPS à InvokeAgentRuntime. Pour plus d'informations, consultez Authentifier et autoriser avec l'authentification entrante et l'authentification sortante.

Format de réponse attendu

Lorsque vous appelez votre agent, vous recevez une réponse comme celle-ci :

Exemple de réponse type

{ "output": { "message": { "role": "assistant", "content": [ { "text": "# Artificial Intelligence in Simple Terms\n\nArtificial Intelligence (AI) is technology that allows computers to do tasks that normally need human intelligence. Think of it as teaching machines to:\n\n- Learn from information (like how you learn from experience)\n- Make decisions based on what they've learned\n- Recognize patterns (like identifying faces in photos)\n- Understand language (like when I respond to your questions)\n\nInstead of following specific step-by-step instructions for every situation, AI systems can adapt to new information and improve over time.\n\nExamples you might use every day include voice assistants like Siri, recommendation systems on streaming services, and email spam filters that learn which messages are unwanted." } ] }, "timestamp": "2025-07-13T01:48:06.740668" } }

Arrêter la session d'exécution

Pour arrêter la session en cours avant la configuration IdleRuntimeSessionTimeout (15 minutes par défaut) et économiser sur d'éventuels coûts supplémentaires, exécutez : stop_runtime_session

Créez un fichier nommé stop_runtime_session.py avec le contenu suivant:

Exemple stop_runtime_session.py

import boto3 agent_core_client = boto3.client('bedrock-agentcore', region_name='us-west-2') response = agent_core_client.stop_runtime_session( agentRuntimeArn='arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/myStrandsAgent-suffix', runtimeSessionId='dfmeoagmreaklgmrkleafremoigrmtesogmtrskhmtkrlshmt', qualifier="DEFAULT" )

Résumé des AgentCore exigences d'Amazon Bedrock

  • Plateforme : Doit être linux/arm64

  • Points de terminaison : /invocations POST et /ping GET sont obligatoires

  • ECR : les images doivent être déployées sur ECR

  • Port : l'application s'exécute sur le port 8080

  • Intégration des brins : utilise l'agent Strands pour le traitement de l'IA

  • Informations d'identification : les agents Strands ont besoin AWS d'informations d'identification pour fonctionner

Conclusion

Dans ce guide, vous avez appris à :

  • Mettre en place un environnement de développement pour créer des agents personnalisés

  • Créez une application FastAPI qui implémente les points de terminaison requis

  • Conteneurisez votre agent pour l'architecture ARM64

  • Testez votre agent localement

  • Déployez votre agent dans ECR

  • Création d'un environnement d'exécution d'agent dans Amazon Bedrock AgentCore

  • Appelez votre agent déployé

  • Arrêter la session d'exécution de l'agent

En suivant ces étapes, vous pouvez créer et déployer des agents personnalisés qui tirent parti de la puissance d'Amazon Bedrock AgentCore tout en gardant un contrôle total sur la mise en œuvre de votre agent.