Articles

migracja stanu do chmury Terraform

Posted by admin

jako aktualny użytkownik CLI Terraform jesteś odpowiedzialny za utrzymywanie pliku stanu jako źródła prawdy dla swojej infrastruktury chmury. Możesz przenieść lokalny plik stanu do chmury Terraform bez przerywania lub odtwarzania istniejącej infrastruktury.

Ostrzeżenie: podczas przesyłania pliku stanu do chmury Terraform, wykonując kroki opisane w tym samouczku, Zawsze używaj tej samej wersji CLI Terraform, której użyłeś do utworzenia zasobów. Użycie nowszej wersji Terraform może zaktualizować plik stanu i spowodować uszkodzenie pliku stanu.

„wymagania wstępne

ten poradnik zakłada, że masz następujące:

  • CLI Terraform zainstalowany lokalnie
  • konto w chmurze Terraform

Uwaga: Ponieważ backend remote nie był obsługiwany w starszej wersji Terraform, musisz użyć wersji 0.11.13 lub wyższej, aby przenieść swój stan do chmury Terraform. Fragmenty w tym samouczku używają składni 0.12.

jeśli nie masz zainstalowanego Terraform lokalnie, możesz ukończyć ten samouczek w interaktywnym laboratorium za pomocą przeglądarki internetowej. Uruchom go tutaj.

„Utwórz stan

zacznij od klonowania tego repozytorium GitHub.

$ git clone https://github.com/hashicorp/learn-state-migration

skopiuj

następnie przejdź do katalogu.

$ cd learn-state-migration

skopiuj

przejrzyj plik main.tf w katalogu roboczym, aby uzyskać przegląd zasobów, które zamierzasz utworzyć. Ta konfiguracja używa zasobu random_pet do generowania i generowania losowej nazwy pet z określoną liczbą słów. Długość nazwy jest określona przez wartość zmiennej name_length, która domyślnie ma wartość 3.

w rzeczywistej konfiguracji możesz mieć dodatkowe zmienne, takie jak poświadczenia platformy w chmurze zdefiniowane w pliku .tfvars. Omówimy, jak ustawić te wartości w przestrzeni roboczej chmury Terraform w dalszej części tego samouczka, po migracji pliku stanu.

## Terraform configurationterraform { required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } required_version = "~> 0.14"}variable "name_length" { description = "The number of words in the pet name" default = "3"}resource "random_pet" "pet_name" { length = var.name_length separator = "-"}output "pet_name" { value = random_pet.pet_name.id}

skopiuj

Zainicjuj katalog.

$ terraform init

skopiuj

po zainicjowaniu Terraform, zastosuj konfigurację i zatwierdź uruchomienie, wpisując „tak” w wierszu polecenia.

$ terraform apply

Kopiuj

Terraform wyświetli trzy słowa losowo wygenerowanej nazwy zwierzaka.

„Skonfiguruj zdalny backend

teraz, gdy masz lokalny plik stanu, musisz utworzyć blok kodu zaplecza w konfiguracji. Backend informuje Terraform, gdzie ma się załadować i zapisać plik stanu.

Terraform domyślnie używa lokalnego zaplecza, jeśli w konfiguracji nie zdefiniowano jawnie bloku kodu zaplecza. Lokalny backend zapisuje twój stan jako plik terraform.tfstatew katalogu, w którym uruchamiasz terraform apply. Aby przenieść pliki stanu do chmury Terraform, zdefiniuj backend remote w konfiguracji, dodając nowy blok kodu na początku pliku main.tf.

terraform { required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } required_version = "~> 0.14" backend "remote" { hostname = "app.terraform.io" organization = "<YOUR-ORG-NAME>" workspaces { name = "state-migration" } }}

skopiuj

Zastąp wartości atrybutów organizacja i przestrzenie robocze nazwą organizacji w chmurze Terraform i żądaną nazwą obszaru roboczego. Chociaż organizacja zdefiniowana w zwrotce zaplecza musi już istnieć, obszar roboczy nie musi; w razie potrzeby Chmura Terraform utworzy ją. Jeśli zdecydujesz się użyć obszaru roboczego, który już istnieje, obszar roboczy nie może mieć żadnych istniejących stanów.

Uwaga: Jeśli znasz uruchamianie Terraform za pomocą CLI, być może korzystałeś z obszarów roboczych Terraform. Przestrzenie robocze w chmurze Terraform zachowują się inaczej niż przestrzenie robocze CLI Terraform. Przestrzenie robocze Terraform CLI umożliwiają istnienie wielu plików stanu w jednym katalogu, umożliwiając korzystanie z jednej konfiguracji dla wielu środowisk. Przestrzenie robocze w chmurze Terraform zawierają wszystko, co jest potrzebne do zarządzania danym zestawem infrastruktury i działają jak oddzielne katalogi robocze.

„uwierzytelnianie za pomocą chmury Terraform

po zdefiniowaniu zaplecza należy uwierzytelnić za pomocą chmury Terraform, aby kontynuować inicjalizację. Aby uwierzytelnić się za pomocą chmury Terraform, uruchom polecenie terraform login i postępuj zgodnie z monitami, aby się zalogować.

Uwaga: Jeśli używasz wersji Terraform przed 0.12.21, polecenie terraform login nie jest dostępne. Zamiast tego skonfiguruj plik konfiguracyjny CLI do uwierzytelniania.

$ terraform loginTerraform will request an API token for app.terraform.io using your browser.If login is successful, Terraform will store the token in plain text inthe following file for use by subsequent commands: /Users/username/.terraform.d/credentials.tfrc.jsonDo you want to proceed? Only 'yes' will be accepted to confirm. Enter a value:

skopiuj

Odpowiedz na monit z potwierdzeniem za pomocą yes.

aby uzyskać bardziej szczegółowe instrukcje dotyczące logowania, zobacz samouczek logowania.

„Przenieś plik stanu

po uwierzytelnieniu zaplecza remote możesz przeprowadzić migrację lokalnego pliku stanu do chmury Terraform. Aby rozpocząć migrację, uruchom ponownie. Powoduje to, że Terraform rozpoznaje zmienioną konfigurację backendu.

$ terraform initInitializing the backend...Do you want to copy existing state to the new backend? Pre-existing state was found while migrating the previous "local" backend to the newly configured "remote" backend. No existing state was found in the newly configured "remote" backend. Do you want to copy this state to the new "remote" backend? Enter "yes" to copy and "no" to start with an empty state. Enter a value:

Kopiuj

podczas reinstalacji, Terraform wyświetla komunikat informujący, że skopiuje plik stanu do nowego zaplecza. Wpisz yes, a Terraform przeniesie stan z twojej maszyny lokalnej do chmury Terraform.

„Skonfiguruj obszar roboczy w chmurze Terraform

po migracji stanu do chmury Terraform Zaloguj się do interfejsu sieci Web Terraform Cloud, znajdź nazwę obszaru roboczego zdefiniowaną w konfiguracji zaplecza i kliknij ją. Przejdź do zakładki „Stany” obszaru roboczego i zobacz pierwszą akcję w obszarze roboczym.

widok zakładki "stany" w obszarze roboczym chmury Terraform

pamiętaj, że Twoja konfiguracja ma zmienną, którą musisz dodać do newworkspace. Kliknij kartę ” zmienne „w obszarze roboczym, a następnie”dodaj zmienną”.Wprowadź nazwę zmiennej, name_length, jako klucz. Następnie wprowadź nową wartość, 5 i zapisz zmienną.

Zakładka zmienne obszaru roboczego w chmurze Terraform z dodaną zmienną

w przypadku rzeczywistych konfiguracji dodaj poświadczenia platformy w chmurze i inne zmienne konfiguracyjne do obszaru roboczego.

„Zainicjuj uruchomienie w nowym obszarze roboczym

po sprawdzeniu, czy stan został przeniesiony do obszaru roboczego chmury Terraform, Usuń lokalny plik stanu.

$ rm terraform.tfstate

Kopiuj

zastosuj nowe uruchomienie.

$ terraform apply

Kopiuj

Terraform będzie przesyłać logi z chmury Terraform i zapewni łącze do uruchomienia w interfejsie chmury Terraform. Ustawiasz nową wartość dla zmiennej name_length, więc zasób zostanie zastąpiony przez jeden pasujący do nowych parametrów.

Obraz oczekującego potwierdzenia uruchomienia, dziennik stwierdza, że zasób zostanie zastąpiony

„Następne kroki

Zniszcz zasoby utworzone dla tego samouczka, klikając najpierw opcję” Ustawienia „w obszarze roboczym chmury Terraform, wybierając” Destruction andDeletion”, upewniając się, że pole wyboru” Zezwól na zniszczenie planów „jest zaznaczone, a następnie zaznaczając”Kolejkuj plan zniszczenia”.

po zniszczeniu zasobów wróć do strony „Destruction andDeletion” i kliknij „Usuń z chmury Terraform”, aby usunąć obszar roboczy.

w tym samouczku dokonano migracji pliku stanu z komputera lokalnego do obszaru roboczego chmury Terraform. Aby dowiedzieć się, jak migrować pliki stanu wielu lokalnych obszarów roboczych lub ograniczyć dostęp do obszaru roboczego do określonego zespołu, zapoznaj się z poniższą dokumentacją.

  • migracja stanu z wielu lokalnych obszarów roboczych
  • Zarządzanie dostępem do przestrzeni roboczej

jeśli masz dużą liczbę plików stanu, które chcesz przenieść do chmury Terraform, rozważ użycie w tym celu interfejsu API chmury Terraform. Aby uzyskać informacje na temat przesyłania wersji stanu za pomocą interfejsu API, zapoznaj się z dokumentacją interfejsu API wersji stanu.

Related Post