我正在尝试在Dataproc集群上安装Cloud MySQL Proxy,并以初始化操作为例here。我删除了所有的hive-metadata部分,因为我不需要它。代理已安装,但我无法连接到我的实例。创建的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
而不是使用元数据键来实现此功能,但我想知道为什么它不能像示例中提供的那样工作。
答案 0 :(得分:2)
Cloud SQL代理如何解释标志以及get_metadata_value如何解释其输入方面存在细微差别。
使用get_metadata_value时,假定要读取的属性相对于
http://metadata.google.internal/computeMetadata/v1/instance/
而在Cloud SQL代理的情况下,所有路径都应该相对于:
http://metadata.google.internal/computeMetadata/v1/
因此,如果您打算让Cloud SQL代理读取实例元数据,请传入:
-instances_metadata=instance/attributes/additional-cloud-sql-instances