Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何将AI平台培训工作连接到云SQL PSQL DB?_Google Cloud Platform_Google Cloud Sql_Google Cloud Ml_Gcp Ai Platform Training - Fatal编程技术网

Google cloud platform 如何将AI平台培训工作连接到云SQL PSQL DB?

Google cloud platform 如何将AI平台培训工作连接到云SQL PSQL DB?,google-cloud-platform,google-cloud-sql,google-cloud-ml,gcp-ai-platform-training,Google Cloud Platform,Google Cloud Sql,Google Cloud Ml,Gcp Ai Platform Training,我有一个简单的python程序,可以连接到google云平台上的PSQL数据库。当我在本地运行它时,它通过主机地址(公共IP)、端口、用户名和密码成功地连接到DB(只有在我手动告诉DB允许我的本地IP地址的情况下) 当我将其打包到Docker映像中并在本地运行时,它会成功连接(仅当我手动告诉DB允许我的本地IP地址时) 这就是它失败的地方: 如果我停止告诉DB允许我的本地IP地址,它就会失败 另外,在我将docker图像推送到google云容器注册表之后。 然后使用ai平台培训作业抓取容器并通过

我有一个简单的python程序,可以连接到google云平台上的PSQL数据库。当我在本地运行它时,它通过主机地址(公共IP)、端口、用户名和密码成功地连接到DB(只有在我手动告诉DB允许我的本地IP地址的情况下)

当我将其打包到Docker映像中并在本地运行时,它会成功连接(仅当我手动告诉DB允许我的本地IP地址时)

这就是它失败的地方: 如果我停止告诉DB允许我的本地IP地址,它就会失败

另外,在我将docker图像推送到google云容器注册表之后。 然后使用ai平台培训作业抓取容器并通过代码执行操作:

gcloud ai-platform jobs submit training $JOB_NAME   --region $REGION   --master-image-uri $IMAGE_URI  --   app.py --user_arg='Y'
我通过标志与图像通信,我确信图像响应正常。但是,当我尝试连接到PSQL DB时,我得到一个错误:

psycopg2.OperationalError: could not connect to server: Connection timed out.
Is the server running on host ... and accepting TCP/IP connections on port ...?
我不想使用云sql代理来解决这个问题,也不想设置任何类型的静态IP并在DB设置中手动“允许”它

我想通过IAM服务器帐户促进连接。我为所有服务授予了以下权限: 云SQL管理员、云SQL编辑器、云SQL客户端、云SQL实例用户、云SQL服务代理

正如你所知道的,我给了每个我可以的帐户权限,但它仍然无法连接。任何帮助都将不胜感激


另外,当我呼叫gcloud ai平台作业提交培训时。。。我知道某个服务帐户创建了一个实例来执行作业。我认为是这个实例无法连接。我已经读了这么多gcloud文档,我感到困惑。也许我遗漏了一些明显的东西:(

当你在AI平台上运行作业时,你在无服务器环境下运行它。不是在你的项目中,而是在Google端的某个地方,但不是在你的项目中。因此,创建的VM不在你的项目中(你不会在计算引擎页面中看到它们),因此也不在你的VPC中

因此,打开端口5432是完全无用的,因为它不是同一个网络。唯一的解决方案是在数据库上保留一个公共IP(没有网络授权,只有公共IP)并使用云SQL代理(即使你不想)

当然,另一个解决方案是在PSQL公共IP上授权0.0.0.0/0网络,但这绝对不是一个好建议

然而,我有一点要说:在培训工作中直接使用数据库不是正确的模式。事实上,在培训工作中,你需要速度、效率和减少延迟。使用数据库对这一点来说并不是很好

正确的模式可能是

  • 在之前准备好数据(从数据库中提取数据,并将其保存到文件中(例如csv格式))
  • 将文件存储在区域存储桶中(如果效率更高,则不是多区域存储)
  • 将培训作业更改为使用文件而不是SQL查询
  • 在与您所在地区相同的地区开展培训工作

当您使用AI平台运行作业时,您可以在无服务器环境下运行作业。不是在您的项目中,而是在Google端的某个地方,但不是在您的项目中。因此,创建的VM不在您的项目中(您不会在计算引擎页面中看到),因此也不在您的专有网络中

因此,打开端口5432是完全无用的,因为它不是同一个网络。唯一的解决方案是在数据库上保留一个公共IP(没有网络授权,只有公共IP)并使用云SQL代理(即使你不想)

当然,另一个解决方案是在PSQL公共IP上授权0.0.0.0/0网络,但这绝对不是一个好建议

然而,我有一点要说:在培训工作中直接使用数据库不是正确的模式。事实上,在培训工作中,你需要速度、效率和减少延迟。使用数据库对这一点来说并不是很好

正确的模式可能是

  • 在之前准备好数据(从数据库中提取数据,并将其保存到文件中(例如csv格式))
  • 将文件存储在区域存储桶中(如果效率更高,则不是多区域存储)
  • 将培训作业更改为使用文件而不是SQL查询
  • 在与您所在地区相同的地区开展培训工作

请查看此功能:

请查看此功能:

这几乎肯定是防火墙规则的问题。请查看入口规则,并检查允许哪些IP地址访问数据库的端口5432。感谢您的提示,我正在考虑允许http和https请求专门访问我的服务帐户,但这是错误的的仍不起作用。我还编辑了该问题,以更准确地反映其作用。(我最初发布该问题时出错)为了允许连接到数据库,您需要打开端口5432,而不是HTTP(s)这几乎可以肯定是防火墙规则的问题。查看入口规则并检查允许哪些IP地址访问DB的端口5432。感谢您的提示,我正在研究专门允许http和https请求访问我的服务帐户,但它仍然不起作用。我还编辑了这个问题,以更准确地反映什么起作用。(我最初发布问题时出错)为了允许连接到数据库,您需要打开端口5432,而不是HTTP(S)RE:您的第一段-->但不是“Google Cloud ML引擎服务代理”负责执行作业?我假设如果我授予此代理正确的权限,作业将能够访问DB。RE:授权所有IP-->此操作目前有效,但我很可能会使用与您建议类似的存储桶。触发数据输入的任何操作都会触发ETL以获取存储桶中所需的内容。服务ce account service agent加载到Google无服务器世界中以访问您的资源。您可以访问云SQL服务(例如,使用云SQL代理),但它不会路由到networ