使用.net内核从google cloud run连接到google cloud(mysql)

使用.net内核从google cloud run连接到google cloud(mysql),mysql,google-cloud-sql,google-cloud-run,Mysql,Google Cloud Sql,Google Cloud Run,我在google cloud run上安装了一个.net核心应用程序作为docker,这个应用程序需要连接到cloud sql(mysql) 使用专用ip地址时,它不工作。 当使用公共IP时,它是有效的,但它不是一个好的生产解决方案 这是我的连接字符串: "ConnectionString": "server=10.4.16.6;database=mydb;user=root;pwd=mypwd" 创建应用程序时,我可以选择需要连接的数据库: 但这无助于建立联系。 正在解释如何使用pytho

我在google cloud run上安装了一个.net核心应用程序作为docker,这个应用程序需要连接到cloud sql(mysql)

使用专用ip地址时,它不工作。
当使用公共IP时,它是有效的,但它不是一个好的生产解决方案

这是我的连接字符串:

"ConnectionString": "server=10.4.16.6;database=mydb;user=root;pwd=mypwd"
创建应用程序时,我可以选择需要连接的数据库:

但这无助于建立联系。

正在解释如何使用python和java。如果您不想使用公共IP,则需要依靠服务帐户连接到云SQL。但是,.net MySQL驱动程序不了解GCP IAM和服务帐户。因此,您需要使用名为
Cloud-SQL-proxy
的代理。云SQL代理了解IAM和服务帐户

流程基本上如下所示:

您的应用->常规MySQL端口->云SQL代理(安装在 应用程序的网络或本地)->CloudSQL

您需要执行以下操作:

  • 创建服务帐户
  • 云SQL客户端
    的角色分配给创建的服务帐户
  • 下载json格式的服务帐户密钥
  • Set env variable
    GOOGLE\u APPLICATION\u CREDENTIALS=C:\Downloaded.json
  • 下载
  • 运行它`cloud\u sql\u proxy-instances=projectname:regioname:instanceid=tcp:3306
  • 此时,MySQL代理已准备好在3306接受连接,请修改连接字符串以获取
    localhost
    或安装云SQL代理的任何位置

    了解更多信息您可以从控制台(并选择云SQL连接)或从
    gcloud
    命令行创建云运行应用程序并指定

    --add-cloudsql-instances <INSTANCE-NAME> --set-env-vars INSTANCE-CONNECTION-NAME="INSTANCE_CONNECTION_NAME"
    
    --添加cloudsql实例--设置env vars INSTANCE-CONNECTION-NAME=“INSTANCE\u CONNECTION\u NAME”
    
    这些设置会自动启用和配置云SQL代理。您可以使用unix域套接字从asp.net核心应用程序连接到代理,格式为:
    /cloudsql/INSTANCE\u CONNECTION\u NAME

    我在我的
    appsettings.json中使用了以下连接字符串,它对我很有用:

    “服务器=/cloudsql/INSTANCE\u连接\u名称;数据库=DB\u名称;Uid=USER\u名称;Pwd=PASSWORD;协议=unix”


    注意。确保您已提供服务帐户,您的Cloud Run应用程序正在IAM中的Cloud SQL Client角色下运行

    您无法使用IP地址进行连接。云运行还不支持VPC。您希望10.4.16.6 IP地址如何解析?您链接的文档清楚地表明您需要使用
    PROJECT-ID:REGION:INSTANCE-ID
    作为连接字符串。@AhmetB Google-在.net core中支持这种方式吗?如何更改连接字符串以支持此操作?使用user、pass和db name。感谢您的帮助