Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 从运行在谷歌云上的云访问云SQL_Google Cloud Platform_Google Cloud Sql_Google Cloud Run - Fatal编程技术网

Google cloud platform 从运行在谷歌云上的云访问云SQL

Google cloud platform 从运行在谷歌云上的云访问云SQL,google-cloud-platform,google-cloud-sql,google-cloud-run,Google Cloud Platform,Google Cloud Sql,Google Cloud Run,我有一个云运行服务,它通过SQLAlchemy访问云SQL实例。但是,在云运行日志中,我看到CloudSQL连接失败。请看https://cloud.google.com/sql/docs/mysql/connect-run 有关其他详细信息:请确保该帐户有权访问“”。转到那个链接,上面说: “默认情况下,您的应用程序将使用云运行(完全管理)服务帐户授权您的连接。服务帐户的格式为PROJECT\u编号-compute@developer.gserviceaccount.com." 但是,以下()

我有一个云运行服务,它通过
SQLAlchemy
访问云SQL实例。但是,在云运行日志中,我看到
CloudSQL连接失败。请看https://cloud.google.com/sql/docs/mysql/connect-run 有关其他详细信息:请确保该帐户有权访问“”
。转到那个链接,上面说:

“默认情况下,您的应用程序将使用云运行(完全管理)服务帐户授权您的连接。服务帐户的格式为PROJECT\u编号-compute@developer.gserviceaccount.com."

但是,以下()说明:

“默认情况下,云运行修订使用计算引擎默认服务帐户(项目编号-compute@developer.gserviceaccount.com),具有Project>Editor IAM角色。这意味着默认情况下,您的云运行修订版具有对Google云项目中所有资源的读写访问权限。”

那么,这难道不意味着CloudRun已经可以访问SQL了吗?我已经在云运行部署页面中设置了云SQL连接。您建议我如何允许从Cloud Run访问云SQL


编辑:我必须启用云SQL API。

否,默认情况下,Cloud Run无法访问云SQL。您需要遵循以下两条路径之一

  • 使用本地unix套接字文件连接到SQL:您需要像前面所说的那样配置权限,并使用指示连接到数据库意图的标志进行部署。跟随

  • 使用私有IP连接SQL:这涉及到将云SQL实例部署到VPC网络中,从而使其获得私有IP地址。然后,您使用Cloud Run VPC Access Connector(目前为测试版)允许Cloud Run容器能够连接到该VPC网络,该网络直接包含SQL数据库的IP地址(无需IAM权限)。跟随

  • 云SQL代理解决方案 我使用cloud sql代理在cloud Build提供的
    workspace
    目录中创建本地unix套接字文件

    以下是主要步骤:
  • 拉取一个
    Berglas
    容器,用
    \u VAR1
    替换填充其调用,这是一个我使用Berglas加密的环境变量,名为
    CMCREDENTIALS
    。您应该根据需要添加尽可能多的
    \u VAR{n}
  • 通过wget安装cloudsqlproxy
  • 运行中间步骤(此生成的测试)。此步骤使用提供的临时
    /workspace
    目录中存储的变量
  • 树立你的形象
  • 推动你的形象
  • 使用云运行、部署和包含标志
    --设置环境变量
  • 完整的
    cloudbuild.yaml
    #basic cloudbuild.yaml
    步骤:
    #拉动berglas容器并将秘密写入临时文件
    #下/工作区
    -名称:gcr.io/berglas/berglas
    id:“安装Berglas”
    环境:
    -“${u VAR1}=berglas://${u BUCKET\u ID\u SECRETS}/${u VAR1}?destination=/workspace/${u VAR1}”
    参数:[“exec”、“--”、“/bin/sh”]
    #安装云sql代理
    -id:“安装云SQL代理”
    名称:阿尔卑斯山:最新
    入口点:上海
    args:
    -“-c”
    - "\
    wget-O/workspace/cloud\u sql\u代理\
    https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 && \
    睡眠2&\
    chmod+x/workspace/cloud\u sql\u proxy”
    等待:['-']
    #使用上面的秘密,构建并运行测试套件
    -名称:“python:3.8.3-slim”
    id:“运行单元测试”
    入口点:'/bin/bash'
    args:
    -“-c”
    - "\
    (/workspace/cloud\u sql\u proxy-dir=/workspace/${{u sql\u proxy\u PATH}-instances=${{u INSTANCE\u NAME1}&sleep 2)&&\
    apt get update&&apt get install-y--不建议安装\
    构建基本libssl-dev-libffi-dev-libpq-dev-python3-dev-wget&&\
    rm-rf/var/lib/apt/lists/*&&\
    导出${u VAR1}=$(cat/workspace/${u VAR1})&&
    导出实例\u NAME1=${\u实例\u NAME1}&&\
    导出SQL_PROXY_PATH=/workspace/${SQL_PROXY_PATH}&&\
    pip安装-r dev-requirements.txt&&\
    pip安装-r requirements.txt&&\
    python-m pytest-v&&\
    rm-rf/workspace/${u SQL\u PROXY\u PATH}&&\
    echo“已删除云SQL代理”
    waitFor:['installcloudsqlproxy','installberglas']
    目录:“${u APP\u dir}”
    #使用应用程序/Dockerfile构建说明,构建应用程序映像
    -名称:“gcr.io/cloud builders/docker”
    id:“生成应用程序映像”
    args:['build',
    “-t”,
    'gcr.io/$PROJECT\u ID/${{u IMAGE\u NAME}',
    '.',
    ]
    目录:“${u APP\u dir}”
    #推送应用程序映像
    -名称:“gcr.io/cloud builders/docker”
    id:'推送应用程序映像'
    args:['push',
    'gcr.io/$PROJECT\u ID/${{u IMAGE\u NAME}',
    ]
    #将应用程序映像部署到云运行
    #通过Berglas exec入口点为gunicorn填充秘密
    -名称:“gcr.io/cloud builders/gcloud”
    id:“部署应用程序映像”
    参数:['beta',
    "跑",,
    “部署”,
    “${u IMAGE\u NAME}”,
    "形象",,
    'gcr.io/$PROJECT\u ID/${{u IMAGE\u NAME}',
    "地区",,
    “us-central1”,
    "平台",,
    “管理”,
    “安静”,
    “--添加cloudsql实例”,
    “${u实例\u名称1}”,
    “--设置环境变量”,
    'SQL_PROXY_PATH=/${{SQL_PROXY_PATH},INSTANCE_NAME1=${{u INSTANCE_NAME1},${u VAR1}=berglas://${{u BUCKET_ID_SECRETS}/${u VAR1}',
    “--允许未经验证的”,
    “--内存”,
    “512Mi”
    ]
    #使用下面可以在命令行中更改的默认值
    替换:
    _图像名称:您的图像名称
    _BUCKET_ID_SECRETS:你的BUCKET for berglas SECRETS
    _实例名称1:项目名称:位置:dbname
    _SQL\代理\路径:cloudsql
    _VAR1:cmc证书
    #我们将在这里推送的图像
    图像:[
    'gcr.io/$PROJECT\u ID/${{u IMAGE\u NAME}'
    ]
    
    Dockerfile
    下面的代码构建了一个Pytho
    # Use the official lightweight Python image.
    # https://hub.docker.com/_/python
    FROM python:3.8.3-slim
    
    # Add build arguments
    # Copy local code to the container image.
    ENV APP_HOME /application
    
    WORKDIR $APP_HOME
    
    # Install production dependencies.
    RUN apt-get update && apt-get install -y --no-install-recommends \
        build-essential \
        libpq-dev \
        python3-dev \
        libssl-dev \
        libffi-dev \
        && rm -rf /var/lib/apt/lists/*
    
    # Copy the application source
    COPY . ./
    
    # Install Python dependencies
    RUN pip install -r requirements.txt --no-cache-dir
    
    # Grab Berglas from Google Cloud Registry
    COPY --from=gcr.io/berglas/berglas:latest /bin/berglas /bin/berglas
    
    # Run the web service on container startup. Here we use the gunicorn
    # webserver, with one worker process and 8 threads.
    # For environments with multiple CPU cores, increase the number of workers
    # to be equal to the cores available.
    ENTRYPOINT exec /bin/berglas exec -- gunicorn --bind :$PORT --workers 1 --threads 8 app:app