云运行部署模式当推送新映像时,如果服务是通过terraform创建的,这是可以避免的吗



我有一组通过terraform云创建/维护的云运行服务。

当我创建一个新版本时,github操作工作流会将一个新映像推送到gcr.io.

现在在正常情况下,我会打电话给:

gcloud run deploy auth-service --image gcr.io/riu-production/auth-service:latest

一个新的版本将会出现。如果我这样做,并且资源由terraform管理,那么在下一次运行时,terraform应用程序将失败,因为它无法创建云运行服务,因为该名称的服务已经存在。所以它在状态上漂移,地形不再识别它

一个简单的解决方案是将管道连接到terraform云,并运行terraform apply -auto-approve进行部署。这应该行得通。

问题是,目前我真的不想在管道中应用地形命令。

最大的一点是,我真的很想把地形完全排除在部署过程之外。

有没有办法在不破坏地形基础设施的情况下,强制云运行为服务拍摄新图像?

云运行配置:

resource "google_cloud_run_service" "auth-service" {
name     = "auth-service"
location = var.gcp_region
project  = var.gcp_project
template {
spec {
service_account_name = module.cloudrun-sa.email
containers {
image = "gcr.io/${var.gcp_project}/auth-service:latest"
}
}
}
traffic {
percent         = 100
latest_revision = true
}

}

理论上是的,这应该是可能的
但我建议您不要这样做,您应该在每次部署中应用地形,以确保基础设施符合预期。

这里有一些你可以尝试的东西:

  • 跟踪它何时更改并在该资源上使用导入:
    https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_service#import
  • 查看生命周期忽略,您可以忽略触发更改的属性:
    https://www.terraform.io/language/meta-arguments/lifecycle#ignore_changes

相关内容

最新更新