Déployer Mastra sur Amazon Bedrock AgentCore
Déployez votre application Mastra sur Amazon Bedrock AgentCore Runtime avec la CLI AgentCore. La CLI génère le squelette d’un projet TypeScript où vous apportez votre propre code, ou BYO, crée le conteneur avec AWS CodeBuild et provisionne le runtime. Un démon Docker local n’est pas nécessaire pour le déploiement.
Ce guide suit le tutoriel TypeScript officiel d’AgentCore et l’adapte afin d’appeler un Agent Mastra depuis le gestionnaire d’invocation.
Pour un déploiement du serveur Mastra complet basé sur Lambda, consultez le guide AWS Lambda. Pour une machine virtuelle de longue durée, consultez le guide Amazon EC2.
Avant de commencerLien direct vers Avant de commencer
Vous aurez besoin de :
- Un compte AWS disposant d’autorisations pour Amazon Bedrock AgentCore, AWS CodeBuild, Amazon ECR et AWS IAM
- La CLI AWS installée et authentifiée, avec
aws configureouaws sso login - Node.js
v22.13.0ou version ultérieure installé - Docker, Podman ou Finch pour les tests locaux avec
agentcore dev, non requis pouragentcore deploy
Amazon Bedrock AgentCore Runtime est disponible dans un sous-ensemble des régions AWS. Utilisez une région où AgentCore est disponible et où les modèles de fondation que vous prévoyez d’appeler sont activés.
Créer un projet AgentCoreLien direct vers Créer un projet AgentCore
Exécutez la commande suivante pour créer un projet AgentCore :
- npm
- pnpm
- Yarn
- Bun
npx @aws/agentcore create --name MastraOnAgentCore --no-agent
pnpm dlx @aws/agentcore create --name MastraOnAgentCore --no-agent
yarn dlx @aws/agentcore create --name MastraOnAgentCore --no-agent
bun x @aws/agentcore create --name MastraOnAgentCore --no-agent
Accédez au répertoire MastraOnAgentCore qui vient d’être créé :
cd MastraOnAgentCore
Initialisez un Agent TypeScript BYO qui sera créé dans app/MastraAgent :
- npm
- pnpm
- Yarn
- Bun
npx @aws/agentcore add agent --name MastraAgent --type byo --build Container --language TypeScript --framework Strands --model-provider Bedrock --code-location app/MastraAgent
pnpm dlx @aws/agentcore add agent --name MastraAgent --type byo --build Container --language TypeScript --framework Strands --model-provider Bedrock --code-location app/MastraAgent
yarn dlx @aws/agentcore add agent --name MastraAgent --type byo --build Container --language TypeScript --framework Strands --model-provider Bedrock --code-location app/MastraAgent
bun x @aws/agentcore add agent --name MastraAgent --type byo --build Container --language TypeScript --framework Strands --model-provider Bedrock --code-location app/MastraAgent
La CLI modifie le fichier agentcore/agentcore.json et crée un répertoire app/MastraAgent vide.
Configurer le projet de l’AgentLien direct vers Configurer le projet de l’Agent
Accédez au répertoire app/MastraAgent et initialisez un nouveau projet Node.js :
cd app/MastraAgent
npm init --init-type=module -y
Installez les dépendances requises. Le package bedrock-agentcore fournit le serveur HTTP BedrockAgentCoreApp, qui implémente le contrat de service AgentCore Runtime. Les packages @ai-sdk/amazon-bedrock et @aws-sdk/credential-providers permettent à l’Agent Mastra d’appeler Bedrock par le rôle d’exécution AgentCore Runtime :
- npm
- pnpm
- Yarn
- Bun
npm install bedrock-agentcore @opentelemetry/auto-instrumentations-node @ai-sdk/amazon-bedrock @aws-sdk/credential-providers --legacy-peer-deps
pnpm add bedrock-agentcore @opentelemetry/auto-instrumentations-node @ai-sdk/amazon-bedrock @aws-sdk/credential-providers --legacy-peer-deps
yarn add bedrock-agentcore @opentelemetry/auto-instrumentations-node @ai-sdk/amazon-bedrock @aws-sdk/credential-providers --legacy-peer-deps
bun add bedrock-agentcore @opentelemetry/auto-instrumentations-node @ai-sdk/amazon-bedrock @aws-sdk/credential-providers --legacy-peer-deps
Installez également TypeScript et les dépendances de développement associées :
- npm
- pnpm
- Yarn
- Bun
npm install --save-dev typescript @types/node tsx
pnpm add --save-dev typescript @types/node tsx
yarn add --dev typescript @types/node tsx
bun add --dev typescript @types/node tsx
Exécutez mastra init pour configurer un nouveau projet Mastra. Le fournisseur choisi dans le prompt est remplacé à l’étape suivante ; toute valeur convient donc :
- npm
- pnpm
- Yarn
- Bun
npx mastra@latest init
pnpm dlx mastra@latest init
yarn dlx mastra@latest init
bun x mastra@latest init
Remplacez le fichier src/mastra/agents/weather-agent.ts généré afin d’utiliser Amazon Bedrock. La valeur memory: new Memory() d’origine est supprimée, car la couche de stockage sera supprimée à l’étape suivante :
import { Agent } from '@mastra/core/agent'
import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock'
import { fromNodeProviderChain } from '@aws-sdk/credential-providers'
import { weatherTool } from '../tools/weather-tool.js'
const bedrock = createAmazonBedrock({
credentialProvider: fromNodeProviderChain(),
})
export const weatherAgent = new Agent({
id: 'weather-agent',
name: 'Weather Agent',
instructions:
'You are a helpful weather assistant. Use the weatherTool to fetch current weather data.',
model: bedrock('us.anthropic.claude-sonnet-4-6'),
tools: { weatherTool },
})
fromNodeProviderChain() permet à l’Agent de récupérer les identifiants AWS avec la chaîne de résolution SDK standard, notamment les variables d’environnement, les fichiers de configuration partagés, SSO et les rôles de conteneur ou EC2, plutôt qu’uniquement par les variables d’environnement.
Remplacez le fichier src/mastra/index.ts généré pour supprimer la configuration par défaut du stockage basé sur fichiers et de l’observabilité. Les conteneurs AgentCore Runtime s’exécutent avec un utilisateur non-root et un répertoire d’application en lecture seule ; le LibSQLStore par défaut ne peut donc pas ouvrir ./mastra.db et le runtime échoue au démarrage :
import { Mastra } from '@mastra/core/mastra'
import { PinoLogger } from '@mastra/loggers'
import { weatherWorkflow } from './workflows/weather-workflow.js'
import { weatherAgent } from './agents/weather-agent.js'
export const mastra = new Mastra({
workflows: { weatherWorkflow },
agents: { weatherAgent },
logger: new PinoLogger({
name: 'Mastra',
level: 'info',
}),
})
Créez un fichier tsconfig.json avec le contenu suivant :
{
"compilerOptions": {
"outDir": "./dist",
"rootDir": ".",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"declaration": true,
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"forceConsistentCasingInFileNames": true
},
"include": ["*.ts", "src/**/*"],
"exclude": ["node_modules", "dist"]
}
Après l’ajout du fichier tsconfig.json, votre éditeur affichera des erreurs dans le projet src/mastra généré. C’est attendu, car la configuration requiert désormais des extensions de fichiers dans les imports. Vous pouvez les corriger en ajoutant .js, par exemple :
// Before
import { weatherWorkflow } from './workflows/weather-workflow'
// After
import { weatherWorkflow } from './workflows/weather-workflow.js'
Mettez à jour votre package.json pour définir le point d’entrée et les scripts de création. L’utilisation de npm pkg set conserve les dépendances ajoutées par mastra init :
npm pkg set main=dist/agent.js scripts.build=tsc scripts.start="node dist/agent.js" scripts.dev="npx tsx --watch agent.ts"
Initialiser l’AgentLien direct vers Initialiser l’Agent
Créez un fichier agent.ts. Ce gestionnaire est appelé pour chaque requête POST /invocations. Récupérez l’Agent Mastra et appelez-le dans le gestionnaire :
import { BedrockAgentCoreApp } from 'bedrock-agentcore/runtime'
import { mastra } from './src/mastra/index.js'
const app = new BedrockAgentCoreApp({
invocationHandler: {
process: async (payload, context) => {
const { prompt } = payload as { prompt: string }
const agent = mastra.getAgentById('weather-agent')
const response = await agent.generate(prompt, {
runId: context.sessionId,
})
return response.text
},
},
})
app.run()
Exécutez npm run build pour vérifier que votre projet se compile correctement.
Créer un DockerfileLien direct vers Créer un Dockerfile
Créez un Dockerfile dans le répertoire app/MastraAgent. Le déploiement fondé sur des conteneurs utilise une création Docker en plusieurs étapes : l’étape de création compile TypeScript en JavaScript, tandis que l’étape de production n’exécute que la sortie compilée. L’image s’exécute avec un utilisateur non-root pour la sécurité et expose les ports 8080 pour HTTP, 8000 pour MCP et 9000 pour A2A. L’instrumentation OpenTelemetry est incluse automatiquement au démarrage.
FROM node:22-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-slim
WORKDIR /app
ENV AWS_REGION=us-east-1
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
RUN useradd -m bedrock_agentcore
USER bedrock_agentcore
EXPOSE 8080 8000 9000
CMD ["node", "--require", "@opentelemetry/auto-instrumentations-node/register", "dist/agent.js"]
Choisissez une valeur AWS_REGION correspondant au préfixe d’identifiant de votre modèle Bedrock : us., jp., eu. ou global..
Créez également un fichier .dockerignore pour exclure les fichiers inutiles du contexte de création Docker :
node_modules
dist
.git
*.log
Tester votre AgentLien direct vers Tester votre Agent
Revenez à la racine du projet :
cd ../..
Testez votre Agent localement :
- npm
- pnpm
- Yarn
- Bun
npx @aws/agentcore dev --runtime MastraAgent
pnpm dlx @aws/agentcore dev --runtime MastraAgent
yarn dlx @aws/agentcore dev --runtime MastraAgent
bun x @aws/agentcore dev --runtime MastraAgent
Dans un terminal distinct, envoyez une requête de test :
- npm
- pnpm
- Yarn
- Bun
npx @aws/agentcore dev "What is the weather in Tokyo?"
pnpm dlx @aws/agentcore dev "What is the weather in Tokyo?"
yarn dlx @aws/agentcore dev "What is the weather in Tokyo?"
bun x @aws/agentcore dev "What is the weather in Tokyo?"
Déployer votre AgentLien direct vers Déployer votre Agent
Définissez le compte AWS et la région dans agentcore/aws-targets.json :
[
{
"name": "default",
"account": "123456789012",
"region": "us-east-1"
}
]
Déployez sur AgentCore Runtime. La CLI crée l’image avec AWS CodeBuild, la pousse vers Amazon ECR et crée le runtime ainsi qu’un endpoint DEFAULT :
- npm
- pnpm
- Yarn
- Bun
npx @aws/agentcore deploy
pnpm dlx @aws/agentcore deploy
yarn dlx @aws/agentcore deploy
bun x @aws/agentcore deploy
Définissez les clés API du fournisseur et les autres secrets dans agentcore/agentcore.json, sous le champ environmentVariables de l’Agent, avant le déploiement.
Vérifier votre déploiementLien direct vers Vérifier votre déploiement
Exécutez agentcore status pour afficher l’ARN du runtime, l’endpoint et les invocations récentes. Appelez ensuite l’Agent déployé depuis la CLI :
npx @aws/agentcore invoke "What is the weather in Tokyo?"
Pour diffuser les tokens pendant leur génération, utilisez --stream :
npx @aws/agentcore invoke --stream "Plan a 3-day trip to Tokyo"