我在App Engine上托管了NodeJS API,在Cloud SQL上托管了MySQL示例
我使用mysql2和dotenv包进行连接和环境变量访问,下面是我创建连接的方法:
import mysql from "mysql2";
import * as dotenv from "dotenv";
dotenv.config();
export const db =
process.env.NODE_ENV === "development"
? mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
})
: mysql.createConnection({
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
socketPath: `/cloudsql/${process.env.DB_INSTANCE_NAME}`,
});
我通过阅读GCP的官方文档来创建此连接,当我在本地运行它时,它工作正常,但当我将应用程序部署到App Engine时,我收到此错误:
Error: getaddrinfo ENOTFOUND 172.17.0.1:3306
我认为ip和port是代理连接或类似连接的默认值,因为我没有在任何变量上设置该ip
下面是我在app.yaml上设置环境变量的方法
runtime: nodejs14
env: standard
instance_class: F1
automatic_scaling:
min_idle_instances: 1
max_idle_instances: automatic
min_pending_latency: automatic
max_pending_latency: automatic
env_variables:
DB_USER: <db-user>
DB_PASS: <db-pass>
DB_NAME: <db-name>
NODE_ENV: production
DB_INSTANCE_NAME: <db-instance-name>
beta_settings:
cloud_sql_instances: <db-instance-name>
我已检查服务用户是否具有正确的权限和角色
我不知道我是否错过了一些配置或如果我的app.yaml需要另一件事
我曾尝试在连接创建过程中直接添加IP主机,但遇到了相同的问题
export const db =
process.env.NODE_ENV === "development"
? mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
})
: mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
socketPath: `/cloudsql/${process.env.DB_INSTANCE_NAME}`,
});
我已经为这个问题奋斗了三天,所以任何帮助对我来说都将是非常感激的
先谢了。
1条答案
按热度按时间7rtdyuoh1#
Error: getaddrinfo ENOTFOUND
表示客户端无法连接到给定的地址。这可能是由于不同的原因。请确保上面创建的示例具有公共IP地址。您可以在Google Cloud控制台中的示例概述页面上验证此设置。如果需要添加一个,请参阅Configuring public IP page以获取说明。
确保应用用于验证对Cloud SQL的调用的服务帐户具有适当的Cloud SQL角色和权限。
确保云SQL示例配置为允许从App Engine连接。INSTANCE_CONNECTION_NAME使用
project:region:instance-id
。您可以在Google Cloud控制台中的示例概述页上找到该格式。我看到您使用的是createConnection方法,而您可以使用createPool方法,该方法可以更准确地解决问题。
有关详细信息,请参阅这些文档和Link,它们可能会对您有所帮助。