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

ഞാൻ ടെറഫോർം പ്രോജക്ടുകൾ എങ്ങനെ ഘടനപ്പെടുത്തുന്നു

മൊഡ്യൂളുകൾ, പരിതസ്ഥിതികൾ, അവസ്ഥകൾ, അടുത്ത വ്യക്തിക്ക് മനസ്സിലാക്കാൻ കഴിയുന്ന വിധം സംഘടിപ്പിച്ചിരിക്കുന്നത്.

How I structure Terraform projects
AI ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രീകരണം

എല്ലാ ടെറഫോർം പ്രോജക്ടുകളും ശുദ്ധമായി തുടങ്ങുന്നു. ഒരു ഫോൾഡർ, ഒരു main.tfകുറച്ച് വിഭവങ്ങൾ. പിന്നെ രണ്ടാമത്തെ പരിസ്ഥിതി വരുന്നു. പിന്നെ കുറച്ച് സേവനങ്ങൾ കൂടി, ഒരു പങ്കിട്ട നെറ്റ്വർക്ക്, രണ്ടാമത്തെ മേഖല. രണ്ടു വര് ഷം കഴിഞ്ഞ്, 3,000 വരി വരികളുള്ള ഒരു main.tfആരും തൊടാൻ ധൈര്യപ്പെടാത്ത ഒരു സംസ്ഥാന ഫയലും പത്ത് മിനിറ്റ് എടുക്കുന്ന ഒരു പ്ലാനും.

ഘടനയാണ് അടിസ്ഥാന സൌകര്യ കോഡിന്റെ വ്യത്യാസം, അത് സുഗമമായി വളരുന്നു, കോഡും റെപ്പോയുടെ ഏറ്റവും ഇഷ്ടപ്പെട്ട ഭാഗമായി മാറുന്നു. ഇത് ഞാൻ ഉപയോഗിക്കുന്ന ലേഔട്ടാണ്. (ഇവിടെയുള്ളതെല്ലാം ഓപ്പൺ ടോഫുവിനും യോജിക്കുന്നു)

തത്വങ്ങള്

  1. ചെറിയ സംസ്ഥാന ഫയലുകൾ. അടിസ്ഥാന സൌകര്യങ്ങളെ സ്വതന്ത്രമായ ഭാഗങ്ങളായി വിഭജിക്കുക, ഓരോന്നിനും അതിന്റേതായ അവസ്ഥയുണ്ട്. ചെറിയ സ്ഫോടന റേഡിയസ്, വേഗതയേറിയ പ്ലാനുകൾ, പരസ്പരം തടയുന്ന ആളുകളുടെ എണ്ണം കുറവ്.
  2. ജീവിതചക്രം അനുസരിച്ച് വേർതിരിക്കപ്പെട്ടിരിക്കുന്നു. അപൂർവ്വമായി മാറുന്ന കാര്യങ്ങൾ (നെറ്റ്വർക്കുകൾ, അക്കൌണ്ടുകൾ) ദിവസേന മാറുന്ന കാര്യങ്ങളുമായി (ആപ്ലിക്കേഷൻ റിസോഴ്സുകൾ) സ്റ്റേറ്റ് പങ്കിടരുത്.
  3. പരിസ്ഥിതികൾ ഒരേപോലെ കാണപ്പെടുന്നു. ഒരേ കോഡ് ഉപയോഗിച്ച് വ്യത്യസ്ത ഇൻപുട്ടുകളുമായി സ്റ്റേജിംഗും പ്രൊഡക്ഷനും ഉപയോഗിക്കണം, പതുക്കെ അകന്നുപോകുന്ന പകർത്തിയ ഫോൾഡറുകളല്ല.
  4. പുനരുപയോഗിക്കാവുന്ന ലോജിക് മൊഡ്യൂളുകളിലാണ് ജീവിക്കുന്നത്.

പ്രവർത്തിക്കുന്ന ഒരു ലേഔട്ട്

infrastructure/
  modules/
    network/
    eks-cluster/
    rds-postgres/
  live/
    staging/
      network/
        main.tf
        backend.tf
        terraform.tfvars
      cluster/
      databases/
    production/
      network/
      cluster/
      databases/
  • modules/ പരിസ്ഥിതി പ്രത്യേക മൂല്യങ്ങളില്ലാത്ത പുനരുപയോഗിക്കാവുന്ന കെട്ടിട ബ്ലോക്കുകൾ അടങ്ങിയിരിക്കുന്നു.
  • live/ യഥാര് ത്ഥ വിന്യാസങ്ങള് അടങ്ങിയിരിക്കുന്നു. ഓരോ ഫോൾഡറും ഒരു സ്റ്റേറ്റ് ഫയലാണ്, പരിസ്ഥിതി-നിർദ്ദിഷ്ട ഇൻപുട്ടുകളുള്ള മൊഡ്യൂളുകൾ വിളിക്കുന്നു.
  • ഓരോ ഫോൾഡറും ചെറുതും ശ്രദ്ധ കേന്ദ്രീകരിക്കപ്പെട്ടതുമാണ്: നെറ്റ്വർക്ക്, ക്ലസ്റ്റർ, ഡാറ്റാബേസുകൾ.

പിന്നീടുള്ള ഘടകങ്ങള് ക്ക് മുമ്പുള്ളവയില് നിന്നും ഔട്ട്പുട്ടുകള് വായിക്കാം. terraform_remote_state അല്ലെങ്കിൽ, മെച്ചപ്പെട്ട, ഡാറ്റ ഉറവിടങ്ങൾ അല്ലെങ്കിൽ ഒരു പങ്കിട്ട പാരാമീറ്റർ സ്റ്റോർ ഉപയോഗിച്ച് വിഭവങ്ങൾ തിരയുന്നതിലൂടെ.

ഫോൾഡറുകളും വർക്ക്സ്പെയ്സുകളും

ടെറാഫോർമിന് ജോലിസ്ഥലങ്ങൾ, ഒരു കോൺഫിഗറേഷന് ഒന്നിലധികം അവസ്ഥകൾ അനുവദിക്കുന്നു. അവയെ പരിസ്ഥിതികളില് ഉപയോഗിക്കാന് പ്രലോഭനമാണ്: terraform workspace select production.

എനിക്കിഷ്ടം പ്രത്യേക ഫോൾഡറുകൾ പരിസ്ഥിതിക്ക് വേണ്ടി:

  • ഏത് പരിതസ്ഥിതിയിലാണ് നിങ്ങൾ പ്രവർത്തിക്കുന്നതെന്ന് കോഡിൽ കാണാനാകും.
  • പ്രൊഡക്ഷന് സ്വന്തമായി ബാക്ക് എൻഡ്, സ്വന്തം അനുമതികൾ, സ്വന്തം പൈപ്പ്ലൈൻ എന്നിവ ഉണ്ടായിരിക്കാം.
  • തെറ്റായ ജോലിസ്ഥലത്ത് അബദ്ധത്തിൽ അപേക്ഷിക്കുന്നത് ക്ലാസിക്, വേദനാജനകമായ ഒരു തെറ്റാണ്.

ഒരേ കാര്യത്തിന്റെ പല കോപ്പികളും ഉണ്ടാക്കുന്നതിനും വർക്ക്സ്പെയ്സുകൾ ഇപ്പോഴും ഉപയോഗപ്രദമാണ്, ഓരോ ഉപഭോക്താവിനും ഒരു സ്റ്റാക്ക് അല്ലെങ്കിൽ പ്രിവ്യൂ പരിതസ്ഥിതികൾ പോലെ.

ഏത് പരിസ്ഥിതി മാറ്റാൻ പോകുന്നു എന്ന് അറിയാൻ ഒരു കമാൻഡ് പ്രവർത്തിപ്പിക്കേണ്ടിവന്നാൽ, ആ ഘടന നിങ്ങളുടെ നേരെ പ്രവർത്തിക്കുന്നു.

വിദൂര നിലയും ലോക്കിംഗും

ഒരിക്കലും ലാപ്ടോപ്പില് സ്റ്റേറ്റ് സൂക്ഷിക്കരുത്. ലോക്കിംഗിനുള്ള ഒരു വിദൂര ബാക്ക്എൻഡ് ഉപയോഗിക്കുകഃ

terraform {
  backend "s3" {
    bucket       = "acme-terraform-state"
    key          = "production/network/terraform.tfstate"
    region       = "eu-central-1"
    encrypt      = true
    use_lockfile = true
  }
}

S3 ബാക്ക്എൻഡ് ഇപ്പോൾ ഒരു ലോക്ക് ഫയൽ ഉപയോഗിച്ച് നേറ്റീവ് ലോക്കിംഗിനെ പിന്തുണയ്ക്കുന്നു, അതിനാൽ പ്രത്യേക ഡൈനാമോഡിബി പട്ടിക ഇനി ആവശ്യമില്ല. അസ്യുര് സംഭരണവും ഗൂഗിൾ ക്ലൌഡ് സംഭരണ ബാക്ക്എൻഡുകളും പ്രാദേശികമായി ലോക്ക് ചെയ്തിരിക്കുന്നു.

സ്റ്റേറ്റ് ബക്കറ്റ് സംരക്ഷിക്കുക: പതിപ്പ് സജ്ജീകരണം, എൻക്രിപ്ഷൻ, അത് ആവശ്യമുള്ള ആളുകളിലേക്കും പൈപ്പ്ലൈനുകളിലേക്കും മാത്രം പ്രവേശനം. സംസ്ഥാനം പലപ്പോഴും രഹസ്യങ്ങൾ സൂക്ഷിക്കുന്നു.

ടെറഗ്രണ്ട് അല്ലെങ്കിൽ സ്റ്റാക്ക്സ്?

മുകളിലുള്ള ഫോൾഡർ ലേഔട്ടിന് ഒരു ദേഷ്യകരമായ പാർശ്വഫലമുണ്ട്: ധാരാളം ആവർത്തിച്ചുള്ള ബോട്ടിൽപ്ലേറ്റ്. ഓരോ ഫോൾഡറിനും അതിന്റെ ബാക്ക് എൻഡ് കോൺഫിഗറേഷനും പ്രൊവൈഡർ കോൺഫിഗ്രേഷനും ആവശ്യമാണ്.

സഹായകമായ ഉപകരണങ്ങൾ:

  • മണ്ണിളക്കി (ഗ്രണ്ട് വർക്കിൽ നിന്നും) കോൺഫിഗറേഷനുകൾ DRY ആയി സൂക്ഷിക്കുന്നു: ബാക്ക് എൻഡ്, പ്രൊവൈഡർ ക്രമീകരണങ്ങൾ ഒരിക്കൽ നിർവചിക്കുകയും അനന്തരാവകാശം നൽകുകയും ചെയ്യുന്നു, കൂടാതെ അവയ്ക്കിടയിൽ ആശ്രയത്വങ്ങളുള്ള നിരവധി ഫോൾഡറുകളിൽ നിങ്ങൾക്ക് കമാൻഡുകൾ പ്രവർത്തിപ്പിക്കാൻ കഴിയും. ഈ ലേഔട്ടിനായി വളരെ പ്രചാരമുണ്ട്.
  • ടെറാഫോർം സ്റ്റാക്കുകൾ (HashiCorp, HCP Terraform) പല ഘടകങ്ങളും വിന്യാസങ്ങളും ഒരുമിച്ച് സംഘടിപ്പിക്കുന്നതിനുള്ള ഔദ്യോഗിക ഉത്തരമാണ്.
  • ഓപ്പൺ ടോഫുവിന്റെ ആദ്യകാല വേരിയബിൾ വിലയിരുത്തൽ ഇത് റാപ് ലേപ്പറുകളുടെ ആവശ്യകത ഇല്ലാതാക്കുന്നു, കാരണം ഇപ്പോൾ ബാക്ക് എൻഡ് കോൺഫിഗറേഷനിൽ വേരിയബിളുകൾ ഉപയോഗിക്കാൻ കഴിയും.
  • അടിസ്ഥാന സൌകര്യങ്ങളുടെ ഓട്ടോമേഷൻ പ്ലാറ്റ്ഫോമുകൾ (സ്പേസ് ലിഫ്റ്റ്, എൻവിഎം, സ്കാൽ, എച്ച്സിപി ടെറാഫോർം) സ്റ്റാക്കുകളും ആശ്രിതത്വങ്ങളും അവരുടെ സ്വന്തം രീതിയിൽ കൈകാര്യം ചെയ്യുന്നു.

ചെറിയ ടീമിന് , കുറച്ച് ആവർത്തിച്ചുള്ള സാധാരണ ഫോൾഡറുകൾക്ക് കുഴപ്പമില്ല. ഒരു ഡസനോളം ഘടകങ്ങൾ ഉണ്ടെങ്കിൽ, ടെറഗ്രൌണ്ട് അല്ലെങ്കിൽ പ്ലാറ്റ്ഫോം പ്രതിഫലം നൽകും.

പേരും ടാഗുകളും

ചെറിയ കാര്യങ്ങൾ വലിയ ആശയക്കുഴപ്പം ഒഴിവാക്കും:

  • സ്ഥിരമായ റിസോഴ്സ് നാമങ്ങൾ: <env>-<service>-<purpose>, പോലെ prod-shop-db.
  • സ്ഥിരസ്ഥിതി ടാഗുകൾ എല്ലാ വിഭവങ്ങളും അവ സ്വപ്രേരിതമായി ലഭിക്കും.
provider "aws" {
  region = "eu-central-1"
  default_tags {
    tags = {
      environment = "production"
      owner       = "team-platform"
      managed_by  = "terraform"
      repository  = "acme/infrastructure"
    }
  }
}
  • പിൻ ദാതാവും മോഡുലാർ പതിപ്പുകളും, ഒപ്പം .terraform.lock.hcl ഫയല് .
  • ഫോർമാറ്റ് ചെയ്ത് സാധൂകരിക്കുക ഐ (terraform fmt -check, terraform validate, ട്ഫ്ലിന്റ്)

പിന്നെ, ഏറ്റവും പ്രധാനപ്പെട്ട കാര്യം എന്താണ്?

സ്റ്റേറ്റ് ഫയലുകൾ ചെറുതും ജീവിതചക്രം, പരിസ്ഥിതി എന്നിവ പ്രകാരം വേർതിരിച്ച് സൂക്ഷിക്കുക. മിക്കവാറും എല്ലാ പ്രശ്നങ്ങളും, പതുക്കെയുള്ള പദ്ധതികൾ, ഭീതിജനകമായ പ്രയോഗങ്ങൾ, സംയോജിപ്പിച്ച വൈരുദ്ധ്യങ്ങൾ, ആളുകൾ പരസ്പരം തടയുന്നു, എല്ലാം എളുപ്പമാകും.

എന്റെ അഭിപ്രായം: അടുത്ത വര് ഷം ചേരുന്നവര് ക്ക് വേണ്ടി നിങ്ങളുടെ ടെറാഫോർം ക്രമീകരിക്കുക. അവര് ക്ക് വഴി കണ്ടെത്താന് കഴിയുമെങ്കില് , നിങ്ങള് അത് ശരിയായി ചെയ്തു.

ഡെസ്ലി