google 计算引擎 VM 启动时自动启动 gcloud sql 代理

Automatically start gcloud sql proxy when google compute engine VM starts

我正在使用 google 计算引擎,并且有一个自动缩放实例组,可以根据需要启动新的 VM,所有这些都位于负载均衡器后面。我还在同一项目中使用 google 的云 SQL。 VM 需要连接到云 SQL 实例。

由于虚拟机的 IP 是动态的,我不能只将 IP 插入 SQL 访问配置,所以我遵循了 cloud sql proxy 设置以及来自这个非常相似问题的注释: How to connect from a pool of Google Compute Engine instances to Cloud SQL DB in the same project?

我现在可以登录到单个测试虚拟机并且 运行:

./cloud_sql_proxy -instances=PROJ_NAME:TIMEZONE:SQL_NAME=tcp:3306

一切正常,VM 连接到云 SQL 实例。

下一步是我遇到问题的地方。我如何设置 VM,以便它在从实例模板构建或刚刚重新启动时自动启动代理。显而易见的答案似乎是将上述内容推送到 VM 的启动脚本中,但这似乎不起作用。因此,使用我的单个测试 VM,我可以通过 SSH 连接到 VM 并手动 运行 cloud_sql_proxy 命令,一切正常。如果我随后在我的启动脚本中包含以下内容并重新启动它不连接的 VM:

#! /bin/bash
./cloud_sql_proxy -instances=PROJ_NAME:TIMEZONE:SQL_NAME=tcp:3306

有什么建议吗?我真的不敢相信从同一个项目中的 VM 连接到 SQL 云有这么难...

您显示的启动脚本没有显示cloud_sql_proxy的下载步骤。

您需要先下载然后启动代理。因此,您的启动脚本应如下所示:

sudo wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
sudo mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy
sudo chmod +x cloud_sql_proxy
sudo ./cloud_sql_proxy -instances=PROJ_NAME:TIMEZONE:SQL_NAME=tcp:3306 &

我选择crontab 运行 cloud_sql_proxy 在vm启动时自动

$crontab -e

并添加 @reboot cloud_sql_proxy blah blah.