പരിശോധന ഇൻഫ്രാസ്ട്രക്ചർ കോഡ്
നാം ആപ്ലിക്കേഷൻ കോഡ് പരിശോധിക്കുന്നു. എന്തിന് അടിസ്ഥാന സൌകര്യങ്ങൾ? ഉപകരണങ്ങളും കരാറുകളും.
നാം ആപ്ലിക്കേഷൻ കോഡ് പരിശോധിക്കുന്നു. എന്തിന് അടിസ്ഥാന സൌകര്യങ്ങൾ? ഉപകരണങ്ങളും കരാറുകളും.

ഒരു ഡെവലപ്പറോട് ചോദിക്കൂ, അവർ ടെസ്റ്റുകളില്ലാതെ ആപ്ലിക്കേഷൻ കോഡ് ലയിപ്പിക്കുമോ എന്ന്, അവർ നിങ്ങളെ വിചിത്രമായി നോക്കും. ടെറഫോർമിനെക്കുറിച്ചും ഇതേ ചോദ്യം ചോദിച്ചാൽ പല ടീമുകളും തോളുകൾ ഉയർത്തി പറയും, "ഞങ്ങൾ ഓടുന്നു plan അത് നോക്കൂ.
ഒരു പ്ലാൻ വായിക്കുന്നത് ഉപകാരപ്രദമാണ്, പക്ഷെ അത് പരീക്ഷിക്കുന്നതു പോലെയല്ല. മോഡുല് ഉദ്ദേശിച്ച പോലെ പ്രവർത്തിക്കുന്നുണ്ടോ, മാറ്റം മറ്റൊന്നിനെ തകർക്കുന്നുണ്ടോ, അല്ലെങ്കിൽ സുരക്ഷാ നിയമങ്ങൾ പാലിക്കുന്നുണ്ടോ എന്ന് കാണിക്കുന്നില്ല. അടിസ്ഥാന സൌകര്യ കോഡിന് കൂടി പരിശോധനകൾ വേണം, വ്യത്യസ്ത തരം മാത്രം.
ആപ്ലിക്കേഷൻ ടെസ്റ്റിംഗിനെ പോലെ തന്നെ, ഇൻഫ്രാസ്ട്രക്ചർ ടെസ്റ്റിങ്ങിനും പലതരം പാളികളുണ്ട്, വിലകുറഞ്ഞതും വേഗത കുറഞ്ഞതും വേഗത കുറയുന്നതും ചെലവേറിയതും:
മൂല്യം കൂടുതലും ആദ്യത്തെ രണ്ട് പാളികളിൽ നിന്നാണ്. അവസാനത്തെ കാര്യം പ്രധാനപ്പെട്ട പങ്കിട്ട മൊഡ്യൂളുകൾക്ക് വിലപ്പെട്ടതാണ്.
ഈ പരിശോധനകൾ ഓരോ കമ്മിറ്റിലും നടത്തണം, മുൻകൂട്ടി കമ്മിറ്റ് ഹുക്കുകളായി, CI ൽഃ
terraform fmt -check -recursive
terraform validate
tflint --recursive
checkov -d . # or: trivy config .
fmt ഒപ്പം validate സിന്റാക്സ്, ഫോർമാറ്റിംഗ് പ്രശ്നങ്ങൾ എന്നിവ കണ്ടെത്തുക.അവ വേഗതയുള്ളതും സൌജന്യവുമാണ്. അതിശയകരമായ ഒരു എണ്ണം യഥാർത്ഥ പ്രശ്നങ്ങൾ പിടിച്ചെടുക്കുന്നു.
ഏറ്റവും നല്ല ഇൻഫ്രാസ്ട്രക്ചർ ബഗ് ആദ്യം പിടിച്ചതാണ്.
terraform planനിന്റെ മേഘത്തോട് സംസാരിക്കാന് .
പതിപ്പ് 1.6 മുതൽ, ടെറാഫോർമിന് ഒരു ബിൽറ്റ്-ഇൻ ടെസ്റ്റിംഗ് ഫ്രെയിംവർക്ക് ഉണ്ട് (ഓപ്പൺ ടോഫുവിന് തുല്യമായ ഒരു tofu test) പരിശോധനകൾ HCL ൽ എഴുതുന്നു, .tftest.hcl ഫയലുകൾ:
# tests/bucket.tftest.hcl
variables {
name = "acme-test-logs"
environment = "staging"
}
run "bucket_is_private_and_encrypted" {
command = plan
assert {
condition = aws_s3_bucket_public_access_block.this.block_public_acls == true
error_message = "Bucket must block public ACLs."
}
assert {
condition = aws_s3_bucket.this.tags["environment"] == "staging"
error_message = "Bucket must be tagged with its environment."
}
}
കൂടെ command = plan, പരീക്ഷണങ്ങൾ പ്ലാനിന് വിരുദ്ധമായി നടക്കുന്നു, ഒന്നും സൃഷ്ടിക്കാതെ. കൂടെ command = apply, അവ യഥാര് ത്ഥ വിഭവങ്ങള് സൃഷ്ടിക്കുകയും പിന്നീട് അവയെ നശിപ്പിക്കുകയും ചെയ്യുന്നു. നിങ്ങള് ക്കും കഴിയും വ്യാജ സേവനദാതാക്കൾ, ഇത് യൂണിറ്റ് രീതിയിലുള്ള പരിശോധനകളെ വേഗത്തിലും സൌജന്യമായും ചെയ്യുന്നു.
മോഡ്യൂളുകളുടെ രചയിതാക്കൾക്ക്, ഇത് പരീക്ഷണം ആരംഭിക്കുന്നതിനുള്ള ഏറ്റവും എളുപ്പവഴിയാണ്. പുതിയ ഭാഷയും അധിക ഉപകരണങ്ങളും ഇല്ല.
ടെറാടെസ്റ്റ്, ഗ്രന്ത് വർക്ക്, ഇന്റഗ്രേഷൻ ടെസ്റ്റിംഗിനുള്ള ഒരു ഗോ ലൈബ്രറിയാണ്. ഇത് യഥാർത്ഥ ഇൻഫ്രാസ്ട്രക്ചർ വിന്യസിക്കുന്നു, അതിനെതിരെ പരിശോധനകൾ നടത്തുന്നു (HTTP അഭ്യർത്ഥനകൾ, SSH കമാൻഡുകൾ, API കോളുകൾ), അത് തകർക്കുന്നു.
func TestWebModule(t *testing.T) {
opts := &terraform.Options{TerraformDir: "../examples/web"}
defer terraform.Destroy(t, opts)
terraform.InitAndApply(t, opts)
url := terraform.Output(t, opts, "url")
http_helper.HttpGetWithRetry(t, url, nil, 200, "OK", 30, 10*time.Second)
}
ഇത് വളരെ ശക്തമാണ് കാരണം ഇത് അടിസ്ഥാന സൌകര്യം ശരിയായി ക്രമീകരിച്ചിട്ടുണ്ടോ എന്ന് മാത്രമല്ല, അത് ശരിക്കും പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കുന്നു. അത് വേഗത കുറഞ്ഞതും ഗോ അറിവ് ആവശ്യമുള്ളതും ഓരോ റണ്ണിനും യഥാർഥ പണം ചിലവാകുന്നതുമാണ്.
ഓരോ മാറ്റത്തിനും, അത് എഴുതിയത് ആരായാലും, "ഇത് അനുവദനീയമാണോ" എന്ന് നയങ്ങൾ മറുപടി നൽകുന്നു.
ഉദാഹരണ നിയമങ്ങൾ: പൊതുവായ S3 ബക്കറ്റുകൾ ഇല്ല, എല്ലാ വിഭവങ്ങൾക്കും ഉടമസ്ഥന്റെ ടാഗ് ഉണ്ടായിരിക്കണം, അംഗീകൃത ഇൻസ്റ്റൻസിംഗ് തരങ്ങൾ മാത്രം, ഉത്പാദന ഡാറ്റാബേസുകൾ ഇല്ലാതാക്കൽ പരിരക്ഷ ഉണ്ടായിരിക്കണം.
terraform plan -out=plan.out
terraform show -json plan.out > plan.json
conftest test plan.json --policy policies/
ഇന്റഗ്രേഷന് ടെസ്റ്റുകള് ക്ക് ചിലവ് വരും. നിയന്ത്രണം നിലനിർത്താനുള്ള വഴികൾ:
ഇന്ന് തന്നെ സ്റ്റാറ്റിക് ചെക്കുകൾ ഇൻഫർമേഷന് കൂട്ടിച്ചേർക്കുക. കുറച്ചു എഴുതൂ. terraform test നിങ്ങളുടെ ഏറ്റവും കൂടുതൽ ഉപയോഗിക്കുന്ന മൊഡ്യൂളിന്റെ ആര് ഥ്യങ്ങള് . നിങ്ങളുടെ ഏറ്റവും പ്രധാനപ്പെട്ട നിയമങ്ങള് ക്ക് ഒന്നോ രണ്ടോ നയങ്ങള് ചേര് ക്കുക. സമയവും ചെലവും ന്യായീകരിക്കാൻ ഒരു മൊഡ്യൂൾ വളരെ നിർണായകമാണെങ്കില് മാത്രമേ ടെറാടെസ്റ്റ് ചേർക്കൂ.
എന്റെ അഭിപ്രായം: ചെലവേറിയ രീതിയിലുള്ള അടിസ്ഥാന സൌകര്യങ്ങളുടെ പരാജയം. ചില വിലകുറഞ്ഞ പരിശോധനകൾ പിന്നീട് വിലയേറിയ ഒരു പാഠം രക്ഷിക്കും.
ഡെസ്ലി