ഞാൻ ടെറഫോർം പ്രോജക്ടുകൾ എങ്ങനെ ഘടനപ്പെടുത്തുന്നു
മൊഡ്യൂളുകൾ, പരിതസ്ഥിതികൾ, അവസ്ഥകൾ, അടുത്ത വ്യക്തിക്ക് മനസ്സിലാക്കാൻ കഴിയുന്ന വിധം സംഘടിപ്പിച്ചിരിക്കുന്നത്.
മൊഡ്യൂളുകൾ, പരിതസ്ഥിതികൾ, അവസ്ഥകൾ, അടുത്ത വ്യക്തിക്ക് മനസ്സിലാക്കാൻ കഴിയുന്ന വിധം സംഘടിപ്പിച്ചിരിക്കുന്നത്.

എല്ലാ ടെറഫോർം പ്രോജക്ടുകളും ശുദ്ധമായി തുടങ്ങുന്നു. ഒരു ഫോൾഡർ, ഒരു main.tfകുറച്ച് വിഭവങ്ങൾ. പിന്നെ രണ്ടാമത്തെ പരിസ്ഥിതി വരുന്നു. പിന്നെ കുറച്ച് സേവനങ്ങൾ കൂടി, ഒരു പങ്കിട്ട നെറ്റ്വർക്ക്, രണ്ടാമത്തെ മേഖല. രണ്ടു വര് ഷം കഴിഞ്ഞ്, 3,000 വരി വരികളുള്ള ഒരു main.tfആരും തൊടാൻ ധൈര്യപ്പെടാത്ത ഒരു സംസ്ഥാന ഫയലും പത്ത് മിനിറ്റ് എടുക്കുന്ന ഒരു പ്ലാനും.
ഘടനയാണ് അടിസ്ഥാന സൌകര്യ കോഡിന്റെ വ്യത്യാസം, അത് സുഗമമായി വളരുന്നു, കോഡും റെപ്പോയുടെ ഏറ്റവും ഇഷ്ടപ്പെട്ട ഭാഗമായി മാറുന്നു. ഇത് ഞാൻ ഉപയോഗിക്കുന്ന ലേഔട്ടാണ്. (ഇവിടെയുള്ളതെല്ലാം ഓപ്പൺ ടോഫുവിനും യോജിക്കുന്നു)
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 ബാക്ക്എൻഡ് ഇപ്പോൾ ഒരു ലോക്ക് ഫയൽ ഉപയോഗിച്ച് നേറ്റീവ് ലോക്കിംഗിനെ പിന്തുണയ്ക്കുന്നു, അതിനാൽ പ്രത്യേക ഡൈനാമോഡിബി പട്ടിക ഇനി ആവശ്യമില്ല. അസ്യുര് സംഭരണവും ഗൂഗിൾ ക്ലൌഡ് സംഭരണ ബാക്ക്എൻഡുകളും പ്രാദേശികമായി ലോക്ക് ചെയ്തിരിക്കുന്നു.
സ്റ്റേറ്റ് ബക്കറ്റ് സംരക്ഷിക്കുക: പതിപ്പ് സജ്ജീകരണം, എൻക്രിപ്ഷൻ, അത് ആവശ്യമുള്ള ആളുകളിലേക്കും പൈപ്പ്ലൈനുകളിലേക്കും മാത്രം പ്രവേശനം. സംസ്ഥാനം പലപ്പോഴും രഹസ്യങ്ങൾ സൂക്ഷിക്കുന്നു.
മുകളിലുള്ള ഫോൾഡർ ലേഔട്ടിന് ഒരു ദേഷ്യകരമായ പാർശ്വഫലമുണ്ട്: ധാരാളം ആവർത്തിച്ചുള്ള ബോട്ടിൽപ്ലേറ്റ്. ഓരോ ഫോൾഡറിനും അതിന്റെ ബാക്ക് എൻഡ് കോൺഫിഗറേഷനും പ്രൊവൈഡർ കോൺഫിഗ്രേഷനും ആവശ്യമാണ്.
സഹായകമായ ഉപകരണങ്ങൾ:
ചെറിയ ടീമിന് , കുറച്ച് ആവർത്തിച്ചുള്ള സാധാരണ ഫോൾഡറുകൾക്ക് കുഴപ്പമില്ല. ഒരു ഡസനോളം ഘടകങ്ങൾ ഉണ്ടെങ്കിൽ, ടെറഗ്രൌണ്ട് അല്ലെങ്കിൽ പ്ലാറ്റ്ഫോം പ്രതിഫലം നൽകും.
ചെറിയ കാര്യങ്ങൾ വലിയ ആശയക്കുഴപ്പം ഒഴിവാക്കും:
<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, ട്ഫ്ലിന്റ്)സ്റ്റേറ്റ് ഫയലുകൾ ചെറുതും ജീവിതചക്രം, പരിസ്ഥിതി എന്നിവ പ്രകാരം വേർതിരിച്ച് സൂക്ഷിക്കുക. മിക്കവാറും എല്ലാ പ്രശ്നങ്ങളും, പതുക്കെയുള്ള പദ്ധതികൾ, ഭീതിജനകമായ പ്രയോഗങ്ങൾ, സംയോജിപ്പിച്ച വൈരുദ്ധ്യങ്ങൾ, ആളുകൾ പരസ്പരം തടയുന്നു, എല്ലാം എളുപ്പമാകും.
എന്റെ അഭിപ്രായം: അടുത്ത വര് ഷം ചേരുന്നവര് ക്ക് വേണ്ടി നിങ്ങളുടെ ടെറാഫോർം ക്രമീകരിക്കുക. അവര് ക്ക് വഴി കണ്ടെത്താന് കഴിയുമെങ്കില് , നിങ്ങള് അത് ശരിയായി ചെയ്തു.
ഡെസ്ലി