【问题标题】:Confusion Around Creating a VPC Access Connector围绕创建 VPC 访问连接器的困惑
【发布时间】:2020-04-22 05:49:57
【问题描述】:

我正在尝试set up Serverless VPC access

无服务器 VPC 访问使您能够从 Cloud Functions 直接连接到 Compute Engine VM 实例、Memorystore 实例、Cloud SQL 实例,

听起来不错。但是文档对初学者并不是超级友好。第 2 步是创建一个连接器,对此我有几个问题:

在网络字段中,选择要连接的 VPC 网络。

我的下拉菜单只包含“默认”。这是正常的吗? IO 应该在这里看到什么?

在 IP 范围字段中,输入未使用的 CIDR /28 IP 范围。此范围内的地址用作通过连接器发送的流量的源地址。此 IP 范围不得与您的 VPC 网络中的任何现有 IP 地址预留重叠。

我不知道在这里做什么。我尝试使用linked document 中的信息首先)输入我选择的区域的 IP,然后)输入该区域以外的 IP。两者都导致创建时出现错误的连接器。 "Connector is in a bad state, manual deletion is recommended"

如果创建失败,文档会继续执行几个故障排除步骤:

指定一个不与 VPC 网络中任何现有 IP 地址预留重叠的 IP 范围。

我不知道这是什么意思。也许就像,如果我有其他连接器,我应该确保新连接器的 IP 范围不与那些重叠。这只是一个猜测,但无论如何我都没有。

授予您的项目使用 ID 为 serverless-vpc-access-images 的项目中的 Compute Engine 虚拟机映像的权限。有关如何相应更新组织政策的信息,请参阅设置图像访问限制。

这使我向another document 询问有关更新我组织的“图像政策”的信息。这件事让我如此难以理解,我什至认为我不应该在这里。

这一切都始于wanting to connect to a SQL Server instance from Firebase。创建 VPC 连接器似乎是一个很好的步骤,但我遇到了每一个障碍。云居民可以帮我解决这些困惑中的一些问题吗?

【问题讨论】:

  • 这对您有帮助吗...the-swamp.info/blog/…
  • @Kolban 是的,这很有帮助。但是我认为我对私有 IP 位有点困惑。当我尝试在 GCP=>SQL=>Connections=>Private IP 复选框下选择它时,我想我会看到一个可以连接的私有 IP。然而事实并非如此。它只是说“此实例将使用现有的托管服务连接”。我想,好吧,也许这意味着,继续使用你的旧公共 IP,但这也不起作用。有什么想法吗?
  • @Kolban 我尝试使用创建连接器时使用的 IP,但这也不起作用:/
  • 我进行了一些测试。我创建了一个 MySQL 数据库并要求它提供私有 IP。我有一个 RFC1917 IP。那里没有问题。一切似乎都奏效了。我不确定你的问题......我没有看到一个。我认为掌握 VPC 网络非常重要。这是 GCP 逻辑网络。将其视为您的 Compute Engine 和 Cloud SQL 实例拥有其 IP 地址的软件网络。这是一个专用网络。您的目标是您的云功能最终能够将流量路由到它,因此您的数据库将是私有的(没有 Internet/公共)。
  • @SebastianG 我修好了...是的,这是我的子网,我创建了一个范围为 10.0.0.0/20 而不是 10.0.0.0/8 的新子网

标签: google-cloud-platform cloud google-cloud-sql vpc


【解决方案1】:

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

1.创建无服务器 VPC 访问

我认为最好的参考是遵循doc 中的步骤。在步骤 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 实例。还要检查这些steps,以便在创建时为您的实例配置私有 IP,或者如果您已经创建了实例,您可以检查this。记下私有 IP,因为您稍后将使用它。

3.创建云函数

在创建 Cloud Function 之前,您必须授予 CF 服务帐户使用 VPC 的权限。请关注这些steps

然后按照这些steps 配置您的函数的连接器以使用 VPC。在第 5 步中,它说明了以下内容:

在 VPC 连接器字段中,按以下格式输入连接器的完全限定名称:

projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME

无需使用此格式添加您的 VPC。已经有一个列表,您可以在其中选择您的 VPC。最后部署你的函数。

我写了一个小函数来测试连接。我更喜欢使用 Python,但它需要比 NodeJS 更多的系统依赖项。

index.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);
        });
    });
};

package.json

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "express": "4.17.1",
    "mssql": "6.0.1"
  }
}

仅此而已! :D

值得一提的是,此过程更多是关于将 Cloud Functions 连接到 SQL Server,因为已经有一种更简单的方法可以将 CF 连接到 PostgreSQL 和 MySQL。

【讨论】:

  • 嗨,我已经完成了所有这些步骤,但如果我尝试将其添加到我的特定网络,我的连接器仍然会导致错误的状态 - 如果我只选择“默认”,它将能够创建连接器,否则总是导致相同的错误状态。
  • 嗨,当我选择 asia-south1 区域时,它总是给出错误的状态错误。但是,当我选择 us-central1 区域时,我能够创建一个。有什么解决办法吗?
  • @saxenarishav 你能解决这个问题吗?显然这个地区的每个人都有问题。
  • 这个地区的问题还在继续。有人找到解决方案了吗?
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2020-06-15
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多