我在 Google Cloud Run 上建立了一个小项目,我正在查看生成的成本,Stackdriver Logging 看起来相当昂贵。是否可以禁用它?如何?我在文档中找不到它。
我有一个 Google 源存储库,它镜像了我的私有 Github 存储库,其中包含 Python 包的代码。我还有一个 Cloud Run 实例,我想在其中安装这个私有 Python 库。我怎样才能在cloudbuild.yamlor中做到这一点Dockerfile?
google-cloud-platform google-cloud-source-repos google-cloud-run
我有 2 个云运行服务:
这个想法是calculator-api公开的,它将向 提出请求add-api。add-api由于某种原因,当ingress 为 时,我收到 403 internal,但如果我将 ingress 更改为 to Allow all traffic,则它可以正常工作。
我使用以下代码正确获取 IdToken,然后将令牌注入 header 中Authorization: Bearer IdToken。我的接收者拥有角色add-api许可。calculator-apiCloud Run Invoker
GET request "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://add-api.a.run.app"
Header: {"Metadata-Flavor", "Google"}
Run Code Online (Sandbox Code Playgroud)
因此,我认为问题不在于身份验证,而在于入口设置为 时的某种网络限制internal。
我在我的 Google Cloud Platform 项目上启动并运行了一个 Cloud Run 实例。
每当我对main.py文件进行任何更改时,我都会执行以下步骤:
gcloud builds submit --tag ${CONTAINER}
gcloud run deploy ${SERVICE} --image $CONTAINER --platform managed
Run Code Online (Sandbox Code Playgroud)
它构建一个新映像并将容器部署到托管实例。
查找并删除旧部署的映像是一个很好的做法,还是由 GCP 自动管理?
我正在考虑使用 Cloud Scheduler 在 Cloud Run 上触发 python 应用程序的日常执行。该应用从第三方 API 提取数据并将其插入 BigQuery。唯一的问题是,根据我读过的许多文章,Cloud Run 有 15 分钟的执行时间限制,这可能太短了。
不过,查看 Cloud Run 文档:https://cloud.google.com/run/quotas#cloud_run_limits似乎表明最大执行时间为 60 分钟。
哪个是对的?Cloud Run 实际上可以运行长达 60 分钟的进程吗?如果该过程需要超过 30 分钟,我在使用 Cloud Schedular 触发云运行时是否可能会遇到任何问题?
我是 Terraform 新手,但我做了很多研究但找不到答案。我使用简单的 Terraform 文件创建 Cloud Run 实例没有问题。我可以毫无问题地设置环境变量和秘密。但是,我不知道如何创建其他设置,例如“内存分配”、“CPU 分配”等。

我的 terraform 文件如下所示:
resource "google_cloud_run_service" "myproject" {
project ="myproject"
name = "cloud-run-name"
location = "us-east1"
template {
spec {
containers {
image = "gcr.io/myproject/image"
env {
name = "VARIABLE1"
value = "variable1"
}
env {
name = "VARIABLE2"
value = "variable1"
}
}
}
}
traffic {
percent = 100
latest_revision = true
}
}
Run Code Online (Sandbox Code Playgroud) 如果我在 Cloud Run 中运行容器并在 python 代码中执行打印语句。我在哪里可以查看?云日志似乎显示包含本身的日志(构建等)?
为了经常调试我的代码,我会编写一些语句来帮助我弄清楚发生了什么。该打印输出位于哪里?
我有一个推送订阅,可将消息发送到 Cloud Run 服务。如果 Cloud Run 服务未成功确认消息(否定确认),我希望以最大次数重新发送消息,重试之间的时间间隔始终相同(例如,重试 10 次,每次重试 1 分钟后)。
这是否可以通过此处提到的 PubSub 推送订阅设置https://cloud.google.com/pubsub/docs/admin#using_subscription_properties实现?
预先感谢您的任何帮助。
我有一个父项目,其中为 docker 配置了工件注册表。
子项目有一个云运行服务,需要从父项目中提取其映像。
子项目还有一个服务账户,该账户有权通过 IAM 角色Roles/artifactregistry.writer访问存储库。
当我尝试启动服务时,我收到一条错误消息:
Google Cloud Run Service Agent 必须有权读取映像 europe-west1-docker.pkg.dev/test-parent-project/docker-webank-private/node:custom-1。确保提供的容器镜像 URL 正确,并且上述帐户有访问该镜像的权限。如果您刚刚启用 Cloud Run API,则权限可能需要几分钟才能传播。请注意,该图像来自项目 [test-parent-project],与此项目 [test-child-project] 不同。必须从此项目向 Google Cloud Run 服务代理授予权限。
我已经测试过使用docker 登录并使用服务帐户的私钥手动连接,并且docker pull命令在我的电脑上完美运行。
cat $GOOGLE_APPLICATION_CREDENTIALS | docker login -u _json_key --password-stdin https://europe-west1-docker.pkg.dev
> Login succeeded
docker pull europe-west1-docker.pkg.dev/bfb-cicd-inno0/docker-webank-private/node:custom-1
> OK
Run Code Online (Sandbox Code Playgroud)
该服务帐户还附加到云运行服务:
https://cloud.google.com/run/docs/reference/container-contract
然后,容器实例接收一个 SIGTERM 信号,指示关闭之前10 秒周期的开始(使用 SIGKILL 信号)。在此期间,容器实例将被分配CPU并计费。如果容器实例没有捕获 SIGTERM 信号,它将立即关闭。
答:如果我将最大实例数设置为 1 ,那么在我的容器进程捕获 SIGTERM 且处于“10 秒关闭期”后,新请求到达 Cloud Run 代理时会发生什么情况?
我假设HTTP请求将等到关闭完成,然后Cloud Run将启动一个新的新容器来处理HTTP请求?
这有保证吗?
我之所以这么问,是因为我的容器假定它是唯一改变网络资源的进程,并且两个容器会创建竞争条件(或在 SIGTERM 事件之后再处理一个 HTTP 请求)。
https://cloud.google.com/blog/topics/developers-practitioners/graceful-shutdowns-cloud-run-deep-dive
但是,有时您可能会在容器由于底层基础设施原因而关闭之前收到此信号,并且您的容器可能仍具有正在进行的连接。因此,并不总是能保证优雅终止。
B:这种情况有多常见?容器总是收到 SIGTERM 信号吗?
我可以等到http_requests_outstanding = 0 AND SIGTERM_has_been_triggered运行关闭代码(此时不会再将 HTTP 请求转发到实例)吗?