使用Terraform在AWS EC2上部署Chroma向量数据库
前言
Chroma是一个开源的向量数据库,专为AI应用设计,能够高效存储和检索向量数据。本文将详细介绍如何使用Terraform在AWS EC2上部署Chroma数据库,适合需要构建AI应用后端的开发者。
部署架构概述
这个部署方案将创建以下AWS资源:
- 安全组:开放22(SSH)和8000(Chroma服务)端口
- EC2实例:使用Ubuntu 22.04系统镜像
- EBS数据卷:专用于存储Chroma数据
- Docker环境:通过docker-compose运行Chroma服务
准备工作
环境要求
- Terraform CLI 1.3.4或更高版本
- AWS账号及访问凭证
- 本地安装AWS CLI工具(可选)
选择合适的AMI
部署使用Ubuntu 22.04作为基础镜像,如果需要使用其他Linux发行版,需要调整启动脚本。可以通过AWS CLI查询可用镜像:
aws ec2 describe-images \
--owners 099720109477 \
--filters 'Name=name,Values=ubuntu/images/*/ubuntu-jammy*' \
--query 'sort_by(Images,&CreationDate)[-1].ImageId'
详细部署步骤
1. 初始化Terraform
terraform init
2. 生成SSH密钥对(可选)
ssh-keygen -t RSA -b 4096 -C "Chroma AWS Key" -N "" -f ./chroma-aws && chmod 400 ./chroma-aws
3. 配置环境变量并部署
# AWS凭证
export TF_VAR_AWS_ACCESS_KEY=<你的AWS访问密钥>
export TF_VAR_AWS_SECRET_ACCESS_KEY=<你的AWS秘密密钥>
# SSH密钥路径
export TF_ssh_public_key="./chroma-aws.pub"
export TF_ssh_private_key="./chroma-aws"
# Chroma配置
export TF_VAR_chroma_release=0.4.12 # 指定Chroma版本
export TF_VAR_region="us-west-1" # AWS区域
export TF_VAR_public_access="true" # 是否开放公网访问
export TF_VAR_enable_auth="true" # 启用认证
export TF_VAR_auth_type="token" # 认证类型(token或basic)
# 数据卷选项
export TF_VAR_chroma_data_restore_from_snapshot_id="" # 从快照恢复
export TF_VAR_chroma_data_volume_snapshot_before_destroy="true" # 销毁前创建快照
# 执行部署
terraform apply -auto-approve
4. 验证部署
获取实例公网IP:
terraform output instance_public_ip
检查服务状态(部署完成后可能需要几分钟):
export instance_public_ip=$(terraform output instance_public_ip | sed 's/"//g')
curl -v http://$instance_public_ip:8000/api/v2/heartbeat
认证验证
Token认证:
获取认证token:
terraform output chroma_auth_token
使用token访问API:
export CHROMA_AUTH=$(terraform output chroma_auth_token | sed 's/"//g')
curl -v http://$instance_public_ip:8000/api/v2/collections -H "Authorization: Bearer ${CHROMA_AUTH}"
Basic认证:
获取认证凭证:
terraform output chroma_auth_basic
使用Basic认证访问API:
export CHROMA_AUTH=$(terraform output chroma_auth_basic | sed 's/"//g')
curl -v http://$instance_public_ip:8000/api/v2/collections -u "${CHROMA_AUTH}"
SSH连接实例
ssh -i ./chroma-aws ubuntu@$instance_public_ip
5. 销毁资源
修改chroma.tf
中的aws_ebs_volume
资源,将prevent_destroy
设为false
,然后执行:
terraform destroy -auto-approve
高级功能
可视化基础设施
terraform graph | dot -Tsvg > graph.svg
注意:需要安装graphviz工具
最佳实践建议
-
安全建议:
- 生产环境建议限制8000端口的访问IP范围
- 定期轮换认证凭证
- 考虑使用VPC内网部署
-
性能优化:
- 根据数据量选择适当的EC2实例类型
- 监控EBS卷性能,必要时升级为io1或gp3类型
-
数据持久化:
- 定期创建EBS快照备份
- 考虑使用EFS实现多可用区部署
-
版本管理:
- 通过TF_VAR_chroma_release变量控制Chroma版本
- 升级前创建数据快照
常见问题解答
Q: 部署后无法访问Chroma服务怎么办? A: 检查安全组规则是否允许8000端口访问,确认EC2实例状态正常,查看系统日志排查服务启动问题。
Q: 如何扩展存储容量? A: 可以通过AWS控制台扩展EBS卷大小,然后在实例内扩展文件系统。
Q: 是否支持高可用部署? A: 当前示例为单节点部署,生产环境建议考虑多节点集群方案。
通过本文介绍的Terraform部署方案,开发者可以快速在AWS上搭建Chroma向量数据库环境,为AI应用提供高效的向量存储和检索能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考