关于创建 VPC 访问连接器的困惑

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 连接器似乎是一个很好的步骤,但我刚刚遇到了每一个障碍。云居民可以帮助我解决其中的一些困惑吗?

Fer*_*ona 9

我认为您已经解决了问题,但我会写一个答案来总结所有步骤以供将来参考。

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 连接器字段中,按以下格式输入连接器的完全限定名称:

projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
Run Code Online (Sandbox Code Playgroud)

无需使用此格式添加您的 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。