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

ആളുകൾ ടെറാഫോർമിൽ തുടങ്ങുമ്പോൾ, അവർ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു .tf ഫയലുകൾ വിഭവങ്ങൾ, മൊഡ്യൂളുകൾ, വേരിയബിളുകൾ. സംസ്ഥാന ഫയൽ ആദ്യത്തേതിന് ശേഷം പ്രത്യക്ഷപ്പെടുന്ന ഒന്നാണ്. apply, മിക്ക ആളുകളും അതിനെക്കുറിച്ച് ചിന്തിക്കുന്നില്ല, എന്തോ കുഴപ്പം സംഭവിക്കുന്നതുവരെ.
അവസാനം എന്തോ കുഴപ്പം സംഭവിക്കും. ഒരു സംസ്ഥാന ഫയൽ നഷ്ടപ്പെട്ടു, ഒരു കേടായി, ഒരേ സമയം രണ്ടുപേർ അപേക്ഷിക്കുന്നു, ഒരു രഹസ്യം സംസ്ഥാനത്തിലൂടെ ചോർന്നിരിക്കുന്നു. അവസ്ഥ മനസ്സിലാക്കുക എന്നതാണ് ടെറാഫോർം ഉപയോഗിക്കുന്നതിലും വിശ്വസിക്കുന്നതിലും വ്യത്യാസം. (ഓപ്പൺ ടോഫു അതേ രീതിയിൽ പ്രവർത്തിക്കുന്നു.)
ടെറഫോർമിന്റെ അവസ്ഥ ഒരു ജെസോൺ ഫയലാണ്. നിങ്ങളുടെ കോഡ് യഥാർത്ഥ ലോകത്തിലെ വിഭവങ്ങളിലേക്ക് മാപ്പ് ചെയ്യുന്നു.
നീ എഴുതിയാൽ resource "aws_s3_bucket" "logs", ഈ പ്രത്യേക ബ്ലോക്ക് ഐഡി ഉള്ള ബക്കറ്റിന് യോജിക്കുന്നു എന്ന് ഓർക്കണം acme-logs-prod നിങ്ങളുടെ AWS അക്കൌണ്ടില് . ആ മാപ്പിംഗ്, ഒപ്പം ഓരോ വിഭവത്തിന്റെയും അവസാനത്തെ അറിയപ്പെടുന്ന ആട്രിബ്യൂട്ടുകളും, സംസ്ഥാനമാണ്.
ടെറഫോർം ഇത് ഉപയോഗിക്കുന്നു:
സംസ്ഥാനമില്ലാതെ, ടെറഫോർമിന് അത് കൈകാര്യം ചെയ്യുന്ന വിഭവങ്ങളെക്കുറിച്ച് അറിയില്ല. സംസ്ഥാന ഫയൽ മായ്ക്കുക, ടെറഫോർം എല്ലാം വീണ്ടും സൃഷ്ടിക്കാൻ ശ്രമിക്കും, പഴയ വിഭവങ്ങൾ പ്രവർത്തിക്കുന്നത് തുടരുകയും ചെയ്യും, നിയന്ത്രിക്കപ്പെടാതെ.
വ്യക്തിപരമായ പരീക്ഷണത്തിനു പുറമെ എന്തെങ്കിലും ഉണ്ടെങ്കിൽ, ലോക്കിംഗ് ഉള്ള ഒരു വിദൂര ബാക്ക് എൻഡിൽ സ്റ്റേറ്റ് സൂക്ഷിക്കുക:
ലോക്കിംഗ് ഒരേ സമയം രണ്ട് ആളുകൾ (അല്ലെങ്കിൽ പൈപ്പ്ലൈനുകൾ) പ്രയോഗിക്കുന്നതും സംസ്ഥാനത്തെ കേടാക്കുന്നതും തടയുന്നു. ബക്കറ്റിലെ പതിപ്പ് തെറ്റുകളിൽ നിന്ന് തിരിച്ചുവരാൻ ചരിത്രം നൽകുന്നു.
നിങ്ങളുടെ സംസ്ഥാന ഫയൽ നിങ്ങളുടെ അടിസ്ഥാന സൌകര്യങ്ങളുടെ ഓർമ്മയാണ്. അത് നഷ്ടപ്പെട്ടാൽ, ടെറഫോം അപരിചിതരായ ഒരു വീട്ടിൽ ഓർമ്മ നഷ്ടപ്പെട്ട് ഉണരും.
സംസ്ഥാന ഫയലുകള് പലപ്പോഴും ലളിതമായ ടെക്സ്റ്റിൽ രഹസ്യങ്ങൾ: ഡാറ്റാബേസ് പാസ്വേഡുകൾ, സ്വകാര്യ കീകൾ, ടോക്കണുകൾ, അല്ലെങ്കിൽ ഒരു റിസോഴ്സ് ഒരു ആട്രിബ്യൂട്ടായി തിരികെ നൽകുന്ന എന്തും. ഒരു വേരിയബിളിനെ അടയാളപ്പെടുത്തിയാലും sensitive, അത് പ്ലാന് ഔട്ട്പുട്ടിൽ ഒളിപ്പിച്ചു വെച്ചിരിക്കുന്നു, സ്റ്റേറ്റ് ഫയലിൽ അല്ല.
രഹസ്യങ്ങളെ സംരക്ഷിക്കുന്നതുപോലെ തന്നെ സംസ്ഥാനത്തെ സംരക്ഷിക്കുക.
*.tfstate ഒപ്പം *.tfstate.backup വരെ .gitignore.ഒരു റിസോഴ്സിനു് പേരുമാറ്റുകയോ ഒരു മൊഡ്യൂളിലേക്കു് മാറ്റുകയോ ചെയ്താല് അതിന്റെ വിലാസം മാറുന്നു. ടെറഫോർമിനെ അറിയിക്കാതെ, പഴയ വിഭവം നശിപ്പിച്ച് പുതിയത് സൃഷ്ടിക്കും. ഒരു ഡാറ്റാബേസിനു വേണ്ടി, അതൊരു ദുരന്തമാണ്.
മോഡേൺ ടെറഫോർം ഇത് കോഡിൽ കൈകാര്യം ചെയ്യുന്നു 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 ബ്ലോക്കുകൾ? ഈ മൂന്നു ചോദ്യങ്ങള് ക്ക് മിക്ക അപകടസാധ്യതകളും ഉണ്ട്.
എന്റെ അഭിപ്രായം: നിങ്ങളുടെ അടിസ്ഥാന സൌകര്യത്തിലെ ഏറ്റവും സെൻസിറ്റീവ് ഫയലായി സ്റ്റേറ്റിനെ കാണുക. അതിനെ സംരക്ഷിക്കുക, പതിപ്പ് ഉണ്ടാക്കുക, ഒരിക്കലും അത് ലാപ്ടോപ്പിൽ ജീവിക്കാൻ അനുവദിക്കരുത്.
ഡെസ്ലി