कोड के रूप में बुनियादी ढांचा: टेराफॉर्म, एनीबल
कोड के रूप में बुनियादी ढांचा: टेराफॉर्म, एनीबल
1) IaC और कैसे उपकरण भिन्न होते हैं
Terraform - घोषणात्मक ऑर्केस्ट्रेटर-IaC: प्रदाताओं के माध्यम से क्लाउड इंफ्रास्ट्रक्चर (VPC, K8s, LB, DB, IAM) बनाता/संशोधित करता है। संसाधन जीवनचक्र और संग्रह राज्य का प्रबंधन करता है।
एंसिबल - प्रक्रियात्मक कॉन्फ़िग-आईएसी और कॉन्फ़िगरेशन प्रबंधन: कॉन्फ़िगर्स/सॉफ़्टवेयर (पैकेज, फ़ाइलें, सेवाएं), अनुप्रयोग, टेम्पलेटिंग, आर्केस्ट्रेशन ऑफ़ स्टेप्स प्ट करना जानहीं है। एक एजेंट (SSH/WinRM) के बिना, कार्यों की पहचान के साथ।
संयोजन: टेराफॉर्म - "प्लेटफ़ॉर्म क्या है", एनीबल - "यह कैसे कॉन्फ़िगर और लॉन्च किया जाता है।"
2) भंडार और परतों की संरचना
हम 3 परतों की सिफारिश करते हैं:1. फाउंडेशन (लैंडिंग ज़ोन): नेटवर्क, आईएएम, केएमएस, बेस लॉग/मॉनिटरिंग।
2. प्लेटफ़ॉर्म: कुबर्नेट्स क्लस्टर, डेटाबेस, कतारें, अवलोकन स्टैक।
3. कार्यभार: रिक्त स्थान/नेमस्पेस, सेवा खाता, नीतियाँ, विन्यास।
रेपो:- 'iac/terraform/' - मॉड्यूल और वातावरण (' मॉड्यूल/', 'evs/')।
- 'iac/ansibe/' - भूमिकाएँ (' roiles/'), playbooks ('playbook/'), आविष्कार (' आविष्कार/')।
- 'policies/' - OPA/conftest नियम।
- 'पाइपलाइन/' - सीआई/सीडी स्क्रिप्ट (लिंट/योजना/आवेदन/परीक्षण)।
3) टेराफॉर्म: मॉड्यूल, स्थिति, वातावरण
3. 1 मॉड्यूल
छोटा, पुन: उपयोग किया जाता है: 'vpc', 'eks', 'rds', 'redis', 'alb', 'iam-roilk'।
इनपुट्स 'चर। tf ', आउटपुट →' आउटपुट। tf ', संस्करण - मॉड्यूल/git-tags की रजिस्ट्री के माध्यम से।
मॉड्यूल कॉल का उदाहरण:hcl module "vpc" {
source = "git::ssh://git@repo/iac. git//modules/vpc? ref=v1. 6. 0"
name = "prod-core"
cidr = "10. 0. 0. 0/16"
azs = ["eu-central-1a","eu-central-1b"]
}
3. 2 राज्य
रिमोट बैकएण्ड (S3/GCS + DynamoDB/LokkTable) + लॉक।
पर्यावरण द्वारा पृथक्करण: 'प्रोड। tfstate ',' मंचन। tfstate '।
राज्य-बहाव: निर्धारित समय पर सीआई में 'टेराफॉर्म योजना'; बहाव के दौरान सतर्क।
उदाहरण बैकएण्ड:hcl terraform {
backend "s3" {
bucket = "iac-state"
key = "prod/network/terraform. tfstate"
region = "eu-central-1"
dynamodb_table = "iac-locks"
encrypt = true
}
}
3. 3 कार्यस्थल/एनवीएस
विकल्प:- अलग निर्देशिका 'ईव्स/प्रोड', 'ईवीएस/स्टेज' (दृश्य)।
- प्रकाश विविधताओं के लिए कार्यस्थल, लेकिन रहस्यों को मिलाने से बचें।
- 'tfvars' के माध्यम से पैरामीटर: 'prod। tfvars ',' मंच। tfvars '।
4) एनीबल: भूमिकाएँ, आविष्कार, आइडेम्पोटेंस
4. 1 भूमिका और प्लेबुक
गैलेक्सी मानक:
roles/
nginx/
tasks/main. yml templates/.j2 handlers/main. yml defaults/main. yml playbooks/
site. yml
प्लेबुक उदाहरण:
yaml
- hosts: web become: true roles:
- role: nginx vars:
nginx_listen_port: 8080
4. 2 इन्वेंटरी और डायनेमिक्स
'inventories/prod/hosts। yml '+ varable' group _ vars/host _ vars '।
गतिशील सूची: 'aws _ ec2', 'gcp _ compute', 'kubernetes। कोर '।
4. 3 पहचान
जहाँ संभव हो मॉड्यूल ('शेल' नहीं) का उपयोग करें।
'changed _ who '/' check _ mode' for ड्राई रन।
हैंडलर केवल परिवर्तनों को दर्शाते हैं।
5) रहस्य और कॉन्फ़िग
Terraform: 'संवेदनशील = सही' के माध्यम से मूल्यों का स्राव; रहस्य स्वयं राज्य में नहीं हैं (AWS सीक्रेट मैनेजर/HashiCorp वॉल्ट/KMS में स्टोर करें और डेटा स्रोत का उल्लेख करें)।
एंसिबल: वेरिएबल एन्क्रिप्शन के लिए वॉल्ट ('एंसिबल-वॉल्ट एन्क्रिप्ट'), HashiCorp वॉल्ट/KMS के साथ एकीकरण।
GitOps: एक अलग रेपो/भंडारण में रहस्य, कम से कम-विशेषाधिकार द्वारा पहुंच।
6) कोड के रूप में नीति
Terraform योजनाओं के लिए OPA/conftest: सार्वजनिक S3, खुले SG, अनटैग किए गए संसाधन (टैग) पर प्रतिबंध लगाना।
टेराफॉर्म क्लाउड/एंटरप्राइज - एक विकल्प के रूप में प्रहरी।
एंसिबल लिंट: शैली और सुरक्षा ('सूडो: हां' के बिना जहां जरूरत नहीं, कच्चे-खोल के बिना)।
कन्फेस्टेस्ट का उदाहरण (रेगो, सरलीकृत):rego package terraform. security
deny[msg] {
input. resource_type == "aws_security_group_rule"
input. values. cidr_blocks[_] == "0. 0. 0. 0/0"
input. values. from_port == 22 msg:= "SSH from 0. 0. 0. 0/0 is forbidden"
}
7) आईएसी परीक्षण
Terraform: एकीकरण जाँच के लिए 'tflint', 'tfsec '/' checkov', Terratest (Go)।
एंसिबल: 'एंसिबल-लिंट', अणु (+ Docker/Podman/EC2) भूमिकाओं का परीक्षण करने के लिए।
आवेदन के बाद धूम्रपान परीक्षण: HTTP जांच, पोर्ट/प्रक्रियाएं, अधिकार।
8) CI/CD и GitOps
पाइपलाइन (पुल/मर्ज अनुरोध पर):1. लिंट/सेक: tflint, tfsec/checkov, ansible-lint।
2. योजना: कलाकृतियों के प्रकाशन के साथ 'टेराफॉर्म प्लान' (एमआर में टिप्पणी)।
3. नीति द्वार: कन्फेस्टेस्ट/प्रहरी।
4. लागू करें (मैनुअल/अनुमोदित): केवल कलाकृतियों के हस्ताक्षर के साथ मुख्य पर।
5. एनीबल तैनाती: '-- चेक' मंच पर, फिर प्रोड में '--diff'।
6. पोस्ट-चेक: सिंथेटिक्स/प्रोब, एनोटेशन डैशबोर्ड जारी करें।
GitOps:- घोषणापत्र को सत्य के स्रोत के रूप में रखें; Kubernetes के लिए Argo CD/Flux, लेकिन Terraform के माध्यम से बुनियादी समूह/आदिम।
9) Kubernetes, नेटवर्क, डेटाबेस के लिए पैटर्न
9. 1 कुबर्नेट्स
टेराफॉर्म: ईकेएस/जीकेई/एकेएस क्लस्टर, नोड्स, आईएएम, स्टोरेज क्लास, एलबी।
एनीबल: एएमआई/गढ़तैयारी, छवि असेंबली/रिपॉजिटरी, पोस्ट-इंस्टॉल (लॉगर/एजेंट/ओटीएल)।
9. 2 नेटवर्क और परिधि
Terraform: VPC/subnets/NAT/Transit-Gateway/WAF, मार्ग।
Ansible: NGINX/Envoy/HAProxy config, TLS, WAF नियम कॉन्फ़िग।
9. 3 आधार/कैश/कतारें
Terraform: RDS/CloudSQL समूह पैरामीटर, Redis/ElastiCache, Kafka/MSK।
एंसिबल: कैश वार्म-अप, माइग्रेशन जॉब, बैकअप/एजेंट स्थापित करना।
10) कॉन्फ़िग के उदाहरण
10. 1 टेराफॉर्म - RDS PostgreSQL + SG
hcl module "db" {
source = "terraform-aws-modules/rds/aws"
engine = "postgres"
engine_version = "15. 4"
instance_class = "db. m6g. large"
allocated_storage = 100 name = "core"
username = var. db_user password = var. db_password # см. secret data source vpc_security_group_ids = [module. db_sg. security_group_id]
multi_az = true backup_retention = 7
}
module "db_sg" {
source = "terraform-aws-modules/security-group/aws"
name = "db-core"
vpc_id = module. vpc. vpc_id ingress_cidr_blocks = ["10. 0. 0. 0/8"]
ingress_rules = ["postgresql-tcp"]
}
10. 2 टेराफॉर्म - गुप्त का डेटा स्रोत
hcl data "aws_secretsmanager_secret_version" "db" {
secret_id = "prod/db/core"
}
variable "db_password" {
type = string sensitive = true default = jsondecode(data. aws_secretsmanager_secret_version. db. secret_string). password
}
10. 3 एनीबल - पोस्टग्रेस्कल-क्लाइंट भूमिका (टुकड़ा)
yaml
- name: Install packages apt:
name: [ "postgresql-client-15" ]
state: present update_cache: yes
- name: Create. pgpass copy:
dest: /home/deploy/.pgpass mode: '0600'
content: "{{ db_host }}:5432:core:{{ db_user }}:{{ db_password }}"
no_log: true
- name: Smoke query shell: psql -h {{ db_host }} -U {{ db_user }} -d core -c "select 1"
register: psql_out changed_when: false
10. 4 एनीबल - टेम्पलेट के साथ NGINX
yaml
- name: Deploy nginx. conf template:
src: templates/nginx. conf. j2 dest: /etc/nginx/nginx. conf notify: Restart nginx
- name: Ensure nginx running service:
name: nginx state: started enabled: true
handlers:
- name: Restart nginx service: { name: nginx, state: restarted }
11) बहाव और अनुपालन प्रबंधन
रीड-ओनली कुंजी में आवधिक 'टेराफॉर्म प्लान'; विसंगति होने पर टिकट बनाता है।
महत्वपूर्ण भूमिकाओं (ऑडिट मोड) के लिए एंसिबल -- चेक निर्धारित।
रिपोर्ट: असफल OPA/कन्फेटेस्ट पॉलिसी, अनटैग/बैकअप/मॉनिटरिंग संसाधन।
12) अवलोकन और लेखा परीक्षा
'टेराफॉर्म लागू होता है' लॉग और योजना कलाकृतियां - वस्तु भंडारण को बचाएं।
एंसिबल: 'callback _ plugins' (json) → केंद्रीय लॉग/ELK; नौकरी आईडी शामिल करें, SHA, trace_id।
मेट्रिक्स: योजनाओं/प्लेबुक का निष्पादन समय, परिवर्तन की आवृत्ति, परीक्षण कवरेज।
13) सुरक्षा
मॉड्यूल/भूमिका हस्ताक्षर या फिक्स्ड टैग/हैश।
न्यूनतम आईएएम अधिकार ('योजना' ≠ 'लागू'), सीआई और मानव ऐप की भूमिकाओं को अलग करते हैं।
राज्य/लॉग का एन्क्रिप्शन, मॉड्यूल/भूमिकाओं के निजी रजिस्टर।
नीति "वीसीएस में कोई सादा रहस्य नहीं", गुप्त स्कैनर (gitleaks/trufflehog)।
14) एंटी-पैटर्न
एक टेराफॉर्म राक्षस मॉड्यूल "सब कुछ के लिए"; गुम मॉड्यूल संस्करण।
स्थानीय 'terraform। tfstate 'और कोई ताला नहीं।
IaC → शाश्वत बहाव पर बादल में मैनुअल संपादन।
मॉड्यूल के बजाय एंसिबल 'शेल '/' कमांड' (पहचान तोड़ ता है)।
इन्वेंटरी "एक फ़ाइल में" समूह/चर के बिना, प्रॉड/स्टेज मिश्रण।
वर्स/रिपॉजिटरी में रहस्य, तिजोरी/केएमएस की अनुपस्थिति।
योजना के बिना और सहकर्मी की समीक्षा के बिना लागू करें।
15) कार्यान्वयन चेकलिस्ट (0-45 दिन)
0-10 दिन
दूरस्थ बैकएण्ड/लॉक कॉन्फ़िगर करें, Terraform मॉड्यूल फैलाएँ।
tflint/tfsec/checkov, ansible-lint सक्षम करें; संसाधन टैग/लेबल पर बातचीत करें।
NGINX/एजेंटों/लॉगर्स के लिए अनुपयुक्त भूमिकाएँ बनाएँ; आविष्कारों का आयोजन करें।
11-25 दिन
महत्वपूर्ण मॉड्यूल/भूमिकाओं के लिए कन्फेस्टेस्ट/ओपीए, टेराटेस्ट और अणु जोड़ें।
सीआई: एमआर पर 'योजना', योजना कलाकृति, अनुमोदन के साथ मैनुअल-लागू; Anible '--check' station।
एकीकृत गुप्त भंडारण (तिजोरी/केएमएस/रहस्य प्रबंधक)।
26-45 दिन
बहाव का पता लगाने के लिए स्वचालित अनुसूची, नीति रिपोर्
संस्करण के साथ मॉड्यूल/भूमिकाओं की निर्देशिका; 'README। प्रत्येक में md '।
GitOps: रिलीज़ की एनोटेशन, मॉनिटरिंग और अलर्ट गेट्स के साथ एक संयोजन।
16) परिपक्वता मैट्रिक्स
दूरस्थ राज्य और ताले वाले वातावरण का% = 100%।
परीक्षणों के साथ मॉड्यूल/भूमिकाओं का हिस्सा (टेराटेस्ट/अणु) ≥ 70%।
एमआर से आवेदन करने का औसत समय (प्रोड) घंटे है, दिन नहीं।
शून्य "मैनुअल बहाव" (सभी परिवर्तन एमआर के माध्यम से जाते हैं)।
100% महत्वपूर्ण संसाधनों को कोड (टैग, एन्क्रिप्शन, बैकअप) के रूप में नीति द्वारा कवर किया जाता है।
17) निष्कर्ष
Terraform एक अनुमानित, दोहराने योग्य बुनियादी ढांचा आधार निर्दिष्ट करता है असंगत वांछित राज्य के लिए मेजबान और सेवाएं लाता है। कोड के रूप में नीति जोड़ें, स्थान, परीक्षण, गुप्त प्रबंधन और CI/CD के साथ दूरस्थ राज्य - और आपका IaC लूप प्रबंधनीय, सुरक्षित और तेज हो जाता है, और रिलीज परमाणु और प्रतिवर्ती होते हैं।