后端与接口
用 CLI/REST API/Terraform…
当需要通过命令行、REST API、Python 脚本或 Terraform 创建、暂停、恢复、扩缩容或删除 Neo4j Aura 实例时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 CLI/REST API/Terra特定
解决思路
- 安装 aura-cli(二进制方式,非 pip):macOS 执行 `curl -L https://github.com/neo4j/aura-cli/releases/latest/download/aura-cli-darwin-amd64.tar.gz | tar xz`,然后 `sudo mv aura-cli /usr/local/bin/`,用 `aura-cli -v` 验证。
- 添加凭证(从 console.neo4j.io → Account Settings → API Credentials 获取):`aura-cli credential add --name "my-creds" --client-id "$AURA_CLIENT_ID" --client-secret "$AURA_CLIENT_SECRET"`,再执行 `aura-cli credential use --name "my-creds"`,用 `aura-cli instance list --output table` 验证。
- REST API 获取 Bearer Token:向 `POST https://api.neo4j.io/oauth/token` 发送 `--user "${AURA_CLIENT_ID}:${AURA_CLIENT_SECRET}"`、`Content-Type: application/x-www-form-urlencoded`、`grant_type=client_credentials`,用 jq 提取 `.access_token`;Token 有效期 3600 秒,收到 403 时刷新。
- 列出 tenants(projects):CLI 用 `aura-cli tenants list --output table` 复制 TENANT_ID;REST 用 `curl -s https://api.neo4j.io/v1/tenants -H "Authorization: Bearer $TOKEN" | jq '.data[] | {id, name}'`。
- 创建实例时立即捕获输出:初始密码只显示一次、不可恢复,丢失只能删除重建;先把响应写入 `aura-creds.json` 再做其他事。CLI 用 `aura-cli instance create --name ... --cloud-provider gcp --region europe-west1 --type professional-db --tenant-id "$TENANT_ID" --output json | tee aura-creds.json`,再用 jq 提取 `.id` 和 `.password`。
- REST 创建实例:`POST https://api.neo4j.io/v1/instances`,请求体必填字段 `name`、`cloud_provider`(gcp/aws/azure)、`region`、`type`、`tenant_id`,可选 `memory`(1GB–384GB)和 `version`(默认 5);从响应 `.data.id` 和 `.data.password` 提取。
- 所有生命周期操作(创建、暂停、恢复、扩缩容)都是异步的:必须轮询直到状态为 `running`(暂停操作则为 `paused`)才能连接或执行下一步。轮询函数每 10 秒查询一次 `aura-cli instance get --instance-id "$INSTANCE_ID" --output json | jq -r '.status'`,超过 MAX_WAIT(默认 600 秒)超时,遇到 `destroying` 立即报错退出。
- 状态生命周期:`creating → running → pausing → paused → resuming → running`,以及 `destroying → (gone)`。
- 写入 .env 并验证:`CONNECTION_URI="neo4j+s://${INSTANCE_ID}.databases.neo4j.io"`,写入 NEO4J_URI、NEO4J_USERNAME=neo4j、NEO4J_PASSWORD、NEO4J_DATABASE=neo4j、AURA_INSTANCE_ID;确保 `.env` 在 `.gitignore` 中;用 `cypher-shell -a "$CONNECTION_URI" -u neo4j -p "$PASSWORD" "RETURN 'connected' AS status"` 验证连通性。
- 暂停实例:要求状态为 `running`,执行 `aura-cli instance pause --instance-id "$INSTANCE_ID"`,然后轮询到 `paused`(600 秒)。
- 恢复实例:要求状态为 `paused`,执行 `aura-cli instance resume --instance-id "$INSTANCE_ID"`,然后轮询到 `running`(900 秒,恢复可能更久)。
- 扩缩容(仅 Professional 及以上,Free 不支持):要求状态为 `running`,实例在扩缩容期间保持可用;v1.7 CLI 不支持,只能用 REST:`PATCH https://api.neo4j.io/v1/instances/$INSTANCE_ID`,请求体 `{"memory": "8GB"}`,然后轮询到 `running`;不能缩减到低于当前使用量。
- 删除实例:不可逆,先导出快照;CLI 用 `aura-cli instance delete --instance-id "$INSTANCE_ID"`,REST 用 `DELETE https://api.neo4j.io/v1/instances/$INSTANCE_ID`;无需轮询,立即生效。
- Python CI/CD 脚本:用 `requests` 实现 `get_token()`(POST oauth/token,auth=(CLIENT_ID, CLIENT_SECRET),data={"grant_type": "client_credentials"})、`auth_headers()`、`create_instance()`(payload 含 tenant_id、version=5 及 kwargs,返回 `.data`)、`poll_status()`(每 10 秒查询,超时抛 TimeoutError,遇到 destroying 抛 RuntimeError);创建后立即把密码写入安全 vault。
- 选择实例层级:AuraDB Free(`free-db`,1GB,无 GDS/副本,开发演示,≤200k 节点/400k 关系,72 小时不活动自动暂停,暂停超 30 天删除,不可扩缩容);AuraDB Professional(`professional-db`,2–64GB,GDS 插件,生产);AuraDB Business Critical(`business-critical`,4–384GB,GDS 插件,有副本,HA/多 AZ/SLA);AuraDB VDC(`enterprise-db`,自定义,GDS,有副本,专用基础设施/合规);AuraDS Professional(`professional-ds`,2–64GB,内置 GDS,数据科学);AuraDS Enterprise(`enterprise-ds`,自定义,GDS,有副本,企业 GDS)。
- 选择区域:AWS 支持 us-east-1、us-east-2、us-west-2、eu-west-1、eu-west-3、eu-central-1、ap-southeast-1、ap-southeast-2、ap-south-1、sa-east-1;GCP 支持 europe-west1、europe-west3、europe-west4、us-central1、us-east1、us-east4、asia-east1、asia-northeast1、asia-southeast1、australia-southeast1;Azure 支持 eastus、eastus2、westeurope、northeurope、uksouth、southeastasia、brazilsouth、koreacentral;企业层级每云厂商额外 20+ 区域,Free 仅 GCP 且区域有限。
- 使用 Terraform neo4j/neo4j-aura provider:配置 `provider "aura"` 的 client_id/client_secret(或环境变量 AURA_CLIENT_ID/AURA_CLIENT_SECRET),定义 `resource "aura_instance"`(name、type、cloud_provider、region、memory、tenant_id),输出 neo4j_uri 和敏感的 neo4j_password;`terraform apply` 后仍需轮询状态,因为资源创建返回时数据库未必已 `running`。
- 处理常见错误:403 表示 Token 过期(1 小时 TTL)需重新获取;409 表示名称已存在;422 表示状态不对(暂停需 running、恢复需 paused、扩缩容不能低于当前使用量);区域未找到说明该层级不支持;凭证丢失只能删除重建;429 表示触发限流(Free 25 请求/分钟,Pro+ 125 请求/分钟),轮询间隔加 `time.sleep(2)`;`instance list` 为空说明凭证不对,用 `aura-cli credential use --name <name>` 切换。
- 遵守速率限制:Free/Pro Trial 25 请求/分钟,Pro 有账单/BC/VDC 125 请求/分钟;Free 轮询间隔 ≥10 秒,Pro+ 5 秒安全;5xx 响应带 `Retry-After` 头时等待指定秒数再重试。
- 安全规则:初始凭证写入 `.env` 并确认 `.env` 在 `.gitignore` 中;绝不在 CI 日志打印 PASSWORD,写入密钥 vault(AWS Secrets Manager、GitHub secret、Vault);用 `from_env()`/`os.environ`,绝不硬编码凭证;`.env` 不存在时用 python-dotenv 的 `load_dotenv()` 自动加载,加载失败才提示用户。
- 需要最新文档时用 WebFetch 查询:REST API 规范 `https://neo4j.com/docs/aura/platform/api/specification/`、CLI 参考 `https://neo4j.com/docs/aura/aura-cli/`、区域列表 `https://neo4j.com/docs/aura/managing-instances/regions/`、认证细节 `https://neo4j.com/docs/aura/api/authentication/`、实例操作 `https://neo4j.com/docs/aura/managing-instances/instance-actions/`。
- 完成检查清单:.env 已创建且已加入 .gitignore;初始凭证已立即存入安全存储;创建后已调用 poll_status 且状态为 running 才连接;暂停/恢复后已调用 poll_status;层级选择正确(开发用 Free,生产用 Pro+,HA 用 BC);区域对所选层级和云厂商可用;所有创建/列表操作都提供 Tenant ID;Token 超过 1 小时或收到 403 时刷新;删除前已由用户确认(数据永久丢失不可恢复)。
适用边界 · 注意事项
- 不要用本技能执行 Cypher 查询(应使用 neo4j-cypher-skill)。
- 不要用本技能运行 GDS 算法(应使用 neo4j-gds-skill 或 neo4j-aura-graph-analytics-skill)。
- 不要用本技能处理 neo4j-admin/cypher-shell 或应用驱动配置(应使用 neo4j-cli-tools-skill 或对应语言驱动技能)。