如何在Kubernetes上使用AWS Bedrock、FastAPI和Helm构建和部署AI代理
本文介绍了如何在Kubernetes上使用AWS Bedrock、FastAPI和Helm构建和部署AI代理。主要内容包括: 采用微服务架构部署AI代理的优势,包括独立部署、按需扩展、标准CI/CD流程等 实际业务场景中的应用案例,如客户支持、工程运营、合规管理等 详细实现步骤: 项目结构设计 使用FastAPI构建REST API接口 集成AWS Bedrock进行文本摘要和翻译 容器化部署方案
简简单单 Online zuozuo :本心、输入输出、结果
文章目录
如何在Kubernetes上使用AWS Bedrock、FastAPI和Helm构建和部署AI代理
编辑 | 简简单单 Online zuozuo
地址 | https://blog.csdn.net/qq_15071263
如果觉得本文对你有帮助,欢迎关注、点赞、收藏、评论,谢谢
前言
AI的能力不再局限于大型集中式平台。如今,工程团队越来越多地采用轻量级、专业化的AI代理,这些代理可以像云原生环境中的微服务一样进行管理、扩展和部署——无论是用于总结大型文档、翻译、分类还是其他分析任务。在本教程中,您将创建一个AI模型,该模型使用AWS Bedrock、FastAPI、Docker提供用于摘要和翻译的REST API,并通过Helm在Amazon EKS上部署和运行。
这为将AI集成到运营中提供了一个可重用的流程:一个代理、一个任务、清晰的边界,以及完整的Kubernetes原生可见性和控制。
#AI代理 #Kubernetes #AWS Bedrock #FastAPI #Helm #云原生 #微服务 #容器化

1、为什么AI代理适合微服务模型
实施"平台思维"的组织正在寻求能够像其架构中的其他服务一样运行的AI组件:
- 独立部署:每个AI代理可以独立部署和更新,不影响其他服务
- 按需扩展:根据需求进行扩展,实现资源的高效利用
- 标准CI/CD处理:通过标准管道处理持续集成和持续部署
- 可观察性和安全性:具备完整的监控、日志和安全特性
- 易于通过REST集成:通过标准REST API轻松集成到现有系统中
AI能力被转化为微服务,实现了云无关的AI构建块,而不是单体AI平台。
本文假设您的Amazon EKS集群和Amazon ECR仓库已经配置完成,因此重点放在应用程序架构和部署模式上,而不是基础设施设置。

2、实际用例
AI代理在实际业务场景中有着广泛的应用:
| 场景 | 结果 |
|---|---|
| 客户支持 | 总结冗长的客户工单 |
| 工程运营 | 翻译事件报告 |
| 风险和合规 | 压缩审计或监管文档 |
| 产品和营销 | 跨区域翻译发布说明 |
这些用例展示了AI代理如何解决实际业务问题,提高工作效率。

3、步骤1:项目设置
清晰的目录布局将应用程序逻辑、容器化和部署资源分开:
ai-agent/
├── app/
│ ├── main.py
│ ├── providers.py
│ ├── models.py
│ └── config.py
├── Dockerfile
└── charts/
这种布局将应用程序逻辑、容器配置和Kubernetes部署资源分开。

4、步骤2:构建FastAPI AI代理
配置
# app/config.py
from pydantic import BaseSettings
class Settings(BaseSettings):
aws_region: str = "us-east-1"
model_summarize: str = "anthropic.claude-v2"
model_translate: str = "amazon.titan-text-lite-v1"
settings = Settings()
请求模型
# app/models.py
from pydantic import BaseModel
class SummarizeRequest(BaseModel):
text: str
class TranslateRequest(BaseModel):
text: str
target_language: str
Bedrock提供者
# app/providers.py
import boto3
import json
import logging
from app.config import settings
logger = logging.getLogger("ai-agent")
logger.setLevel(logging.INFO)
bedrock_client = boto3.client(
"bedrock-runtime",
region_name=settings.aws_region
)
def call_bedrock(model_id: str, prompt: str) -> str:
try:
payload = {
"prompt": prompt,
"max_tokens_to_sample": 200
}
response = bedrock_client.invoke_model(
modelId=model_id,
body=json.dumps(payload)
)
output = json.loads(response["body"].read())
return output.get("completion", "")
except Exception as e:
logger.error(f"Bedrock error: {e}")
return "Unable to process request."
FastAPI应用程序
# app/main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.models import SummarizeRequest, TranslateRequest
from app.providers import call_bedrock
from app.config import settings
app = FastAPI(title="AI Summarizer and Translator")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"]
)
@app.get("/healthz")
async def health():
return {"status": "ok"}
@app.post("/summarize")
async def summarize(req: SummarizeRequest):
prompt = f"Summarize this text in two concise sentences:\n{req.text}"
return {"summary": call_bedrock(settings.model_summarize, prompt)}
@app.post("/translate")
async def translate(req: TranslateRequest):
prompt = f"Translate this into {req.target_language}:\n{req.text}"
return {"translation": call_bedrock(settings.model_translate, prompt)}

5、步骤3:容器化和部署准备
容器化应用程序
使用多阶段构建的Dockerfile来优化镜像大小并遵循安全最佳实践:
FROM python:3.11-slim AS builder
WORKDIR /app
COPY app/requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
FROM python:3.11-slim
ENV PYTHONUNBUFFERED=1
ENV PATH=/root/.local/bin:$PATH
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY app ./app
RUN adduser --disabled-password --gecos '' appuser
USER appuser
EXPOSE 8000
CMD ["uvicorn","app.main:app","--host","0.0.0.0","--port","8000","--workers","2"]
这个Dockerfile使用非root用户运行应用程序,提高了安全性。
将镜像推送到Amazon ECR
aws ecr get-login-password --region us-east-1 \
| docker login --username AWS --password-stdin <ECR_URL>
docker tag ai-agent:latest <ECR_URL>/ai-agent:latest
docker push <ECR_URL>/ai-agent:latest
确保将<ECR_URL>替换为您的实际ECR仓库URL。这些命令将构建的Docker镜像推送到Amazon ECR,以便在Kubernetes集群中使用。
创建Kubernetes Secrets
kubectl create secret generic bedrock-secret \
--from-literal=AWS_ACCESS_KEY_ID=XXX \
--from-literal=AWS_SECRET_ACCESS_KEY=YYY
将XXX和YYY替换为您的实际AWS访问密钥ID和秘密访问密钥。这个Secret将用于在Pod中注入AWS凭证,以便应用程序可以访问AWS Bedrock服务。

6、步骤4:Helm配置和部署
Helm配置
values.yaml文件定义了部署配置:
replicaCount: 2
image:
repository: <ECR_URL>/ai-agent
tag: latest
pullPolicy: Always
service:
type: LoadBalancer
port: 80
env:
AWS_REGION: us-east-1
secretRef: bedrock-secret
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
部署模板
apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-agent
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: ai-agent
template:
metadata:
labels:
app: ai-agent
spec:
containers:
- name: ai-agent
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 8000
env:
- name: AWS_REGION
value: {{ .Values.env.AWS_REGION | quote }}
envFrom:
- secretRef:
name: {{ .Values.secretRef }}
readinessProbe:
httpGet:
path: /healthz
port: 8000
livenessProbe:
httpGet:
path: /healthz
port: 8000
resources:
{{ toYaml .Values.resources | indent 12 }}
Helm配置提供了灵活的部署管理,包括副本数量、资源限制和健康检查配置。
部署到Kubernetes
helm install ai-agent ./charts -f values.yaml
kubectl get svc
使用Helm安装应用程序后,使用kubectl get svc命令获取LoadBalancer的外部IP地址,用于访问API服务。
测试API
curl -X POST http://<EXTERNAL-IP>/summarize \
-H "Content-Type: application/json" \
-d '{"text":"Customer reported API latency during peak hours."}'
将<EXTERNAL-IP>替换为从kubectl get svc命令获取的实际外部IP地址。这个curl命令测试摘要API的功能。

7、自动扩缩容和CI/CD自动化
自动扩缩容和监控
配置水平Pod自动扩缩容(HPA)以实现按需扩展:
kubectl autoscale deployment ai-agent \
--min=2 --max=6 --cpu-percent=70
这个命令配置了HPA,当CPU使用率达到70%时,会自动扩展Pod数量,最多扩展到6个副本,最少保持2个副本。这确保了应用程序能够根据负载自动调整资源。
CI/CD自动化
一旦容器镜像和Helm图表设置完成,可以通过标准CI/CD管道实现自动化。该过程涉及构建容器镜像、将其存储在Amazon ECR中,以及将Helm发布部署/升级到EKS。
- GitHub Actions:适用于基于仓库的CI/CD,具有简单的部署管道
- Harness CD:适用于需要审批门控、RBAC、可追溯性和多团队编排的环境
无论使用哪种工具,部署生命周期都保持一致:容器版本控制、通过Helm进行Kubernetes发布,以及使用标准健康检查进行滚动更新。

8、总结
Kubernetes为将AI代理部署为可修改的服务提供了一个坚实的平台,而AWS Bedrock使大型语言模型易于访问,其简单性不会增加任何额外的操作复杂性。与FastAPI、Docker和Helm配合使用,可以通过标准API轻松提供AI服务,实现直接清晰的方法。
将应用程序逻辑层与部署方面分离的能力使得更容易以促进重用、可扩展性和应用程序操作一致性的方式实现该方法。随着企业消费多云的趋势日益增长,为了控制部署过程而不陷入复杂性,上述品质的重要性不容忽视。
在本系列的后续部分中,相同的机器学习模型将在Azure AKS上与Azure OpenAI一起使用,在GCP GKE上与Vertex AI一起使用。这就是Kubernetes的力量——能够在任何云平台上为机器学习任务提供等效层的能力。
生如逆旅,一苇以航
欢迎关注、欢迎联系交流、欢迎沟通想法、欢迎交换意见、欢迎合作咨询
感谢亲的关注、点赞、收藏、评论,一键三连支持,谢谢

更多推荐



所有评论(0)