在 Dataproc 上安装云 SQL 代理

Installing Cloud SQL Proxy on Dataproc

我正在尝试在 Dataproc 集群上安装云 MySQL 代理,并以初始化操作为例 here。我删除了所有配置单元元数据部分,因为我不需要它。代理已安装,但我无法连接到我的实例。创建的 cloud-sql-proxy.service 文件看起来不错:

> cat /usr/lib/systemd/system/cloud-sql-proxy.service 
[Unit]
Description=Google Cloud SQL Proxy
After=local-fs.target network-online.target
After=google.service
Before=shutdown.target

[Service]
Type=simple
ExecStart=/usr/local/bin/cloud_sql_proxy   -dir=/var/run/cloud_sql_proxy    -instances_metadata=attributes/additional-cloud-sql-instances

[Install]
WantedBy=multi-user.target

此外,如果我尝试获取 attributes/additional-cloud-sql-instances 的值,它看起来不错:

> /usr/share/google/get_metadata_value attributes/additional-cloud-sql-instances
> myproject-12345:europe-west1:my-db-instance=tcp:3333

但我无法连接到实例。当我停止服务并再次启动时,我看到一条错误消息:

> /usr/local/bin/cloud_sql_proxy -dir=/var/run/cloud_sql_proxy -instances_metadata=attributes/additional-cloud-sql-instances
2017/07/03 09:23:44 Ready for new connections
2017/07/03 09:23:44 Error on receiving new instances from metadata: metadata: GCE metadata "attributes/additional-cloud-sql-instances" not defined

我做错了什么吗? 与此同时,我可以通过使用 -instances=myproject-12345:europe-west1:my-db-instance=tcp:3333 而不是使用元数据密钥来使其工作,但我想知道为什么它不能像示例中提供的那样工作。

云 SQL 代理解释标志的方式与 get_metadata_value 解释其输入的方式存在细微差别。

使用get_metadata_value时,假定要读取的属性是相对于

http://metadata.google.internal/computeMetadata/v1/instance/

而在云 SQL 代理的情况下,所有路径都应相对于:

http://metadata.google.internal/computeMetadata/v1/

因此,如果您打算让云 SQL 代理读取实例元数据,请传入:

-instances_metadata=instance/attributes/additional-cloud-sql-instances