标签: google-cloud-run

您如何指定 DB_URI postgres DB 连接字符串到在 Google Sql 云中运行的实例?

这是我的场景。我已经设置了一个在 Google SQL 云中运行的 Postgres DB 实例。它已启动并正在运行,如果我将本地 IP 列入白名单,我可以毫无问题地直接连接。

然后我部署了一个 docker 容器 (postGrest),它是一个连接到 postgres 数据库的 Web 服务器。当我在 Google Cloud Run 上配置它时,它确实有一个下拉选项,我可以在其中指定数据库连接,它说,在幕后,它为此连接配置 Cloud SQL 代理。

容器允许传入环境变量以指定哪个服务器等。一个必需的参数是 postgred 实例的 DB_URI。在本地运行时,它看起来像这样:

postgres://authenticator:mysecretpassword@localhost:5432/testdb

当我尝试在云版本上配置它时,我尝试使用 IP 127.0.0.1(谷歌云 SQL 代理文档说这是通过代理连接的方式)。这没有用。

然后我尝试使用分配给 postgres 数据库的公共 IP ......这也不起作用。

有谁知道如何使用这种 DB_URI 格式指定正确的连接字符串?

postgresql google-cloud-sql google-cloud-platform postgrest google-cloud-run

3
推荐指数
2
解决办法
1043
查看次数

带数据库迁移的云运行

我想在云运行入口点(例如 php artisan migrate)中运行数据库迁移,以避免在升级修订之前必须使用外部工具来运行这些。

在 kubernetes 中,此功能可以通过在部署上运行 init 容器并将 max Surge 设置为 1 来实现,以确保只有一个 pod 在推出到其他容器之前尝试迁移。

CloudRun 的推出策略是否在任何地方定义?如果 CloudRun 等待修订中的一个容器运行良好,然后再进行批发,这将是很好的,这将满足此目的(尽管如果多个容器尝试迁移,postgres 事务性 DDL 的问题还不算太糟糕)。我认为这是我观察到但不确定的行为。

有没有比在每个入口点运行迁移更好/低维护的方式来运行迁移?

google-cloud-run

3
推荐指数
1
解决办法
1127
查看次数

Docker 错误 - CommandError: "0.0.0.0:" 不是有效的端口号或地址:端口对

所以我有一个 docker 文件,我打算构建并推送到 Google Cloud Run,它看起来像这样:

# pull official base image
FROM python:3.7-slim

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

CMD python manage.py runserver 0.0.0.0:$PORT
Run Code Online (Sandbox Code Playgroud)

这个想法是,一旦我将它推送到 Cloud Run,我的 Django 项目将在 0.0.0.0:$PORT 上运行,其中环境变量 $PORT 的值由 Google Cloud Run 自动设置。

我尝试在本地运行以下图像的容器,看看这是否有效。我将 $PORT 设置为 80,然后当我运行 docker 镜像的容器时,我得到以下信息:

"CommandError: "0.0.0.0:" is not a …
Run Code Online (Sandbox Code Playgroud)

python docker google-cloud-platform google-cloud-run

3
推荐指数
2
解决办法
3093
查看次数

通过 nodejs 使用不记名令牌进行谷歌云身份验证

我的客户有一个在 Google Cloud Run 上运行的 GraphQL API。

我收到了一个用于身份验证的服务帐户以及对 gcloud 命令行工具的访问权限。

像这样使用 gcloud 命令行时:

gcloud auth print-identity-token
Run Code Online (Sandbox Code Playgroud)

我可以生成一个令牌,该令牌可用于向 api 发出发布请求。这有效,我可以从邮递员、失眠症和我的 nodejs 应用程序成功地向 api 发出请求。

但是,当我将 JWT 身份验证与“googleapis”或“google-auth”npm 库一起使用时,如下所示:

var { google } = require('googleapis')

let privatekey = require('./auth/google/service-account.json')

let jwtClient = new google.auth.JWT(
  privatekey.client_email,
  null,
  privatekey.private_key,
  ['https://www.googleapis.com/auth/cloud-platform']
)

jwtClient.authorize(function(err, _token) {
  if (err) {
    console.log(err)
    return err
  } else {
    console.log('token obj:', _token)
  }
})
Run Code Online (Sandbox Code Playgroud)

这将输出一个“承载”令牌:

token obj: {
  access_token: 'ya29.c.Ko8BvQcMD5zU-0raojM_u2FZooWMyhB9Ni0Yv2_dsGdjuIDeL1tftPg0O17uFrdtkCuJrupBBBK2IGfUW0HGtgkYk-DZiS1aKyeY9wpXTwvbinGe9sud0k1POA2vEKiGONRqFBSh9-xms3JhZVdCmpBi5EO5aGjkkJeFI_EBry0E12m2DTm0T_7izJTuGQ9hmyw',
  token_type: 'Bearer',
  expiry_date: 1581954138000,
  id_token: undefined,
  refresh_token: 'jwt-placeholder'
}
Run Code Online (Sandbox Code Playgroud)

然而,这个不记名令牌不能像上面那样工作,并且在发出与 …

google-api-nodejs-client google-cloud-platform gcloud google-cloud-run

3
推荐指数
1
解决办法
2896
查看次数

如何以编程方式更新谷歌云运行上的流量切换?

我正在尝试通过 CI/CD 作业将新修订版部署到 Cloud Run,并立即开始为新修订版提供 100% 的流量。

此服务不是面向客户的,我们不需要金丝雀部署或流量拆分。

目前该图像是在 gitlab ci 管道中构建并发布的 gcr。下一步是gcloud run deploy命令。该命令工作正常,我得到了一个新的修订版。然而,0% 的流量被提供给这个版本,我一生都无法弄清楚如何以编程方式管理它。

我能找到的唯一相关信息来自常见问题解答:

但是,Cloud Run(当​​前)仅支持从您的服务的最后一个健康版本提供流量。因此,它目前不支持基于修订的流量拆分和金丝雀部署。

但它似乎已经过时了,因为我目前可以通过 UI 手动在修订之间拆分流量。任何澄清将不胜感激。谢谢!

google-cloud-run

3
推荐指数
1
解决办法
768
查看次数

Cloud Run 服务 URL 的格式是什么?

该文档提供了一个https://gateway-12345-uc.a.run.app作为服务 URL的示例。Cloud Run 服务 URL 是否始终具有-uc.a.run.app后缀,或者将来是否会更改?

google-cloud-run

3
推荐指数
1
解决办法
232
查看次数

如何估算 Google Cloud Run 成本?

我已经建立了我的机器学习模型,现在作为下一步,我希望将其公开。计划是:

  • 使用 Streamlit 构建 UI。
  • 使用 Docker 镜像打包应用程序。
  • 将 Docker 映像部署到 Google Cloud Run 环境中。
  • 在 Google Cloud Run 环境中启动 Docker 容器。

但问题是我无法估计在 Google Cloud Run 中启动和运行容器的成本(我仍然是初学者)。如何估计最坏的情况,即它应该产生的最大成本是多少?Google Cloud Run 定价表中有 CPU、内存、请求和网络属性,但:

  • 我如何才能确切知道我的应用程序将占用多少这些资源?
  • 如果应用程序公开可用并且请求超过免费限制配额,我可能会得到天文数字的账单。
  • 我可以设置一些账单不能超过的限额吗?

google-cloud-platform google-cloud-run

3
推荐指数
1
解决办法
1029
查看次数

如何在 Google Cloud Run 中生成 Blob 签名 url?

在 Google Cloud Run 下,您可以选择容器正在运行的服务帐户。使用默认计算服务帐户无法生成签名 url。

此处列出的解决方法适用于 Google Cloud Compute - 如果您允许服务帐户的所有范围。在 Cloud Run 中似乎没有办法做到这一点(我找不到)。

https://github.com/googleapis/google-auth-library-python/issues/50

我尝试过的事情:

  1. 为服务帐号分配角色: roles/iam.serviceAccountTokenCreator
  2. 在虚拟机(vs Cloud Run)中验证了同一个 GCP 项目中的解决方法
  3. 使用从私钥(通过 json 文件)加载的服务帐户验证代码在容器中本地工作。
from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('EXAMPLE_BUCKET')
blob = bucket.get_blob('libraries/image_1.png')
expires = datetime.now() + timedelta(seconds=86400)
blob.generate_signed_url(expiration=expires)
Run Code Online (Sandbox Code Playgroud)

失败:

you need a private key to sign credentials.the credentials you are currently using <class 'google.auth.compute_engine.credentials.Credentials'> just contains a token. see https://googleapis.dev/python/google-api-core/latest/auth.html#setting-up-a-service-account for more details.
/usr/local/lib/python3.8/site-packages/google/cloud/storage/_signing.py, line 51, in ensure_signed_credentials
Run Code Online (Sandbox Code Playgroud)

尝试添加解决方法,

Error calling the …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-storage google-iam google-cloud-run

3
推荐指数
1
解决办法
1383
查看次数

我的云跑服务如何调用其他云跑服务?

我有一个服务侦听“https://myapp.a.run.app/dosomething”,但我想利用 Cloud Run 的可扩展性功能,因此在“dosomething”的控制器中,我向“发送了 10 个请求” https://myapp.a.run.app/smalltask'; 我的应用程序配置为允许每个实例只处理一个请求,我希望有 10 个实例启动,所有实例都执行它们的小任务,然后返回(都在超时期限内)。

但我不知道如何正确验证请求,所以这 10 个请求都导致 403。对于 Cloud Run 服务,我会在初始请求中手动传递不记名令牌,但我希望在某个时候添加一些 api 代理。但是没有上述 API 代理,发送请求以使其被接受的正确方法是什么?该应用程序以有权访问端点的用户身份运行。

google-cloud-platform google-cloud-run

3
推荐指数
1
解决办法
827
查看次数

将 Google Cloud Build 连接到 Google Cloud SQL

Google Cloud Run 允许使用 Cloud SQL。但是,如果您在 Google Cloud Build 中构建容器时需要 Cloud SQL,该怎么办?那可能吗?

背景

我有一个 Next.js 项目,它在 Google Cloud Run 上的容器中运行。将我的代码推送到 Cloud Build(安装内容、生成静态页面并将所有内容放入容器中)并部署到 Cloud Run 非常有效。

云SQL

但是,我只是添加了一些功能,其中它还需要来自我在 Google Cloud SQL 上运行的 PostgreSQL 实例的一些数据。在构建项目(生成静态页面)时使用此数据。

在本地,在我的机器上,这工作正常,因为该项目可以连接到我的 CloudSQL 代理。在 CloudRun 中运行时,这也应该有效,因为 Cloud Run 允许连接到 Cloud SQL 上的 Postgres 实例

我的问题

使用 Cloud Build 构建我的项目时,我需要访问我的数据库才能生成我的静态页面。我正在寻找一种将我的 Docker 云构建器连接到 Cloud SQL 的方法,也许就像 Cloud Run(完全托管)提供了一种使用 Cloud SQL 代理进行连接的机制。

这样我就可以/cloudsql/INSTANCE_CONNECTION_NAME在构建我的项目时连接到它!

所以我的问题是:在 Google Cloud Build 上构建我的项目时,如何通过 Cloud SQL 代理连接到我在 Google Cloud SQL 上的 PostgreSQL …

google-cloud-sql google-cloud-platform cloud-sql-proxy google-cloud-build google-cloud-run

3
推荐指数
1
解决办法
481
查看次数