
공식 가이드에 따라 새로운 Terraform 프로젝트를 시작합니다.
나는 그것을 실행하는 데 성공했습니다. (커밋 시 트리거되는 Google Cloud Build 작업의 일부로 실행 중입니다.)
그러나 리소스의 내용을 변경한 경우(예: "gke_num_nodes" 기본값을 2에서 1로 변경) terraform apply
다시 실행하면 다음과 같은 결과가 표시됩니다.
Plan: 4 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ kubernetes_cluster_host = (known after apply)
+ kubernetes_cluster_name = "workspace-auto-gke"
+ project_id = "workspace-auto"
+ region = "europe-west4"
google_compute_network.vpc: Creating...
╷
│ Error: Error creating Network: googleapi: Error 409: The resource 'projects/workspace-auto/global/networks/workspace-auto-vpc' already exists, alreadyExists
│
│ with google_compute_network.vpc,
│ on vpc.tf line 15, in resource "google_compute_network" "vpc":
│ 15: resource "google_compute_network" "vpc" {
│
╵
기존의 손대지 않은 리소스를 다시 생성하지 않도록 하는 방법이 있습니까?
내 cloudbuild.json
것은 다음과 같습니다.
{
"steps": [
{
"name": "hashicorp/terraform",
"entrypoint": "/bin/sh",
"args": [
"./cloudbuild/prepare-terraform.sh"
]
}
],
"logsBucket": "gs://my-bucket/logdir",
"serviceAccount": "projects/my-proj/serviceAccounts/[email protected]"
}
prepare-terraform.sh
단순히 존재 하면서
terraform init
terraform plan
terraform apply -auto-approve
답변1
Terraform을 사용하여 리소스를 생성하는 경우 다음을 수행하세요.아니다Terraform 외부에서 수정하세요.
무언가를 수동으로 변경하면 Terraform은 이를 HCL이 선언하는 방식과 Terraform이 저장한 방식으로 되돌리려고 시도합니다.
이것은 ... 불리운다선언적. 처음에는 Terraform을 사용하는 것을 무효화하는 Terraform을 동적으로 만들려고 합니다.
답변2
Terraform 상태는 모든 빌드에서 액세스할 수 있는 위치에 저장되어야 합니다. 예를 들어 여기에 표시된 Google Cloud 버킷의 경우:https://www.terraform.io/docs/언어/settings/backends/gcs.html