Athena查询服务

为n8n AI代理提供标准化的AWS Athena查询服务,支持数据库列表、表结构查询和SQL执行功能。

  • by vipink1203
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 vipink1203/aws-athena-mcp-server

使用说明

AWS Athena MCP服务器

AWS Athena的模型上下文协议(MCP)服务器,旨在与n8n AI代理集成。

概述

此MCP服务器为n8n AI代理查询AWS Athena和检索数据提供了一种标准化的方法。它实现了模型上下文协议,允许n8n代理:

  1. 列出可用的数据库和表
  2. 获取表架构和元数据
  3. 执行SQL查询并检索结果

特性

  • 简单的API,用于从n8n AI代理与Athena交互
  • 内置健康检查和监测
  • 可通过环境变量进行配置
  • 容器化,便于部署
  • Kubernetes已准备好示例EKS清单

先决条件

  • 具有Athena访问权限的AWS帐户
  • 具有适当权限的AWS凭据
  • Docker用于本地开发/测试
  • 用于生产部署的Kubernetes/EKS

环境变量

使用以下环境变量配置服务器:

变量 描述 默认值
AWS_REGION 雅典娜的AWS区域 us-east-1
ATHENA_CATALOG Athena目录名称 AwsDataCatalog
ATHENA_DATABASE 要使用的默认数据库 无
ATHENA_WORKGROUP 要使用的Athena工作组 primary
ATHENA_OUTPUT_LOCATION 查询结果的S3位置 无(必填)
HOST 主机绑定服务器 0.0.0.0
PORT 要收听的端口 8050

可用工具

MCP服务器为n8n AI代理提供以下工具:

execute_query

对Athena执行SQL查询并检索结果。

参数:

  • query (字符串,必填):要执行的SQL查询
  • database (字符串,可选):数据库名称
  • catalog (字符串,可选):目录名称
  • output_location (字符串,可选):S3位置显示结果
  • workgroup (字符串,可选):工作组名称
  • max_results (整数,可选):要返回的最大结果数
  • max_wait_seconds (整数,可选):等待查询完成的最长时间

列表_数据库

列出目录中的可用数据库。

参数:

  • catalog (字符串,可选):目录名称

list_tables

列出特定数据库中的表。

参数:

  • database (字符串,必填):数据库名称
  • catalog (字符串,可选):目录名称

获取表数据

获取特定表的元数据,包括列定义。

参数:

  • table (字符串,必填):表名
  • database (字符串,必填):数据库名称
  • catalog (字符串,可选):目录名称

地方发展

安装

  1. 克隆存储库:
git clone https://github.com/yourusername/aws-athena-mcp-server.git
cd aws-athena-mcp-server
  1. 安装依赖项:
pip install -r requirements.txt
  1. 配置AWS凭据:
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_REGION=your_region
export ATHENA_OUTPUT_LOCATION=s3://your-bucket/folder/
  1. 运行服务器:
python main.py

服务器将在以下时间可用http://localhost:8050.

Docker设置

构建Docker镜像

docker build -t athena-mcp-server:latest .

运行Docker容器

docker run -p 8050:8050 \
  -e AWS_REGION=us-east-1 \
  -e ATHENA_OUTPUT_LOCATION=s3://your-bucket/folder/ \
  -e AWS_ACCESS_KEY_ID=your_access_key \
  -e AWS_SECRET_ACCESS_KEY=your_secret_key \
  athena-mcp-server:latest

部署到AWS EKS

先决条件

  • 配置了适当权限的AWS CLI
  • kubectl 已安装并配置为连接到EKS集群
  • 安装Docker以构建镜像

部署步骤

  1. 构建Docker镜像并将其推送到ECR:
# Create ECR repository if it doesn't exist
aws ecr create-repository --repository-name athena-mcp-server

# Get ECR login command
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com

# Build and tag the image
docker build -t ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/athena-mcp-server:latest .

# Push the image to ECR
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/athena-mcp-server:latest
  1. 为EKS服务帐户创建IAM角色:
# Create IAM policy
aws iam create-policy \
  --policy-name AthenaQueryPolicy \
  --policy-document file://k8s/aws-policy.json

# Create IAM role for service account (IRSA)
eksctl create iamserviceaccount \
  --name athena-mcp-server \
  --namespace default \
  --cluster your-eks-cluster \
  --attach-policy-arn arn:aws:iam::${AWS_ACCOUNT_ID}:policy/AthenaQueryPolicy \
  --approve \
  --override-existing-serviceaccounts
  1. 用实际值更新Kubernetes清单占位符:
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
export AWS_REGION=us-east-1
export ATHENA_DEFAULT_DATABASE=your_database
export ATHENA_WORKGROUP=primary
export ATHENA_OUTPUT_LOCATION=s3://your-bucket/athena-results/

# Replace variables in YAML files
envsubst < k8s/deployment.yaml > k8s/generated/deployment.yaml
envsubst < k8s/serviceaccount.yaml > k8s/generated/serviceaccount.yaml
  1. 应用Kubernetes清单:
kubectl apply -f k8s/generated/serviceaccount.yaml
kubectl apply -f k8s/generated/deployment.yaml
kubectl apply -f k8s/generated/service.yaml
  1. 验证部署:
kubectl get pods -l app=athena-mcp-server
kubectl get service athena-mcp-server
  1. (可选)如果需要外部访问,请创建入口资源。

与n8n集成

要将此MCP服务器与n8n一起使用,请执行以下操作:

  1. 将MCP服务器部署到您的基础架构
  2. 使用适当的系统提示配置n8n AI Agent节点(请参阅 docs/n8n_system_prompt_template.md)
  3. 从n8n连接到MCP服务器端点

n8n AI代理系统提示模板

在中使用模板 docs/n8n_system_prompt_template.md 用于n8n AI Agent节点系统提示。此模板指导AI:

  • 了解数据库模式
  • 制定高效的SQL查询
  • 通过MCP服务器执行查询
  • 清晰地呈现结果

使用您特定的Athena数据库结构和常见查询模式自定义模板。

文档

其他文档可以在 docs/ 目录:

  • n8n_system_prompt_template.md:n8n AI Agent系统提示模板
  • implementation_guide.md:详细的实施指南
  • architecture.md:架构图和说明
  • troubleshooting.md:常见问题的解决方案
  • n8n_integration_example.md:示例n8n工作流
  • examples/:包含特定用例示例提示的目录

许可证

麻省理工学院

贡献

欢迎投稿!请随时提交拉取请求。