我有一组通过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