125*_*748 15 cloud vpc google-cloud-sql google-cloud-platform
我正在尝试设置无服务器 VPC 访问
无服务器 VPC 访问使您能够从 Cloud Functions 直接连接到 Compute Engine VM 实例、Memorystore 实例、Cloud SQL 实例、
听起来很棒。但是文档对初学者来说并不是超级友好。第 2 步是创建一个连接器,对此我有几个问题:
在网络字段中,选择要连接的 VPC 网络。
我的下拉列表只包含“默认”。这是正常的吗?IO 应该在这里看到什么?
在 IP 范围字段中,输入未使用的 CIDR /28 IP 范围。此范围内的地址用作通过连接器发送的流量的源地址。此 IP 范围不得与您的 VPC 网络中的任何现有 IP 地址预留重叠。
我不知道在这里做什么。我尝试使用链接文档中的信息首先)从我选择的区域输入一个 IP,然后)从该区域之外输入一个 IP。两者都导致创建的连接器出现错误。“ Connector is in a bad state, manual deletion is recommended”
如果创建失败,文档会继续执行几个故障排除步骤:
指定不与 VPC 网络中任何现有 IP 地址预留重叠的 IP 范围。
我不知道这是什么意思。也许就像,如果我有其他连接器,我应该确保新连接器的 IP 范围与那些不重叠。这只是一个猜测,但无论如何我没有。
授予您的项目使用 ID serverless-vpc-access-images 项目中的 Compute Engine 虚拟机映像的权限。有关如何相应地更新组织策略的信息,请参阅设置图像访问限制。
这将我带到另一个关于更新我组织的“图像策略”的文档。这让我太不理解了,我什至认为我不应该在这里。
这一切都始于只想从 Firebase 连接到 SQL Server 实例。创建 VPC 连接器似乎是一个很好的步骤,但我刚刚遇到了每一个障碍。云居民可以帮助我解决其中的一些困惑吗?
我认为您已经解决了问题,但我会写一个答案来总结所有步骤以供将来参考。
1. 创建无服务器 VPC 访问
我认为最好的参考是按照本文档中的步骤操作。在第7步,它说如下:
在 IP 范围字段中,输入未保留的 CIDR /28 IP 范围。
例如,您可以使用的 IP 是 10.8.0.0/28 甚至 10.64.0.0/28,条件是它没有用于任何其他网络。您可以转到VPC 网络 > VPC 网络检查正在使用的 IP 。在网络字段中,您将拥有“默认”选项,所以没关系。
这可能需要几分钟时间,因此在此期间您可以创建 SQL Server/MySQL/PostgreSQL 实例。
2. 创建 CloudSQL 实例
创建您想要的实例(MySQL / PostgreSQL / SQL Server)。在您的情况下,它将是一个 SQL Server 实例。还要检查这些步骤以在创建时为您的实例配置私有 IP,或者如果您已经创建了一个实例,您可以检查这个。记下私有 IP,因为您稍后将使用它。
3. 创建一个云函数
在创建 Cloud Function 之前,您必须授予 CF 服务帐户使用 VPC 的权限。请按照以下步骤操作。
然后按照以下步骤配置函数的连接器以使用 VPC。在第 5 步中,它说如下:
在 VPC 连接器字段中,按以下格式输入连接器的完全限定名称:
Run Code Online (Sandbox Code Playgroud)projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
无需使用此格式添加您的 VPC。已经有一个列表,您可以在其中选择您的 VPC。最后部署你的函数。
我写了一个小函数来测试连接。我更喜欢使用 Python,但它比 NodeJS 需要更多的系统依赖项。
索引.js:
var express = require('express');
var app = express();
var sql = require("mssql");
exports.helloWorld = (req, res) => {
var config = {
user: 'sqlserver',
password: 'password',
server: 'Your.SQL.Priavte.IP',
database: 'dbname'
};
// connect to your database
sql.connect(config, function (err) {
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.query('select * from a_table', function (err, recordset) {
if (err) console.log(err)
// send records as a response
res.send(recordset);
});
});
};
Run Code Online (Sandbox Code Playgroud)
包.json :
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"express": "4.17.1",
"mssql": "6.0.1"
}
}
Run Code Online (Sandbox Code Playgroud)
就这样!:D
值得一提的是,此过程更多地是关于将 Cloud Functions 连接到 SQL Server,因为已经有一种更简单的方法将 CF 连接到 PostgreSQL 和 MySQL。
| 归档时间: |
|
| 查看次数: |
5104 次 |
| 最近记录: |