Text size
പരീക്ഷിച്ചറിഞ്ഞത്6 മിനിറ്റ് വായന

ടെറാഫോർം അവസ്ഥ വിശദീകരിച്ചു

നിങ്ങളുടെ അടിസ്ഥാന സൌകര്യങ്ങളെ കുറിച്ചും അത് എങ്ങനെ സുരക്ഷിതമായി സൂക്ഷിക്കാമെന്നും എല്ലാം അറിയുന്ന ഫയൽ.

Terraform state, explained
AI ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രീകരണം

ആളുകൾ ടെറാഫോർമിൽ തുടങ്ങുമ്പോൾ, അവർ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു .tf ഫയലുകൾ വിഭവങ്ങൾ, മൊഡ്യൂളുകൾ, വേരിയബിളുകൾ. സംസ്ഥാന ഫയൽ ആദ്യത്തേതിന് ശേഷം പ്രത്യക്ഷപ്പെടുന്ന ഒന്നാണ്. apply, മിക്ക ആളുകളും അതിനെക്കുറിച്ച് ചിന്തിക്കുന്നില്ല, എന്തോ കുഴപ്പം സംഭവിക്കുന്നതുവരെ.

അവസാനം എന്തോ കുഴപ്പം സംഭവിക്കും. ഒരു സംസ്ഥാന ഫയൽ നഷ്ടപ്പെട്ടു, ഒരു കേടായി, ഒരേ സമയം രണ്ടുപേർ അപേക്ഷിക്കുന്നു, ഒരു രഹസ്യം സംസ്ഥാനത്തിലൂടെ ചോർന്നിരിക്കുന്നു. അവസ്ഥ മനസ്സിലാക്കുക എന്നതാണ് ടെറാഫോർം ഉപയോഗിക്കുന്നതിലും വിശ്വസിക്കുന്നതിലും വ്യത്യാസം. (ഓപ്പൺ ടോഫു അതേ രീതിയിൽ പ്രവർത്തിക്കുന്നു.)

യഥാർത്ഥത്തിൽ ഏത് സംസ്ഥാനമാണ്

ടെറഫോർമിന്റെ അവസ്ഥ ഒരു ജെസോൺ ഫയലാണ്. നിങ്ങളുടെ കോഡ് യഥാർത്ഥ ലോകത്തിലെ വിഭവങ്ങളിലേക്ക് മാപ്പ് ചെയ്യുന്നു.

നീ എഴുതിയാൽ resource "aws_s3_bucket" "logs", ഈ പ്രത്യേക ബ്ലോക്ക് ഐഡി ഉള്ള ബക്കറ്റിന് യോജിക്കുന്നു എന്ന് ഓർക്കണം acme-logs-prod നിങ്ങളുടെ AWS അക്കൌണ്ടില് . ആ മാപ്പിംഗ്, ഒപ്പം ഓരോ വിഭവത്തിന്റെയും അവസാനത്തെ അറിയപ്പെടുന്ന ആട്രിബ്യൂട്ടുകളും, സംസ്ഥാനമാണ്.

ടെറഫോർം ഇത് ഉപയോഗിക്കുന്നു:

  • എന്താണുള്ളതെന്ന് അറിയുക, അങ്ങനെ അത് ശരിയായ വിഭവങ്ങൾ അപ്ഡേറ്റ് ചെയ്യാനോ ഇല്ലാതാക്കാനോ കഴിയും.
  • പ്ലാൻ കണക്കുകൂട്ടുക കോഡ്, അവസ്ഥ, യാഥാര് ത്ഥ്യം എന്നിവ താരതമ്യം ചെയ്തുകൊണ്ട്.
  • ട്രാക്ക് ആശ്രിതത്വം വിഭവങ്ങള് തമ്മിലുള്ള ഉല് പ്പാദനവും.
  • കാര്യങ്ങൾ വേഗത്തിലാക്കുക., എല്ലാ സമയത്തും എല്ലാം ഒന്നിൽ നിന്ന് നോക്കുന്നതിലൂടെ.

സംസ്ഥാനമില്ലാതെ, ടെറഫോർമിന് അത് കൈകാര്യം ചെയ്യുന്ന വിഭവങ്ങളെക്കുറിച്ച് അറിയില്ല. സംസ്ഥാന ഫയൽ മായ്ക്കുക, ടെറഫോർം എല്ലാം വീണ്ടും സൃഷ്ടിക്കാൻ ശ്രമിക്കും, പഴയ വിഭവങ്ങൾ പ്രവർത്തിക്കുന്നത് തുടരുകയും ചെയ്യും, നിയന്ത്രിക്കപ്പെടാതെ.

വിദൂര സംസ്ഥാനം, എപ്പോഴും

വ്യക്തിപരമായ പരീക്ഷണത്തിനു പുറമെ എന്തെങ്കിലും ഉണ്ടെങ്കിൽ, ലോക്കിംഗ് ഉള്ള ഒരു വിദൂര ബാക്ക് എൻഡിൽ സ്റ്റേറ്റ് സൂക്ഷിക്കുക:

  • S3 (നേറ്റീവ് ലോക്ക് ഫയലുകളുമായി), ഗൂഗിൾ ക്ലൌഡ് സംഭരണം, അസ്യുര് ബ്ലോബ് സംഭരണം
  • എച്ച് സി പി ടെറാഫോർം അല്ലെങ്കിൽ മറ്റ് അടിസ്ഥാന സൌകര്യ ഓട്ടോമേഷൻ പ്ലാറ്റ്ഫോമുകൾ

ലോക്കിംഗ് ഒരേ സമയം രണ്ട് ആളുകൾ (അല്ലെങ്കിൽ പൈപ്പ്ലൈനുകൾ) പ്രയോഗിക്കുന്നതും സംസ്ഥാനത്തെ കേടാക്കുന്നതും തടയുന്നു. ബക്കറ്റിലെ പതിപ്പ് തെറ്റുകളിൽ നിന്ന് തിരിച്ചുവരാൻ ചരിത്രം നൽകുന്നു.

നിങ്ങളുടെ സംസ്ഥാന ഫയൽ നിങ്ങളുടെ അടിസ്ഥാന സൌകര്യങ്ങളുടെ ഓർമ്മയാണ്. അത് നഷ്ടപ്പെട്ടാൽ, ടെറഫോം അപരിചിതരായ ഒരു വീട്ടിൽ ഓർമ്മ നഷ്ടപ്പെട്ട് ഉണരും.

അത് രഹസ്യമായി സൂക്ഷിക്കുന്നു.

സംസ്ഥാന ഫയലുകള് പലപ്പോഴും ലളിതമായ ടെക്സ്റ്റിൽ രഹസ്യങ്ങൾ: ഡാറ്റാബേസ് പാസ്വേഡുകൾ, സ്വകാര്യ കീകൾ, ടോക്കണുകൾ, അല്ലെങ്കിൽ ഒരു റിസോഴ്സ് ഒരു ആട്രിബ്യൂട്ടായി തിരികെ നൽകുന്ന എന്തും. ഒരു വേരിയബിളിനെ അടയാളപ്പെടുത്തിയാലും sensitive, അത് പ്ലാന് ഔട്ട്പുട്ടിൽ ഒളിപ്പിച്ചു വെച്ചിരിക്കുന്നു, സ്റ്റേറ്റ് ഫയലിൽ അല്ല.

രഹസ്യങ്ങളെ സംരക്ഷിക്കുന്നതുപോലെ തന്നെ സംസ്ഥാനത്തെ സംരക്ഷിക്കുക.

  • ശാന്തമായ ക്രിപ്ഷൻ സംഭരണ ബക്കറ്റില് .
  • കർശനമായ പ്രവേശന നിയന്ത്രണം: പൈപ്പ്ലൈനിനും ഏതാനും അഡ്മിനിസ്ട്രേറ്റർമാർക്കും മാത്രമേ ഉല്പാദന നില വായിക്കാൻ കഴിയൂ.
  • ഗിറ്റിനോട് ഒരിക്കലും സ്റ്റേറ്റ് കംമെന്റ് ചെയ്യരുത്. കൂട്ടിച്ചേര് ക്കുക *.tfstate ഒപ്പം *.tfstate.backup വരെ .gitignore.
  • ഓപ്പൺ ടോഫുവിന്റെ ക്ലയന്റ് സൈഡ് സ്റ്റേറ്റ് എൻക്രിപ്ഷൻ നിങ്ങളുടെ മെഷീനില് നിന്നും പൈപ്പ് ലൈനില് നിന്നും പുറത്തുപോകുന്നതിനു മുമ്പ്, ഒരു KMS കീ ഉപയോഗിച്ച്, സ്റ്റേറ്റ് എൻക്രിപ്റ്റ് ചെയ്യുന്നു.
  • ടെറഫോർമിന്റെ അപ്രതീക്ഷിത വിഭവങ്ങളും എഴുതൽ മാത്രം വാദങ്ങളും ചില രഹസ്യ മൂല്യങ്ങള് സംസ്ഥാനത്തിന് പുറത്തായി സൂക്ഷിക്കുക.
  • ടെറാഫോർമിന് പുറത്ത് രഹസ്യങ്ങൾ സൃഷ്ടിക്കുക. സാധ്യമെങ്കിൽ, രഹസ്യ മാനേജര് യിൽ, റഫറന് സുകള് മാത്രം കൈമാറുക.

നീക്കവും പുനർനിർമ്മാണവും

ഒരു റിസോഴ്സിനു് പേരുമാറ്റുകയോ ഒരു മൊഡ്യൂളിലേക്കു് മാറ്റുകയോ ചെയ്താല് അതിന്റെ വിലാസം മാറുന്നു. ടെറഫോർമിനെ അറിയിക്കാതെ, പഴയ വിഭവം നശിപ്പിച്ച് പുതിയത് സൃഷ്ടിക്കും. ഒരു ഡാറ്റാബേസിനു വേണ്ടി, അതൊരു ദുരന്തമാണ്.

മോഡേൺ ടെറഫോർം ഇത് കോഡിൽ കൈകാര്യം ചെയ്യുന്നു moved ബ്ലോക്കുകൾ:

moved {
  from = aws_s3_bucket.logs
  to   = module.logging.aws_s3_bucket.this
}

പ്ലാന് കാണിക്കുന്നത് ഒരു നീക്കം ആണ്, നശിപ്പിച്ച് സൃഷ്ടിക്കുന്നതിനു പകരം. കാരണം അത് കോഡിലാണ്, അത് അവലോകനം ചെയ്യപ്പെടുകയും എല്ലാ പരിതസ്ഥിതികളിലും പ്രവർത്തിക്കുകയും ചെയ്യുന്നു. പഴയതിനേക്കാൾ സുരക്ഷിതമാണ് terraform state mv കമാന് ഡ്.

നിലവിലുള്ള വിഭവങ്ങൾ ഇറക്കുമതി ചെയ്യുക

കൈകൊണ്ട് സൃഷ്ടിച്ച ഒരു വിഭവം ടെറഫോർമിന്റെ നിയന്ത്രണത്തിലാക്കാന് , import ബ്ലോക്കുകൾ:

import {
  to = aws_s3_bucket.legacy
  id = "acme-legacy-bucket"
}

ഓടിപ്പോകുക. terraform plan -generate-config-out=generated.tf ടെറഫോർം പോലും റിസോഴ്സ് കോൺഫിഗറേഷന്റെ ആദ്യ ഡ്രാഫ്റ്റ് എഴുതുന്നു. അത് വൃത്തിയാക്കി, വീണ്ടും പ്ലാൻ ചെയ്ത് അപേക്ഷിക്കുക.

മാനേജ്മെന്റിന്റെ വിഭവങ്ങൾ നീക്കം ചെയ്യുക

ചിലപ്പോള് ഒരു റിസോഴ്സ് ഇല്ലാതാക്കാതെ തന്നെ അത് കൈകാര്യം ചെയ്യുന്നത് അവസാനിപ്പിക്കണമെന്ന് നിങ്ങൾ ആഗ്രഹിക്കുന്നു, ഉദാഹരണത്തിന് മറ്റൊരു സ്റ്റാക്കിലേക്ക് കൈമാറുമ്പോൾ. ഒരു removed ബ്ലോക്ക്:

removed {
  from = aws_s3_bucket.handover

  lifecycle {
    destroy = false
  }
}

വിഭവം ക്ലൌഡിൽ തന്നെ തുടരുന്നു. ടെറഫോർം അത് മറന്നു കളയും.

അത് പൊട്ടിപ്പോകുമ്പോൾ

ചില സാഹചര്യങ്ങളും എന്തു ചെയ്യണം എന്നതും:

  • പഴയ ലോക്ക് ഒരു പൈപ്പ് ലൈനിന് റെ തകര് പ്പിന് ശേഷം: terraform force-unlock <lock-id>, പക്ഷെ ഒന്നും പ്രവർത്തിക്കുന്നില്ലെന്ന് പരിശോധിച്ചതിനു ശേഷമേ.
  • കേടായതോ തെറ്റായതോ ആയ അവസ്ഥ: ബക്കറ്റിന്റെ പതിപ്പ് ചരിത്രത്തിൽ നിന്നും ഒരു മുൻ പതിപ്പ് പുനഃസ്ഥാപിക്കുക. അതുകൊണ്ടാണ് പതിപ്പ് മാറ്റം പ്രധാനം.
  • യാഥാര് ത്ഥ്യവുമായി പൊരുത്തപ്പെടാത്ത അവസ്ഥ: terraform plan -refresh-only വ്യത്യാസങ്ങള് കാണിക്കുന്നു, ഒപ്പം terraform apply -refresh-only അടിസ്ഥാന സൌകര്യങ്ങള് മാറ്റാതെ യാഥാര് ത്ഥ്യവുമായി പൊരുത്തപ്പെടുന്ന തരത്തില് അപ്ഡേറ്റുകള് നടത്തുന്നു.
  • സംസ്ഥാനം പരിശോധിക്കേണ്ടതുണ്ട്.: terraform state list ഒപ്പം terraform state show <address> സുരക്ഷിതവും വായിക്കാൻ മാത്രമുള്ളതുമായ വഴികളാണ് ഉള്ളിലേക്ക് നോക്കാനുള്ളത്.

ജെ എസ് ഒ എൻ കൈകൊണ്ട് എഡിറ്റ് ചെയ്യാതിരിക്കുക. ശരിക്കും വേണമെങ്കിൽ ആദ്യം ഒരു ബാക്കപ്പ് എടുക്കൂ, നിങ്ങൾ ഒറ്റയ്ക്കാണെന്ന് അറിയുക.

ഇന്ന് നിങ്ങള് എന്തൊക്കെ പരിശോധിക്കണം?

എല്ലാ സംസ്ഥാന ഫയലുകളും വിദൂരമായി ലോക്ക് ചെയ്തിട്ടുണ്ടോ, പതിപ്പുകൾ പരിശോധിച്ചോ, എൻക്രിപ്റ്റ് ചെയ്തോ? ആര് ക്ക് ഉല്പാദന നിലയിലേക്ക് പ്രവേശനം ഉണ്ട്? നീ ഇപ്പോഴും state mv കമാന് ഡുകള് പകരം moved ബ്ലോക്കുകൾ? ഈ മൂന്നു ചോദ്യങ്ങള് ക്ക് മിക്ക അപകടസാധ്യതകളും ഉണ്ട്.

എന്റെ അഭിപ്രായം: നിങ്ങളുടെ അടിസ്ഥാന സൌകര്യത്തിലെ ഏറ്റവും സെൻസിറ്റീവ് ഫയലായി സ്റ്റേറ്റിനെ കാണുക. അതിനെ സംരക്ഷിക്കുക, പതിപ്പ് ഉണ്ടാക്കുക, ഒരിക്കലും അത് ലാപ്ടോപ്പിൽ ജീവിക്കാൻ അനുവദിക്കരുത്.

ഡെസ്ലി