使用 AWS Bedrock、Lambda 和 API Gateway 部署无服务器 AI 代理
发布: (2025年12月28日 GMT+8 09:15)
5 分钟阅读
原文: Dev.to
Source: Dev.to
概述
本指南介绍如何使用 Amazon Bedrock 构建由生成式 AI 驱动的问答服务。该架构通过 HTTP 接收提示,并返回模型生成的响应,同时通过完全无服务器的堆栈将成本降至最低。
数据流
- 外部客户端 发送 HTTP 请求到 API Gateway。
- API Gateway 将请求路由到 Lambda 函数。
- Lambda 函数调用 Amazon Bedrock 的 Nova Micro 模型。
- Lambda 容器镜像存储在 ECR(Elastic Container Registry)中。
要求
| 方面 | 要求 |
|---|---|
| 提示处理 | 接受提示并返回 Nova Micro 完成结果 |
| HTTP 端点 | 暴露用于触发响应的端点 |
| 估计流量 | 约 100 次每月请求(用于成本估算) |
| 自动化 | 通过 GitHub Actions 完全自动化部署 |
| 可用性 | 每月 99.9%+ 的正常运行时间 |
| 安全 | IAM 范围的 Bedrock 访问、OpenID Connect 认证、仅限 HTTPS |
| 可观测性 | 使用 CloudWatch 仪表盘的结构化日志 |
身份验证、输入消毒和授权被排除,以便专注于核心 GenAI 实现。
成本估算
基于每次请求约 22 个输入 token 和 232 个输出 token 的估计:
| 服务 | 月费用 | 备注 |
|---|---|---|
| Bedrock(Nova Micro) | ~ $0.003 | 2,200 输入 / 23,200 输出 token |
| Lambda | 免费 | 在免费额度内(1 M 请求,400 K GB‑秒) |
| API Gateway | 免费(第 1 年) | 免费额度后约 $0.0004/月 |
| ECR | ~ $0.01 | 300 MB 镜像,超过 500 MB 免费额度后计费 |
每月请求量与费用
| 请求次数 | 约计费用 |
|---|---|
| 1 000 | ~ $0.04 |
| 10 000 | ~ $0.39 |
| 100 000 | ~ $3.76 |
项目设置
mkdir -p handler terraform
cd handler
pnpm init -y
pnpm --package=typescript dlx tsc --init
mkdir -p src __tests__
touch src/{app,env,index}.ts
pnpm add -D @types/node tsx typescript
pnpm add ai @ai-sdk/amazon-bedrock zod dotenv
应用架构
flowchart TB
A["Lambda Handler
*Parses events, returns responses*"] --> B["Application Logic
*Manages prompts & orchestration*"]
B --> C["Bedrock Integration
*Model invocation via AI SDK*"]
Lambda 处理程序 (src/index.ts)
export const handler = async (event: any, context: any) => {
try {
const body = event.body ? JSON.parse(event.body) : {};
const prompt = body.prompt ?? "Welcome from Warike technologies";
const response = await main(prompt);
return {
statusCode: 200,
body: JSON.stringify({ success: true, data: response }),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({
success: false,
error: error instanceof Error ? error.message : 'Unexpected error'
}),
};
}
};
Bedrock 实用工具 (src/utils/bedrock.ts)
import { createAmazonBedrock, generateText } from 'ai';
import { config } from '../config';
export async function generateResponse(prompt: string) {
const { regionId, modelId } = config({});
const bedrock = createAmazonBedrock({ region: regionId });
const { text, usage } = await generateText({
model: bedrock(modelId),
system: "You are a helpful assistant.",
prompt: [{ role: "user", content: prompt }],
});
console.log(`model: ${modelId}, response: ${text}, usage: ${JSON.stringify(usage)}`);
return text;
}
环境变量
AWS_REGION=us-west-2
AWS_BEDROCK_MODEL='amazon.nova-micro-v1:0'
AWS_BEARER_TOKEN_BEDROCK='aws_bearer_token_bedrock'
安全提示: 仅使用短期有效的 API 密钥。
Docker 构建
构建阶段
# Build Stage
FROM node:22-alpine AS builder
WORKDIR /usr/src/app
RUN corepack enable
COPY package.json pnpm-lock.yaml* ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
运行阶段
# Runtime Stage
FROM public.ecr.aws/lambda/nodejs:22
WORKDIR ${LAMBDA_TASK_ROOT}
COPY --from=builder /usr/src/app/dist/src ./
COPY --from=builder /usr/src/app/node_modules ./node_modules
CMD [ "index.handler" ]
基础设施组件
- API Gateway – HTTP 协议与 Lambda 集成,CORS 头,JSON 访问日志。
- Bedrock Permissions – 通过 IAM 访问 Nova Micro 推理配置文件。
- Lambda Function – 900 秒超时,已启用 CloudWatch 日志。
📝 ECR 种子资源需要在本地运行 Docker。
flowchart LR
A[Push to Main] --> B[Build & Test]
B --> C[Build Docker Image]
C --> D[Push to ECR]
D --> E[Deploy Lambda]
使用 GitHub Actions 的 CI/CD
工作流(在推送到 main 时触发)处理以下任务:
- 构建并测试代码。
- 创建 Docker 镜像。
- 将镜像推送到 ECR。
- 通过 Terraform 部署 Lambda 函数。
测试端点
curl -sS "https://123456.execute-api.us-west-2.amazonaws.com/dev/" \
-H "Content-Type: application/json" \
-d '{"prompt":"Heeey hoe gaat het?"}' | jq
预期响应
{
"success": true,
"data": "Hoi! Het gaat prima, bedankt voor het vragen..."
}
可观测性
CloudWatch 仪表板提供错误和性能指标的可视化。
清理
terraform destroy
结论
- 无服务器的生成式 AI,结合 API Gateway、Lambda 和 Bedrock 的 Nova Micro,提供了一个功能齐全且具成本效益的解决方案。
- 即使在大规模情况下,定价仍然可以忽略不计。
- Terraform 管理基础设施;GitHub Actions 自动化部署。
- 该基础能够轻松支持更复杂的生成式 AI 应用。