
公式ガイドに従って、新しい Terraform プロジェクトを開始しています。
実行できました。(コミット時にトリガーされる Google Cloud ビルド タスクの一部として実行しています)
ただし、リソース内の何かを変更した場合 (たとえば、「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/language/settings/backends/gcs.html