我正在尝试在我创建的云运行模块上设置多个环境变量。我从 Terraform 中遵循的示例是静态的。是否可以动态创建这些?
\ntemplate {\n spec {\n containers {\n image = "us-docker.pkg.dev/cloudrun/container/hello"\n env {\n name = "SOURCE"\n value = "remote"\n }\n env {\n name = "TARGET"\n value = "home"\n }\n }\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我试过了:
\ndynamic "env" {\n for_each = var.envs\n content {\n name = each.key\n value = each.value\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但我收到以下错误:
\n\n\n对“each.value”的引用已在其不可用的上下文中使用,例如当配置不再包含其“for_each”表达式中\n\xe2\x94\x82 中的值时。在配置中删除对 every.value 的引用以解决此错误。
\n
编辑:完整代码示例
\nresource "google_cloud_run_service" "default" {\n name = "cloudrun-srv"\n location = "us-central1"\n\n template {\n spec {\n …Run Code Online (Sandbox Code Playgroud) 在GCP上,我应用了下面的Terraform代码来运行Cloud Run 服务“渲染器”:
resource "google_cloud_run_service" "renderer" {
name = "renderer"
location = "asia-northeast1"
template {
spec {
containers {
image = "gcr.io/${var.project_id}/renderer:latest"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
创建服务时出错:googleapi:错误 403:之前未在项目 905986752003 中使用 Cloud Run Admin API 或已禁用。通过访问 https://console.developers.google.com/apis/api/run.googleapis.com/overview?project=905986752003启用它 ,然后重试。如果您最近启用了此 API,请等待几分钟,以便该操作传播到我们的系统,然后重试。
因此,我访问了上面这个错误中显示的网址https://console.developers.google.com/apis/api/run.googleapis.com/overview?project=905986752003:
然后,启用Cloud Run API:
然后,再次应用此Terraform代码:
resource "google_cloud_run_service" "renderer" {
name = "renderer"
location = "asia-northeast1"
template {
spec {
containers {
image = "gcr.io/${var.project_id}/renderer:latest"
}
}
}
} …Run Code Online (Sandbox Code Playgroud) google-cloud-platform terraform devops terraform-provider-gcp google-cloud-run
我们根据给定的需求开发了云功能,并使用第一代进行了初步验证,一切顺利。但需要进行的修改很少,因此需要额外的处理时间。因此我们必须切换到--gen2
以下是 gcloud 函数部署命令。
gcloud functions deploy gen2-function \
--entry-point gen2 --runtime python37 --trigger-http --allow-unauthenticated \
--service-account=<> --region=<> --project=<> --timeout=3600s --gen2
Run Code Online (Sandbox Code Playgroud)
此命令成功部署了功能和内部云运行服务,但最终失败并出现以下错误
[INFO] A new revision will be deployed serving with 100% traffic.
ERROR: (gcloud.functions.deploy) PERMISSION_DENIED: Permission 'run.services.setIamPolicy' denied on resource 'projects/<project>/locations/<region>/services/gen2-function' (or resource may not exist).
Run Code Online (Sandbox Code Playgroud)
当我们检查cloud run时,服务名称“gen2-function”确实存在。
有人可以指导一下吗?
google-cloud-platform google-cloud-functions google-cloud-run
我想执行定期处理一些数据的 GCP 云运行作业(而不是服务)。我看到当我配置云运行作业时,我可以填写容器参数的“容器、变量和秘密、连接、安全”字段。但我想每次执行它们时传递不同的参数,我想知道是否有办法。我一直没能找到办法去做。
如果没有这样的方法,那么只有当我希望它们定期执行相同的操作时,我是否才应该使用云运行作业?
在 GCP 上,我将 Cloud Run 与 Secret Manager 中的环境变量一起使用。
更新密钥时如何高效更新 Cloud Run 实例?
我尝试使用此 Terraform 代码,但没有成功:
// run.tf
module "cloud-run-app" {
source = "GoogleCloudPlatform/cloud-run/google"
version = "~> 0.0"
service_name = "${local.main_project}-cloudrun"
location = local.region
image = local.cloudrun_image
project_id = local.main_project
env_vars = local.envvars_injection
env_secret_vars = local.secrets_injection
service_account_email = google_service_account.app.email
ports = local.cloudrun_port
service_annotations = {
"run.googleapis.com/ingress" : "internal-and-cloud-load-balancing"
}
service_labels = {
"env_type" = var.env_name
}
template_annotations = {
"autoscaling.knative.dev/maxScale" : local.cloudrun_app_max_scale,
"autoscaling.knative.dev/minScale" : local.cloudrun_app_min_scale,
"generated-by" : "terraform",
"run.googleapis.com/client-name" : …Run Code Online (Sandbox Code Playgroud) google-cloud-platform terraform-provider-gcp google-cloud-run
我已将大约 30 个不同的微服务部署到 Google Cloud Run。有没有办法(API/仪表板/等)来确定每项服务的 30 天成本?或者,更好的是,有一种方法可以查看每个容器随时间变化的成本(成本/天)?
Billable container instance time尝试:从每个服务手动下载 30 天图表的 .csv,https://console.cloud.google.com/run/detail/myregion/myservice/metrics这是不切实际的。还不清楚使用什么采样/平均方案来生成该数据,因此准确性不明确。
Cloud Run与Knative的“服务”(HTTP)功能有关。是否有计划实施“事件”功能?有一个用于“事件”的PubSub源,但是它需要在我们管理的k8s集群上运行。
使用云功能时,我们具有与冷启动相关的限制,并且最大执行时间为9分钟。Google Cloud Run是否也存在这些限制?
google-cloud-platform google-cloud-functions google-cloud-run
我没有关于Google Cloud Run拥有的存储的文档。例如,当我们创建虚拟机时,它是否包含很少的千兆字节存储?如果没有,是否存在一个“ / tmp”文件夹,可以在请求期间将数据临时放入其中?有什么限制(如果有)?
如果它们都不可用,如果我想在运行Cloud Run时保存一些临时数据,有何建议?
我正在Google Cloud Run上托管的ExpressJS应用上进行负载测试,当流量激增时,有一段时间我在Stackdriver中看到许多500错误,并显示消息“请求失败,因为实例无法成功启动。” -有效导致服务器停机。
看到此错误随着应用程序的扩展而更频繁地发生,我认为这是由Cloud Run负载均衡器在这些实例准备好接受请求之前过早地将流量分配给新实例造成的。
当我继续运行负载测试时,实例会不断重复被杀死并重新启动,因此在负载打开时没有恢复机制。
我没有看到来自NodeJS应用程序的任何错误日志,表明没有任何失败的请求实际上到达了我的应用程序。
如何避免这些错误?
Cloud Run如何确定端口已准备好接受请求?
是在ExpressJS应用程序中配置错误,还是可以在将请求发送到新实例之前以某种方式延迟Cloud Run?