未変更のリソースに Terraform 適用エラーが既に存在する

未変更のリソースに Terraform 適用エラーが既に存在する

公式ガイドに従って、新しい Terraform プロジェクトを開始しています。

https://learn.hashicorp.com/tutorials/terraform/gke?in=terraform/kubernetes&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS&_ga=2.91746777.2118895439.1637849824-960084622.1637849824

実行できました。(コミット時にトリガーされる 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

関連情報