Serverless Framework 如何用 ai.agents 配置部署 AWS Bedrock AgentCore AI Agent?
【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless
在 Serverless Framework 中,AWS Bedrock AgentCore 提供了一组托管能力来部署 AI Agent:你可以用 LangGraph、Strands Agents、CrewAI 或自研代码编写 Agent,然后在serverless.yml的ai.agents下声明它,由 Framework 完成镜像构建、推送 ECR、创建 IAM 角色和 CloudFormation 资源。本文走通一条最短路径:从最小配置开始,部署一个 Runtime Agent,并用 CLI 命令验证部署结果。
部署前的准备条件
文档明确要求的前置条件:
- AWS 账号已开通 Bedrock 模型访问;
- 安装了 Docker(用于镜像部署和 auto-build);
- Node.js 20+(仅限 JavaScript Agent);
- Serverless Framework v4+,并已配置好 AWS 凭证。
示例代码中 Agent 通过 Bedrock 调用模型,因此需要在 Bedrock 控制台开通对应模型。例如langgraph-basic-code示例使用的是美国跨区推理画像us.anthropic.claude-sonnet-4-5-20250929-v1:0,文档说明这是为了可用性和吞吐,直接用模型 ID 可能不支持 on-demand 调用。
最小配置:ai.agents 怎么写
在serverless.yml中声明 Agent 只需一个顶层ai属性。空配置用{},YAML 要求显式写空花括号:
service: my-ai-agent provider: name: aws region: us-east-1 ai: agents: chatbot: {}Agent 代码本身用 AgentCore Runtime SDK 包装。JavaScript 入口(index.js):
import { BedrockAgentCoreApp } from 'bedrock-agentcore/runtime' import { z } from 'zod' // 你的 Agent 逻辑 —— 可以用任何框架(LangGraph、Strands Agents、CrewAI 等) const agent = createYourAgent() const app = new BedrockAgentCoreApp({ invocationHandler: { requestSchema: z.object({ prompt: z.string(), }), async process(request) { const result = await agent.invoke(request.prompt) return result }, }, }) app.run()Python 入口(agent.py):
from bedrock_agentcore.runtime import BedrockAgentCoreApp agent = create_your_agent() # 你的 Agent 逻辑 app = BedrockAgentCoreApp() @app.entrypoint def agent_invocation(payload, context): result = agent.invoke(payload.get("prompt")) return {"result": result} app.run()上面的createYourAgent()是文档给出的占位说明,需要你替换为自己的 Agent 初始化代码,其余的入口包装结构保持不变。完整可运行的参考实现见仓库内的示例目录:
- JavaScript auto-build 示例:langgraph-basic(其 serverless.yml 只有
assistant: {}一行核心配置) - Python 代码部署示例:langgraph-basic-code
- Python Docker 部署示例:langgraph-basic-docker
三种部署方式:如何选
AgentCore 支持三种部署方式,选择哪一种决定了ai.agents下怎么写:
1. Auto-build(无 Dockerfile,最省事)
Framework 直接从源码自动构建镜像并推送到 ECR,不需要写 Dockerfile。要求:
- Node.js 项目:
package.json必须有,lockfile(package-lock.json、yarn.lock或pnpm-lock.yaml)必须有;入口为项目根目录的index.js或server.js,或package.json里的start脚本;Node.js 版本通过engines.node指定(默认最新 LTS)。 - Python 项目:
requirements.txt或pyproject.toml必须有,用于安装依赖。
配置就是前面的myAgent: {},适合快速起步和简单项目。
2. Dockerfile 部署(完全控制容器)
项目目录里放一个 Dockerfile,Framework 会自动检测:
ai: agents: myAgent: {} # 自动检测项目目录中的 DockerfileNode.js 和 Python 的 Dockerfile 示例(来自文档):
FROM node:20-slim WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev COPY . . CMD ["node", "index.js"]FROM python:3.12-slim WORKDIR /app COPY . . RUN pip install -r requirements.txt CMD ["python", "agent.py"]也可以显式指定 Dockerfile 位置、构建上下文和 ECR 仓库名:
ai: agents: myAgent: artifact: image: file: Dockerfile.agent # 自定义 Dockerfile 文件名 path: ./agent # 构建上下文目录 repository: my-agent-repo # 自定义 ECR 仓库名 buildArgs: PYTHON_VERSION: '3.12' ENV: production适合多语言项目、复杂依赖、需要完全控制容器环境的场景。已有 CI/CD 构建镜像时,可以直接填现成的 ECR 镜像地址(如123456789012.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest)。
3. 代码部署(仅 Python)
不经过 Docker,直接把 Python 代码打包上传到 S3:
ai: agents: myAgent: handler: agent.py # 该属性触发代码部署模式 runtime: python3.13 # 可选 python3.10 / python3.11 / python3.12 environment: MODEL_ID: us.anthropic.claude-sonnet-4-5-20250929-v1:0handler是触发代码部署模式的关键属性。支持python3.10、python3.11、python3.12、python3.13(默认)。依赖通过requirements.txt打包,langgraph-basic-code示例用custom.pythonRequirements.dockerizePip: true保证依赖按目标 Linux 运行时编译。适合简单 Python Agent 和快速迭代。
执行部署
配置完成后执行:
serverless deployserverless deploy期间 Framework 自动处理的事情(来自 AI Agents 文档):
- 构建 Docker 镜像(来自你的 Dockerfile 或自动从源码构建)并推送到 ECR;
- 为每个 Agent 组件(runtime、memory、gateway、browser、code interpreter)创建最小权限 IAM 角色;
- 通过 CloudFormation 创建 Runtime、Endpoint、Gateway、Memory 等资源;
- 把 memory ID、gateway URL 等引用注入 Agent 的环境变量;
- 代码部署模式下把 Python 代码打包并上传到 S3。
部署成功后,输出中会包含调用所需的信息(如 runtime ARN),后续验证步骤会用到。
部署结果验证
用 CLI 调用已部署的 Agent
serverless invoke --agent myAgent --data '{"prompt": "Hello!"}'--agent还支持--path(文件输入)和--session-id(多轮对话)。参考示例中的完整写法:
sls invoke --agent assistant --data '{"prompt":"What is 25 multiplied by 4?"}'用serverless info和serverless logs检查
serverless info serverless logs --agent myAgent # 查看日志 serverless logs --agent myAgent --tail # 实时跟踪日志serverless logs --agent支持与函数日志相同的--startTime、--filter、--interval选项。
用 boto3 直接调用 AgentCore API
文档明确提醒:不能直接用 curl 调用 AgentCore runtime,必须使用 AWS SDK 的bedrock-agentcoreclient 和invoke_agent_runtime方法。示例项目附带了可直接运行的 test-invoke.py,runtime ARN 从serverless info获取:
RUNTIME_ARN=<你的runtime-arn> python3 test-invoke.py等价的手动调用逻辑(示例中的YOUR_RUNTIME_ARN需替换为 deploy 输出中的 runtime ARN):
import boto3 import json import uuid client = boto3.client('bedrock-agentcore', region_name='us-east-1') response = client.invoke_agent_runtime( agentRuntimeArn='YOUR_RUNTIME_ARN', # 来自 deploy 输出 runtimeSessionId=str(uuid.uuid4()), payload=json.dumps({"prompt": "What is 25 multiplied by 4?"}).encode() ) result = json.loads(response['response'].read()) print(result)常用运行时配置
部署成功后,这些配置项直接影响运行行为,均出自 Runtime Configuration:
ai: agents: myAgent: environment: MODEL_ID: us.anthropic.claude-sonnet-4-5-20250929-v1:0 LOG_LEVEL: INFO lifecycle: idleRuntimeSessionTimeout: 900 # 秒,范围 60-28800,默认 900 maxLifetime: 3600 # 秒,范围 60-28800,默认 28800- 环境变量上限 50 个(AWS 在部署时强制),文档建议秘密信息放 AWS Secrets Manager 或 Parameter Store,不要写进环境变量。
network.mode默认PUBLIC;需要访问私有资源时改VPC并配置subnets、securityGroups,文档要求子网具备 NAT Gateway 出网能力、安全组放行 443 出站。- 默认认证是 AWS SigV4(调用方需有效 AWS 凭证和 IAM 权限);需要 Cognito/Auth0/Okta 等 OIDC 身份体系时用
authorizer.type: CUSTOM_JWT配置。 - 需要多版本访问时可用
endpoints定义命名端点,例如staging端点固定到version: '1',production端点跟踪最新版。
本地开发与清理
部署后再进本地开发模式,serverless dev会复用已部署的 IAM 角色和本地热重载(多 Agent 时用--agent myAgent指定):
serverless dev serverless dev --agent myAgent如果serverless.yml同时定义了 Lambda 函数和 Agent,serverless dev默认进入 Lambda 的 dev 模式,需要加--agents显式选择 Agent dev 模式。详见 Dev Mode 文档。
删除全部已部署资源:
serverless remove下一步
部署验证通过后,AI Agents 文档 给出的延伸方向:
- Gateway 配置:把 Lambda 函数和 API 接成 Agent 工具;
- Memory 配置:会话持久化,如
ai.agents.myAgent.memory: conversations; - Browser 与 Code Interpreter:网页自动化和沙箱 Python 执行能力。
完整的组合配置(部署方式、网络、认证、生命周期、端点、环境变量一次看全)可参考 Runtime 文档的 Complete Configuration Reference。
【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考