首页 > 解决方案 > 从 CircleCI 连接到远程 MySQL

问题描述

我正在尝试从 CircleCI 构建连接到远程 MySQL 服务器(通过 AWS RDS 托管)以保存一些工件。我可以从本地连接到服务器,因此我知道凭据有效(并且我尝试在本地没有任何 AWS 凭据)但是我总是遇到超时错误。

在我的应用程序中,我使用的是 nodejs,所以使用了 mysql 模块,我首先尝试:

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'foo.bar.us-east-1.rds.amazonaws.com',
  user: 'my-user',
  password: '1234',
});

connection.connect((error) => {
  if (error) {
    console.log(error);
  } else {
    console.log('good');
  }
});

正如我所说,它总是有错误。作为测试,我还尝试使用mysql-clientcli,例如:

  mysql:
    docker:
      - image: circleci/node:10-browsers
    working_directory: ~/repo
    steps:
      - checkout
      - run:
          name: Test MySQL
          command: |
            sudo apt-get update
            sudo apt-get install mysql-client
      - run: mysql -u my-user -h foo.bar.us-east-1.rds.amazonaws.com -p1234

这尝试了 2 分钟,但结果是:

ERROR 2003 (HY000): Can't connect to MySQL server on 'foo.bar.us-east-1.rds.amazonaws.com' (110 "Connection timed out")
Exited with code 1

任何人都知道同样的事情可以在本地运行没有问题但在 CircleCI 中失败的原因?

标签: mysqlamazon-web-servicesamazon-rdscircleci

解决方案


事实证明,AWS 创建了一个安全组,该组被锁定到我的个人 IP 地址。这就是为什么我可以在本地连接但在其他任何地方我无法连接的原因。编辑安全组以允许从任何地方,我的 CircleCI 任务现在可以连接到 MySQL 服务器。


推荐阅读