2017-03-19 43 views
5

Pobrałem terraform 0.9 i starał się śledzić migration guide przenieść z remote-state do backendMigracja z odległym-państwa do backend w Terraform 0,9

Ale to nie wydają się działać. Wymieniłem:

data "terraform_remote_state" "state" { 
    backend = "s3" 
    config { 
    bucket = "terraform-state-${var.environment}" 
    key = "network/terraform.tfstate" 
    region = "${var.aws_region}" 
    } 
} 

z

terraform { 
    backend "s3" { 
    bucket = "terraform-backend" 
    key = "network/terraform.tfstate" 
    region = "us-west-2" 
    } 
} 

jeszcze kiedy biegnę terraform init, w jednym z moich folderów środowiska, otrzymuję:

Deprecation ostrzeżenie: To środowisko jest skonfigurowany do korzystania dziedzictwo stan zdalny. Stan zdalny znacznie się zmienił w Terraform 0.9. Należy zaktualizować konfigurację stanu zdalnego, aby użyć nowych ustawień "zaplecza" . Na razie Terraform będzie nadal korzystać z istniejących ustawień . Wcześniejsze zdalne wsparcie dla stanu zostanie usunięte w Terraform 0.11.

można znaleźć przewodnika do uaktualniania tutaj:

https://www.terraform.io/docs/backends/legacy-0-8.html

miałem też do spadku zmiennej interpolacji ponieważ to już nie jest dozwolony. Czy to oznacza, że ​​jeden wiaderko S3 jest używane w wielu środowiskach? Czego tu brakowało?

Odpowiedz

6

Po aktualizacji (https://www.terraform.io/docs/backends/legacy-0-8.html) po terraform init należy również uruchomić terraform plan, aby sfinalizować migrację, która zaktualizuje zdalny plik stanu na s3.

Jeśli chodzi o konfigurację dla wielu środowisk, skończyło się na używaniu skryptu powłoki opakowującej z przekazywaniem parametrów dla ${application_name}/${env}/${project} i przy użyciu częściowej konfiguracji.

Dla struktury projektowej jak to:

├── projects 
│   └── application-name 
│    ├── dev 
│    │   ├── bastion 
│    │   ├── db 
│    │   ├── vpc 
│    │   └── web-cluster 
│    ├── prod 
│    │   ├── bastion 
│    │   ├── db 
│    │   ├── vpc 
│    │   └── web-cluster 
│    └── backend.config 
└── run-tf.sh 

dla każdego nazwa_aplikacji/env/I = katalogu (tj odchylenie/VPC) dodanym plik zastępczy backend konfiguracją jak poniżej: backend.tf:

terraform { 
    backend "s3" { 
    } 
} 

Zawartość folderu dla każdego komponentu będzie wyglądać następująco:

│    ├── prod 
│    │   ├── vpc 
│    │   │   ├── backend.tf 
│    │   │   ├── main.tf 
│    │   │   ├── outputs.tf 
│    │   │   └── variables.tf 

Na poziomie "nazwa_aplikacji /" lub "nazwa_aplikacji/env" dodaliśmy plik backend.config coś takiego:

bucket  = "BUCKET_NAME" 
region  = "region_name" 
lock  = true 
lock_table = "lock_table_name" 
encrypt = true 

Nasz otoki skrypt oczekuje parametry application-name, environment, component i rzeczywistą terraform cmd biegać.

Zawartość run-tf.sh skryptu (uproszczony):

#!/bin/bash 

application=$1 
envir=$2 
component=$3 
cmd=$4 

tf_backend_config="root_path/$application/$envir/$component/backend.config" 

terraform init -backend=true -backend-config="$tf_backend_config" -backend-config="key=tfstate/${application}/${envir}/${component}.json" 

terraform get 

terraform $cmd 

Oto jak typowy run-TF.Wywołanie sh wygląda tak:

$ run-tf.sh application_name dev vpc plan 

$ run-tf.sh application_name prod bastion apply 
0

Pomyliłeś się z terraform zdalnym poleceniem ze zdalnym stanem. Nie musisz zmieniać żadnych zdalnych stanów, które posiadasz w plikach tf.

Zamiast konfigurować zdalny stan za pomocą polecenia zdalnego terraform i użyć pliku konfiguracyjnego backendu wspomnianego w odnośniku migracji.

Zobacz drugi komentarz github w tym linku. Ma przyjemną procedurę krok po kroku na temat tego, co zrobił, aby migrować. https://github.com/hashicorp/terraform/issues/12792