Skip to content

Migrering til Frostmoln med Terraform ​

Hvis du allerede administrerer infrastruktur med Terraform i en anden cloud, kan fm-CLI'en konvertere den konfiguration til Frostmoln-udbyderen for dig. Den omskriver det, der mapper rent, og — vigtigst af alt — rapporterer hver eneste ressource og attribut, som Frostmoln endnu ikke understøtter, så intet forsvinder i stilhed.

Understøttede kildeclouds: Amazon Web Services (AWS), Microsoft Azure, Google Cloud (GCP) og Oracle Cloud Infrastructure (OCI).

Hvad konverteren gør ​

  • Bevarer dit layout — din fil- og modulstruktur bevares; hver kildefil bliver til den tilsvarende Frostmoln-konfiguration samme sted.
  • Omskriver det, der mapper rent — en instans bliver for eksempel til en frostmoln_instance, et VPC bliver til et frostmoln_vpc, og en sikkerhedsgruppe bliver til en frostmoln_security_group plus dens selvstændige regler.
  • Gætter aldrig i stilhed — hvor en værdi ikke kan udledes, bevares originalen, og der registreres et fund; alt, der ikke understøttes, kommenteres ud på stedet bag en grep-bar markør i stedet for at blive smidt væk.
  • Rapporterer alt — kørslen udskriver en oversigt over hvert fund grupperet efter alvorlighedsgrad og kan skrive en fuld JSON-rapport.

Kun konfiguration: migrering af state er uden for omfanget. Konverteren læser dine .tf-filer og skriver nye — den rører aldrig Terraform-state eller din eksisterende cloud.

Installer ​

Konverteren er indbygget i fm-CLI'en — se fm CLI-guiden for at installere den. Der kræves ingen ekstra plugin.

Kør den ​

Peg kommandoen mod roden af det repository, der indeholder din eksisterende Terraform:

bash
fm terraform convert ./infra

Som standard kører dette helt offline — der kræves hverken konto eller netværk — og den konverterede konfiguration skrives til ./infra/frostmoln.

Sigt mod repository-roden frem for mod en enkelt miljømappe. Hver mappe med .tf-filer konverteres i én kørsel, og modulkilder som ../modules/network kan kun slås op, når de delte moduler ligger inde i det træ, der konverteres. Outputmappen udelades fra inputtet, så det er sikkert at køre igen.

Valgmuligheder ​

FlagHvad den gør
--providerKildecloud: auto (standard), aws, azure, gcp eller oci. auto registrerer den ud fra konfigurationen.
--outOutputmappe (standard: <dir>/frostmoln).
--reportSkriv den fulde fundrapport som JSON til denne sti.
--onlineSlå aktuelle katalogværdier op (flavors, images, regioner) via din autentificerede Frostmoln-konto i stedet for at efterlade pladsholdere. Kræver fm auth login (eller en API-nøgle).
--forceOverskriv en ikke-tom outputmappe.
bash
# Gennemtving kildeudbyderen og vælg en outputmappe
fm terraform convert ./infra --provider aws --out ./frostmoln

# Slå rigtige katalogværdier op og gem rapporten
fm terraform convert ./infra --online --report report.json

Med --online slår konverteren rigtige flavors, images og regioner op fra din konto og udfylder dem. Hvis kataloget ikke kan nås, falder den tilbage til de samme pladsholdere som i en offlinekørsel og udskriver en advarsel — den lader aldrig konverteringen mislykkes af den grund.

Læs outputtet ​

To markører markerer alt, der kræver din opmærksomhed. Find dem med grep:

bash
grep -rn FM-TODO    ./infra/frostmoln   # katalogværdier, der skal udfyldes
grep -rn FM-CONVERT ./infra/frostmoln   # alt, der kræver din opmærksomhed
  • FM-TODO — en pladsholder, hvor der er brug for en aktuel katalogværdi (en flavor, et image eller en region), men den blev ikke slået op. Erstat den med en rigtig værdi; fm compute flavor list, fm compute image list og datakilden frostmoln_regions hjælper dig med at finde en. At køre med --online udfylder de fleste af disse automatisk.
  • FM-CONVERT — noget, der kræver din opmærksomhed. Konfiguration, som Frostmoln endnu ikke understøtter, kommenteres ud på stedet (den smides aldrig væk), så du kan beslutte, hvad du vil gøre med den: fjern den, eller genskab adfærden på en anden måde. Markøren sættes også på blokke, der er efterladt fungerende, men stadig hører til din gamle cloud (se nedenfor), og på værdier, der er værd at dobbelttjekke.

Blokke, der stadig kræver din gamle cloud ​

Nogle ressourcer er ikke Frostmolns at konvertere — en identitetsudbyders applikationsregistrering, en rå ARM- eller cloudspecifik nødudgang, en repository- eller pipelinedefinition. De kopieres igennem uændrede og stadig fungerende, og hver enkelt markeres og tælles separat i oversigten. De er den del af din konfiguration, som en migrering ikke gør færdig af sig selv: beslut for hver enkelt, om den skal blive, hvor den er, eller erstattes.

Hvad der ender i outputmappen ​

Outputtet indeholder din Terraform — .tf, .tf.json, .tfvars, .tfvars.json — plus enhver fil, som din konfiguration rent faktisk læser med file(), templatefile() eller en beslægtet funktion: et user_data-script, en cloud-init-skabelon, et politikdokument, en offentlig SSH-nøgle. De kopieres uændret, fordi den konverterede konfiguration stadig henviser til dem.

Alt andet i kildetræet kopieres ikke, og hver oversprunget fil listes som et info-fund. Outputmappen er et nyt sted, som du måske ikke har gitignoreret, og som du udmærket kan komme til at dele med en kollega, så konverteren duplikerer ikke i stilhed dine editorindstillinger, git-hooks eller urelaterede datafiler derind.

Variabelfiler kopieres, og de indeholder som regel hemmeligheder

.tfvars-filer kopieres uændret — den konverterede konfiguration har brug for deres værdier — og hver enkelt udløser en warning, der navngiver filen. Variabelfiler er dér, hvor legitimationsoplysninger plejer at bo. CLI'en opretter outputmappen, så kun du kan læse den, men tjek rettighederne igen, før du flytter, committer eller deler den.

Fund og alvorlighedsgrader ​

Hver kørsel udskriver en oversigt, hvor hvert fund har en alvorlighedsgrad:

AlvorlighedsgradBetydning
blockerDen konverterede konfiguration består ikke terraform validate, før du handler — en påkrævet værdi mangler, eller en konstruktion kan ikke repræsenteres.
warningKonverteret, men med en adfærdsforskel, der er værd at gennemgå (for eksempel en standardværdi, der afviger fra kildecloudens).
infoInformativt — en oversprunget fil, en fjernet ressource uden tilsvarende, og så videre.

Angiv --report report.json for at få den fulde maskinlæsbare liste over fund.

Afslutningskoder ​

KodeBetydning
0Konverteret rent (info- og warning-fund afslutter stadig med 0).
2Konverteret, men der findes blocker-fund — outputtet skrives stadig, men gennemgå blokeringerne, før du anvender det.
1En fejl i brug, I/O, API eller autentificering — der blev ikke skrevet noget brugbart.

Blokeringer underkender valideringen med vilje ​

Blokeringer udsendes som markører, der får terraform validate til at fejle. Det er bevidst: du kan aldrig køre terraform apply på en plan, som konverteren allerede vidste var ufuldstændig. Løs hver eneste blokering — udfyld FM-TODO-værdierne og håndter FM-CONVERT-blokkene — kør derefter terraform validate igen, og først derefter terraform plan.

Hvad der konverteres, pr. cloud ​

Den præcise mapping — hver ressourcetype og attribut, og hvad der sker med hver enkelt — er offentliggjort som en matrix pr. cloud (på engelsk):

Se matrixoversigten for alle fire.

Næste trin ​

  1. Konverter: fm terraform convert ./infra.
  2. Løs markørerne FM-TODO og FM-CONVERT i outputtet.
  3. Kør terraform init && terraform validate i outputmappen.
  4. Kør terraform plan, og gennemgå den, før terraform apply.

Konvertering til OpenTofu

fm terraform convert skriver den korte kildeadresse frostmoln/frostmoln ind i den konverterede konfiguration. Under OpenTofu kan den adresse ikke slås op — ændr den til registry.terraform.io/frostmoln/frostmoln før trin 3. Se oversigten over udbyderen.

Relateret ​

Varemærker ​

Frostmoln er en uafhængig cloududbyder og et konkurrerende alternativ til Amazon Web Services, Microsoft Azure, Google Cloud og Oracle Cloud. Frostmoln er ikke tilknyttet, godkendt af eller sponsoreret af nogen af dem. AWS, Azure, Google Cloud og Oracle Cloud er varemærker tilhørende deres respektive ejere; alle henvisninger er nominative og udelukkende af hensyn til interoperabilitet.