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.
Despliegue directo de código para Node.js
La implementación directa de código le permite llevar su Node.js-based agente a Amazon Bedrock AgentCore Runtime simplemente empaquetando el código del agente y sus dependencias en un archivo zip. Su agente aún debe cumplir con los requisitos de AgentCore tiempo de ejecución: tener un .js archivo de punto de entrada que implemente los puntos de enlace de los servidores /invocations POST y GET. /ping
Puedes incluir las dependencias tal y como están distribuidas node_modules/ en tu ZIP o como un archivo único incluido en esbuild. .js
Requisitos previos
Antes de comenzar, asegúrese de que dispone de lo siguiente:
-
AWS Cuenta con credenciales configuradas. Para configurar sus AWS credenciales, consulte Configuración y ajustes del archivo de credenciales en la AWS CLI.
-
Node.js
y npm instalado. Te recomendamos instalar la misma versión principal que planeas implementar en AgentCore Runtime (por ejemplo, Node.js 22 para el NODE_22motor de ejecución). Para ver las versiones compatibles, consulta la sección Tiempos de ejecución en los idiomas compatibles. -
AWS Permisos: Para crear e implementar un agente, debe tener los permisos adecuados. Para obtener más información, consulte Permisos AgentCore de ejecución.
-
Acceso a modelos: Amazon Bedrock permite el acceso a los modelos básicos de forma predeterminada. Para usar un modelo que no sea básico, siga los pasos de acceso al modelo.
Paso 1: configurar el proyecto e instalar las dependencias
Inicializa tu proyecto con los siguientes comandos:
mkdir agentcore_runtime_node_deploy cd agentcore_runtime_node_deploy npm init -y
Si lo desea, ejecútelo npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation para habilitar los rastreos de AgentCore observabilidad de Amazon Bedrock.
Paso 2: Crea tu código de agente
Crea tu punto de entrada para agentes. Su agente debe implementar el contrato HTTP AgentCore de Runtime con un terminal /ping GET Health y un controlador /invocations POST.
ejemplo
Paso 3: Probar localmente
Asegúrese de que el puerto 8080 esté libre antes de comenzar. Consulte Solucionar problemas si el puerto ya está en uso.
Abra una ventana de terminal e inicie su agente:
ejemplo
Paso 4: Habilite la observabilidad para su agente
Amazon Bedrock AgentCore Observability le ayuda a rastrear, depurar y supervisar los agentes que aloja en Runtime. AgentCore En primer lugar, habilite CloudWatch la búsqueda de transacciones siguiendo las instrucciones que aparecen en Habilitar la observabilidad en tiempo de ejecución de Amazon Bedrock AgentCore . Para observar a su agente, consulte Ver los datos de observabilidad de sus agentes de Amazon Bedrock. AgentCore
Para habilitar la instrumentación automática para su Node.js agente, añada el paquete ADOT:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation
importante
La autoinstrumentación de ADOT funciona parcheando las llamadas en tiempo de ejecución. Node.js require() Esto significa que solo es compatible con la salida del módulo CommonJS. Si compila TypeScript con --module nodenext o --module esnext (produciendo import sentencias ESM), la instrumentación de ADOT falla silenciosamente y no se emite ningún rastro. Para usar ADOT, compile --module commonjs o use esbuild con --platform=node (que conserva require() las llamadas a los módulos integrados). Node.js
Al realizar la implementación, node_modules/ inclúyala en su ZIP y utilice el opentelemetry-instrument prefijo en su punto de entrada (consulte el paso 5).
Paso 5: Despliegue en AgentCore Runtime e invoque
nota
AgentCore Runtime no ejecuta archivos TypeScript (.ts) de forma nativa. Debe transpilar a antes de la implementación TypeScript . JavaScript Para obtener más información, consulte Trabajando con TypeScript .
Cree un archivo.zip con el código de su agente y sus dependencias. AgentCore Runtime solo admite la arquitectura del conjunto de instrucciones arm64; asegúrese de que todos los módulos (.nodearchivos) nativos estén compilados para arm64.
ejemplo
nota
. El tamaño máximo de un paquete de implementación .zip para AgentCore Runtime es de 250 MB (comprimido) y 750 MB (descomprimido). Ten en cuenta que este límite se aplica al tamaño combinado de todos los archivos que subas. El AgentCore Runtime necesita permiso para leer los archivos de tu paquete de implementación. En la notación octal de los permisos de Linux, AgentCore Runtime necesita 644 permisos para los archivos no ejecutables (rw-r—r--) y 755 permisos (rwxr-xr-x) para los directorios y los archivos ejecutables. En Linux y macOS, utilice el comando chmod para cambiar los permisos de los archivos y directorios del paquete de implementación. Por ejemplo, para dar a un archivo no ejecutable los permisos correctos, ejecute el siguiente comando,. chmod 644 <filepath> Para cambiar los permisos de los archivos en Windows, consulte Set, View, Change, or Remove Permissions on an Object
Como requisito previo para crear Agent Runtime, es necesario subir a S3 un archivo ZIP que contenga las dependencias de arm64 de Linux. El código siguiente requiere que el bucket de S3 especificado ya exista. Siga la AWS documentación que aparece aquí para crear un bucket. El siguiente TypeScript código cargará el archivo .zip en S3 y creará un entorno de ejecución de Amazon Bedrock AgentCore .
import { readFileSync } from "node:fs"; import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import { BedrockAgentCoreControlClient, CreateAgentRuntimeCommand, } from "@aws-sdk/client-bedrock-agentcore-control"; const accountId = "your-aws-account-id"; const agentName = "nodejs_agent"; const region = "us-west-2"; const bucketName = `bedrock-agentcore-code-${accountId}-${region}`; const s3Client = new S3Client({ region }); console.log("Uploading deployment_package.zip to S3..."); await s3Client.send(new PutObjectCommand({ Bucket: bucketName, Key: `${agentName}/deployment_package.zip`, Body: readFileSync("deployment_package.zip"), ExpectedBucketOwner: accountId, })); console.log(`Upload completed. S3 location: s3://${bucketName}/${agentName}/deployment_package.zip`); const controlClient = new BedrockAgentCoreControlClient({ region }); const response = await controlClient.send(new CreateAgentRuntimeCommand({ agentRuntimeName: agentName, agentRuntimeArtifact: { codeConfiguration: { code: { s3: { bucket: bucketName, prefix: `${agentName}/deployment_package.zip`, }, }, runtime: "NODE_22", entryPoint: ["dist/app.js"], }, }, networkConfiguration: { networkMode: "PUBLIC" }, roleArn: `arn:aws:iam::${accountId}:role/AmazonBedrockAgentCoreSDKRuntime-${region}`, lifecycleConfiguration: { idleRuntimeSessionTimeout: 300, maxLifetime: 1800, }, })); console.log(`Agent Runtime created successfully!`); console.log(`Agent Runtime ARN: ${response.agentRuntimeArn}`); console.log(`Status: ${response.status}`);
Para habilitar la autoinstrumentación de OTEL, inclúyala node_modules/@aws/aws-distro-opentelemetry-node-autoinstrumentation/ en su ZIP y utilice el opentelemetry-instrument prefijo del punto de entrada:
entryPoint: ["opentelemetry-instrument", "dist/app.js"],
Para invocar un agente en Amazon Bedrock AgentCore Runtime mediante programación, consulte Invocar un agente mediante programación. Invoca un agente mediante programación
Paso 6: Detenga la sesión, actualice o limpie
TypeScript El siguiente código actualizará un AgentCore Runtime. Suba el nuevo paquete de implementación a S3 y, a continuación, llame aUpdateAgentRuntimeCommand:
import { readFileSync } from "node:fs"; import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import { BedrockAgentCoreControlClient, UpdateAgentRuntimeCommand, } from "@aws-sdk/client-bedrock-agentcore-control"; const accountId = "your-aws-account-id"; const agentName = "nodejs_agent"; const region = "us-west-2"; const bucketName = `bedrock-agentcore-code-${accountId}-${region}`; const s3Client = new S3Client({ region }); console.log("Uploading deployment_package.zip to S3..."); await s3Client.send(new PutObjectCommand({ Bucket: bucketName, Key: `${agentName}/deployment_package.zip`, Body: readFileSync("deployment_package.zip"), ExpectedBucketOwner: accountId, })); console.log("Upload completed successfully!"); const controlClient = new BedrockAgentCoreControlClient({ region }); const response = await controlClient.send(new UpdateAgentRuntimeCommand({ agentRuntimeId: "<your-agent-runtime-id>", agentRuntimeArtifact: { codeConfiguration: { code: { s3: { bucket: bucketName, prefix: `${agentName}/deployment_package.zip`, }, }, runtime: "NODE_22", entryPoint: ["dist/app.js"], }, }, networkConfiguration: { networkMode: "PUBLIC" }, roleArn: `arn:aws:iam::${accountId}:role/AmazonBedrockAgentCoreSDKRuntime-${region}`, })); console.log(`Agent Runtime updated successfully!`); console.log(`Agent Runtime ARN: ${response.agentRuntimeArn}`); console.log(`Status: ${response.status}`);
Para detener la sesión en ejecución antes de la configurable IdleRuntimeSessionTimeout (el valor predeterminado es de 15 minutos) y ahorrar cualquier posible coste adicional, utilice el siguiente código:
import { BedrockAgentCoreClient, StopRuntimeSessionCommand, } from "@aws-sdk/client-bedrock-agentcore"; const region = "us-west-2"; const dataClient = new BedrockAgentCoreClient({ region }); const response = await dataClient.send(new StopRuntimeSessionCommand({ agentRuntimeArn: "arn:aws:bedrock-agentcore:us-west-2:<account-id>:runtime/<agent-runtime-id>", runtimeSessionId: "<your-session-id>", qualifier: "DEFAULT", })); console.log("Session stopped successfully!");
TypeScript El siguiente código eliminará el tiempo de AgentCore ejecución de Amazon Bedrock y el archivo archivador.zip de S3.
import { S3Client, DeleteObjectCommand } from "@aws-sdk/client-s3"; import { BedrockAgentCoreControlClient, DeleteAgentRuntimeCommand, } from "@aws-sdk/client-bedrock-agentcore-control"; const accountId = "your-aws-account-id"; const agentName = "nodejs_agent"; const region = "us-west-2"; const bucketName = `bedrock-agentcore-code-${accountId}-${region}`; const controlClient = new BedrockAgentCoreControlClient({ region }); console.log("Deleting Agent from Amazon Bedrock AgentCore Runtime!"); const response = await controlClient.send(new DeleteAgentRuntimeCommand({ agentRuntimeId: "<your-agent-runtime-id>", })); console.log(`Agent Runtime deleted successfully!`); console.log(`Status: ${response.status}`); const s3Client = new S3Client({ region }); console.log("Deleting deployment archive from S3..."); await s3Client.send(new DeleteObjectCommand({ Bucket: bucketName, Key: `${agentName}/deployment_package.zip`, ExpectedBucketOwner: accountId, })); console.log("Archive deleted successfully from S3!");
Node.js-specific conceptos para la implementación directa de código
Obtenga más información sobre Node.js-specific los conceptos relacionados con el uso de la implementación directa de código con Amazon Bedrock AgentCore Runtime.
Temas
AgentCore Runtime for Node.js solo acepta puntos .js de entrada. TypeScript los files (.ts) no se aceptan directamente; debes transpilarlos JavaScript antes de empaquetarlos. Recomendamos usar esbuild npm install -D esbuild
Los puntos de entrada pueden estar en subdirectorios. Por ejemplo, src/app.js o dist/index.js son puntos de entrada válidos. Node.js la resolución del módulo recorre el árbol de directorios desde la ubicación del punto de entrada, por lo que las dependencias que se encuentran node_modules/ en la raíz del ZIP se encuentran automáticamente, sin necesidad de ninguna NODE_PATH configuración.
Cuando especifiques un punto de entrada a un subdirectorio, asegúrate de que la ruta de tu entryPoint configuración coincide con la ruta del archivo ZIP.
Hay dos enfoques para empaquetar las dependencias de los Node.js agentes:
Dependencias de proveedores (las más sencillas):
Incluye node_modules/ directamente en tu código postal junto a tu punto de entrada:
npm install --production zip -r my-agent.zip app.js node_modules/ package.json
Esto produce un ZIP con la siguiente estructura:
my-agent.zip ├── app.js ├── package.json └── node_modules/
Incluido con esbuild (el ZIP más pequeño):
Usa esbuild
npx esbuild app.js --bundle --platform=node --target=node22 --outfile=bundle.js zip my-agent.zip bundle.js
Esto produce un ZIP mínimo:
my-agent.zip └── bundle.js
Ambos enfoques funcionan. Las implementaciones agrupadas suelen tener menos de 10 MB y se implementan más rápido. Las implementaciones de los proveedores son más sencillas y no requieren un paso de creación, pero pueden ser más grandes.
AgentCore Runtime solo admite la arquitectura del conjunto de instrucciones arm64. Si su agente usa paquetes npm que incluyen módulos nativos (compilados .node o .so archivos), esos binarios deben compilarse para Linux arm64.
AgentCore Runtime valida la arquitectura de todos los .so archivos .node y archivos del paquete de implementación leyendo sus encabezados ELF. Si se compila algún binario para una arquitectura diferente (como x86_64 o macOS), la creación del agente fallará y mostrará el estado. CREATE_FAILED
Para instalar módulos nativos compatibles con arm64:
-
Instale las dependencias en una máquina arm64 (como una AWS Graviton-based instancia de Amazon EC2)
-
Usa npm y banderas:
--arch--platformnpm install --arch=arm64 --platform=linux -
Use esbuild para empaquetar su código si se puede evitar el módulo nativo en tiempo de ejecución
Los paquetes npm más populares (Express, Axios, Fastify, Hono, ws) son puros JavaScript y no contienen módulos nativos.
AgentCore Runtime no ejecuta TypeScript los archivos directamente. Debe compilar el código TypeScript fuente para JavaScript antes de implementarlo. Este es el mismo patrón que utiliza AWS Lambda.
Uso del TypeScript compilador (tsc):
npm install -g typescript npx tsc --init --target ES2022 --module commonjs --outDir ./dist npx tsc
Luego empaqueta la salida compilada:
cd dist zip -r ../deployment_package.zip .
Al crear el agente, defina el punto de entrada en el .js archivo compilado (por ejemplo, app.js o dist/app.js según su estructura ZIP).
Uso de esbuild (recomendado para empaques más sencillos):
npx esbuild app.ts --bundle --platform=node --target=node22 --outfile=app.js zip deployment_package.zip app.js
esbuild compila TypeScript y agrupa las dependencias en un solo paso, lo que produce un archivo pequeño e independiente. .js
Si package.json incluyes un engines.node campo, AgentCore Runtime valida que el rango especificado es compatible con la Node.js versión que seleccionaste (por ejemplo, Node.js 22 cuando usas el NODE_22 motor de ejecución). Si el rango excluye esa versión, la creación del agente fallará con el estado. CREATE_FAILED
Por ejemplo, las siguientes engines declaraciones son compatibles con Node.js 22:
{ "engines": { "node": ">=18" } } { "engines": { "node": ">=14 <18 || >=20" } } { "engines": { "node": "22" } }
Las siguientes declaraciones son incompatibles y provocarán un error en la creación del agente:
{ "engines": { "node": "<18" } } { "engines": { "node": ">=14 <18" } }
AgentCore Runtime también comprueba el engines.node campo para ver si hay dependencias comunes en sunode_modules/. Si alguna de estas opciones declara un rango de versiones que excluye la Node.js versión en tiempo de ejecución de destino, se producirá un error en la creación del agente.
Si encuentra una engines.node incompatibilidad, actualice el paquete a una versión que sea compatible con la Node.js versión de destino o elimine el engines campo de su. package.json Para ver Node.js las versiones compatibles, consulte Tiempos de ejecución en idiomas compatibles.