CircleCI配置添加AWS RDS白名单失败,测试无法连接数据库
CircleCI 添加IP白名单后无法连接AWS RDS数据库
我配置了CircleCI用于合并到master分支前运行测试,启动服务器后需要连接受安全组保护的AWS RDS数据库,但尝试用Orb将CircleCI的IP加入白名单后,仍无法成功连接。
我的CircleCI配置
version: 2.1 orbs: aws-white-list-circleci-ip: configure/aws-white-list-circleci-ip@1.0.0 aws-cli: circleci/aws-cli@0.1.13 jobs: aws_setup: docker: - image: cimg/python:3.11.0 steps: - aws-cli/install - aws-white-list-circleci-ip/add build: docker: - image: cimg/node:18.4 steps: - checkout - run: node --version - restore_cache: name: Restore Npm Package Cache keys: # Find a cache corresponding to this specific package-lock.json checksum # when this file is changed, this key will fail - v1-npm-deps-{{ checksum "package-lock.json" }} # Find the most recently generated cache used from any branch - v1-npm-deps- - run: npm install - run: name: start the server command: npm start background: true - save_cache: name: Save Npm Package Cache key: v1-npm-deps-{{ checksum "package-lock.json" }} paths: - ./node_modules - run: name: run tests command: npm run test - aws-white-list-circleci-ip/remove workflows: build-workflow: jobs: - aws_setup: context: aws_context - build: requires: - aws_setup context: aws_context
上下文环境变量
AWS_ACCESS_KEY_ID AWS_DEFAULT_REGION AWS_SECRET_ACCESS_KEY GROUPID
错误截图

使用的Orb
configure/aws-white-list-circleci-ip@1.0.0(用于自动管理CircleCI IP在AWS安全组的白名单)
问题排查与解决方法
1. 核心问题:跨Job的IP不统一
CircleCI每个Job会分配独立的公网IP,你在aws_setup Job中添加的白名单IP是该Job容器的IP,而实际运行测试、连接数据库的build Job用的是另一组IP,导致白名单无效。
- 修复方案:将IP白名单的添加/移除步骤移到
buildJob内部,确保白名单绑定的是当前运行测试的Job IP。修改后配置如下:
version: 2.1 orbs: aws-white-list-circleci-ip: configure/aws-white-list-circleci-ip@1.0.0 aws-cli: circleci/aws-cli@0.1.13 jobs: build: docker: - image: cimg/node:18.4 steps: - aws-cli/install - aws-white-list-circleci-ip/add - checkout - run: node --version - restore_cache: name: Restore Npm Package Cache keys: - v1-npm-deps-{{ checksum "package-lock.json" }} - v1-npm-deps- - run: npm install - run: name: start the server command: npm start background: true - save_cache: name: Save Npm Package Cache key: v1-npm-deps-{{ checksum "package-lock.json" }} paths: - ./node_modules - run: name: run tests command: npm run test - aws-white-list-circleci-ip/remove workflows: build-workflow: jobs: - build: context: aws_context
2. 安全组规则校验
检查AWS RDS对应的安全组:
- 确认入站规则开放了RDS服务的默认端口(如MySQL 3306、PostgreSQL 5432)
- 协议设置为TCP
- 白名单IP的CIDR格式正确(通常为
x.x.x.x/32)
3. 验证IP准确性
在build Job中添加打印公网IP的步骤,确认Orb获取的IP是否正确:
- run: name: Print public IP command: curl ifconfig.me
将打印出的IP手动添加到安全组测试,若能正常连接,说明Orb的IP获取逻辑存在问题,可更换Orb或手动编写IP白名单管理脚本。
4. 数据库连接配置检查
确认测试环境的数据库连接字符串:
- RDS端点、端口、用户名、密码无拼写错误
- RDS实例处于可用状态,且允许公网访问
内容的提问来源于stack exchange,提问作者Mina Fawzy
相关产品推荐
相关产品推荐

