【发布时间】:2020-07-01 07:56:09
【问题描述】:
这两种情况都有几个很好的答案 - 但没有组合在一起。
1.我需要通过白名单静态调用外部 API
知识产权。
见:Associating Cloud Function egress with a static IP address
a) 从 Cloud Function 调用外部 API
b) 通过 vpcnetwork-1 上的 VPC 连接器路由来自此 Cloud Function 的所有出口(IP 地址范围 = 10.8.10.0/28)
c) 使用云 NAT
通过 [STATIC IP] 路由 vpcnetwork-1 上的所有流量
(由外部 API 列入白名单)
2。接下来,我需要获取该 API 数据并将其发送到 Cloud SQL
实例(本例中为 MySQL)。
见:Connecting to Cloud SQL from Cloud Functions
a) 创建一个 UNIX 套接字路径
连接到 [Cloud SQL 实例]
当我使用 VPC 连接器(如上所示)运行时,我得到:
1) 成功!我使用列入白名单的 IP 地址收到了 API 数据
2) CONNECTION REFUSED by [Cloud SQL Instance] - 因为我使用的是静态外部 IP? socketpath 是使用外部的,还是在我的 Google Cloud 项目中连接?
如果我从我的 Cloud Function 中删除 VPC 连接器,我会得到:
1) CONNECTION REFUSED - 此 IP 未列入白名单(因为我不再使用静态 IP)
2) 成功!我现在可以连接到 [Cloud SQL Instance](使用 UNIX 套接字路径、用户 ID、密码)
我怎样才能让这两者在同一个云函数中工作?
我看到我可以“仅通过 VPC 连接器将请求路由到私有 IP”,但我真的想要相反的结果。我只想将外部请求路由到 VPC 连接器,使用我的静态 IP,然后在我的 GCP 中保留我的私有路由以进行连接。
添加:我正在使用Javascript mysql 连接到 Cloud SQL。
var pool = mysql.createPool({ socketPath: '/cloudsql/[instance_connection_name]',
user: uid,
password: pwd,
database: 'mysql_db' });
var result = pool.query(sql, {}, (err,result)=> {});
不使用 VPC 连接器也可以。当我使用具有静态外部 IP 地址的 VPC 连接器时,此连接被拒绝。是不是因为 VPC 连接器和 Cloud SQL 实例不在同一个 VPC 上?我不认为 Cloud SQL 与 VPC 相关联,是吗?
【问题讨论】:
-
能否贴出从云函数连接到clodsql的代码。我写了一个答案应该如何在 python CONNECTING FROM GOOGLE CLOUD FUNCTIONS TO CLOUD SQL USING TCP AND UNIX DOMAIN SOCKETS 2020 中完成
-
您应该能够使用云 SQL 实例 (tcp) 的 vpc 连接器和内部 IP 地址从云函数连接到云 sql。我有这是我的帖子。
-
@marian.vladoi 我正在使用 Javascript mysql
var pool = mysql.createPool({ socketPath: '/cloudsql/[instance_connection_name]', user: uid, password: pwd, database: 'mysql_db' }); var result = pool.query(sql, {}, (err,result)=> {});连接我如何检查这是否使用 TCP 连接?当我不使用 VPC 连接器时它工作正常。当我通过 VPC 连接器连接此功能时,此连接给出“CONNECTION REFUSED”。 -
假设您在我之前的回答中执行了第 9 步,创建了一个服务帐户并为您的云功能分配了正确的权限,您必须仅使用内部 ip 创建一个云 sql 实例并连接到内部 ip实例的地址,使用
host:internall_ip_cloudsql而不是socketPath,注意我之前的回答并检查我如何创建数据库,如何创建服务帐户,如何创建vpc连接器以及如何部署云功能,我能够使用 python 连接 -
您的连接字符串应如下所示:
var pool = mysql.createPool({ host : '10.36.0.3(internal ip of cloud sql instance)', user : 'root', password : 'root', database : 'guess', port: 3306 });
标签: mysql google-cloud-platform google-cloud-functions google-cloud-sql google-cloud-networking