NodeJs:无法从 Google App Engine 连接 Google Cloud SQL



我已经在App Engine和Cloud SQL上工作了一段时间。

最近我在我的数据库上禁用了公共访问。从那以后,我无法使用我的App Engine连接到CloudSQL(App Engine和Cloud SQL都在同一个Google Cloud Project中)。

我能够连接的唯一方法是将 CloudSQL 上的 App Engine IP 列入白名单。但是在新部署中,IP 会发生变化,因此添加静态 IP 并不是一个理想的答案。

在"云 SQL 连接"选项卡中,它显示以下内容:

App 引擎授权 默认情况下,此项目中的所有应用都经过授权

。要授权其他项目中的应用,请按照以下步骤操作。

此项目中的应用:全部已授权。在这种情况下,这是不正确的。

Cloud SQL API 和 Cloud SQL Admin API 已启用。

已经用谷歌搜索了问题,并按照文档和其他堆栈溢出问题中的步骤进行操作:

1) 无法从我的应用引擎
访问 Google Cloud SQL 数据库 2) Node JS Mysql 协议在致命错误后排队 3) Node-MySqL
中的"PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR" 4) 错误:在 mysql 节点
中出现致命错误
后无法排队查询 5) 无法从 Google App Engine
连接 Google Cloud SQL

所有这些都没有多大帮助。

connection = mysql.createConnection({ 主持人 : 'INSTANCE_CONNECTION_NAME', 用户 : "db_user", 密码 : "db_password", 数据库 : 'db_name' });

预期:Get a Connection.
实际:getaddrinfo ENOTFOUND INSTANCE_CONNECTION_NAME INSTANCE_CONNECTION_NAME:3306

不知道为什么需要两次INSTANCE_CONNECTION_NAME

让我说明一下我是否理解您的问题。

您拥有公共 IP,但已使其仅可供项目中的应用程序访问。如果是这种情况,并且鉴于您使用的是灵活的环境,我发现以下方法很有帮助

1) 建立连接时,将主机称为172.17.0.6

2) 并在 app.yaml 中指定实例概述页面中提到的INSTANCE_CONNECTION_NAME。

3) 部署并运行。

这将适用于使用 Docker 构建的灵活 NodeJs 环境。并且默认使用的DB容器在172.17.0.6,此处访问实例连接名称,并在App EngineCloudSQL DB之间建立连接。

我尝试复制您的用例场景,以下步骤对我有用。 您的 Cloud SQL 实例没有公共 IP,因此要从 App Engine 连接到该实例,您需要对这两种服务使用相同的 VPN 网络。因此,您必须编辑云SQL实例以指示要使用的网络并编辑app.yaml配置文件。 同样重要的是,这两个服务将在同一区域中运行。

app.yaml配置文件中,您必须添加以下标记:

network:
name: [YOUR_NETWORK_NAME]
subnetwork_name: [YOUR_SUBNETWORK_NAME]

并使用数据库环境变量:

env_variables:
SQL_USER: [YOUR_USER]
SQL_PASSWORD: [YOUR_PASSWORD]
SQL_DATABASE: [YOUR_DATABASE-NAME]
# e.g. my-awesome-project:us-central1:my-cloud-sql-instance
INSTANCE_CONNECTION_NAME:<INSTANCE_CONNECTION_NAME>
# [END gae_flex_mysql_env]

最后还有以下几行:

beta_settings:
cloud_sql_instances: <INSTANCE_CONNECTION_NAME>

请记住,您必须将"<>"或"[]"中的内容替换为所需的数据。

有关更多信息,您可以查看此文档 从应用引擎连接。

相关内容

  • 没有找到相关文章

最新更新