GH GambleHub

Infrastructure as Code: Terraform, Ansible

Infrastructure as Code: Terraform, Ansible

1) Ինչու՞ IaC-ն և ինչ գործիքներ են տարբերվում։

Terraform-ը դեկորատիվ orchestram-IaC-ն է 'ստեղծում/փոխում է ամպային ենթակառուցվածքը (SDC, K8s, LB, BD, IAM) պրովայդերների միջոցով։ Կառավարում է ռեսուրսների կյանքի ցիկլը և պահպանում վիճակը։

Ansible-ը ֆեդեգրաֆիայի-IaC-ի և միգրացիոն ղեկավարությունն է 'տեղադրում է հոստներ/ծրագրակազմեր (փաթեթներ, ֆայլեր, ծառայություններ), գիտի, թե ինչպես է դիմումները, տեմպլեյթինգը, քայլերի նվագարկումը։ Առանց գործակալի (SSH/WinRM), խնդիրների դիմադրության հետ։

Համադրություն ՝ Terraform-ը «որից պատրաստված է պլատֆորմը», Ansible-ը '«ինչպես է այն տրամադրվում և սկսվում»։

2) Ռեպոզորիայի և շերտերի կառուցվածքը

3 շերտի տրամագիծը

1. Foundation (Landing Zone) 'ցանցեր, IAM, KMS, հիմնական ամսագրեր/2019։

2. Platform: Kubernetes կլաստերներ, հիմքեր, հերթեր, observability-ek։

3. Workloads: Տարածքներ/նեյրոսպեյսներ, ծառայողական հաշիվներ, քաղաքականություններ, դելեգներ։

Ռեպո

«iac/terraform/» - մոդուլներ և միջավայրեր (« modules/», «envs/»)։

«iac/ansible/» - դերեր (« roles/»), պլեյբուսներ («playbooks/»), բուլիարի (« entories/»)։

«policies/» - OPA/Wintest կանոնները։

«pipelines/» - CI/CD ջութակներ (lint/plan/apply/test)։

3) Terraform: մոդուլներ, սթեյթ, շրջապատեր,

3. 1 Մոդուլներ

Փոքր, փոխպատվաստված ՝ «www.c», «eks», «rds», «redis», «alb», «iam-role»։

Մուտքերը 'variables։ tf ', TED-ը։ tf ', տարբերակները' մոդուլների/git-tegi-ի միջոցով։

Զանգահարելու օրինակը բացատրվում է

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 վիճակ (state)

Հեռավոր backend (S3/GCS + DeloDB/DiskTable) + արգելափակումը։

Բաժանումը շրջապատով '<108։ tfstate`, `staging. tfstate`.

State-drift: «terraform plan» CI-ում գրաֆիկում։ Ալերտը դրեյֆում է։

Backend-ի օրինակ

hcl terraform {
backend "s3" {
bucket     = "iac-state"
key      = "prod/network/terraform. tfstate"
region     = "eu-central-1"
dynamodb_table = "iac-locks"
encrypt    = true
}
}

3. 3 Workspaces / Envs

Տարբերակները

Առանձին կոմպոզիցիաներ և «envs/no», «envs/stage» (տեսողական)։

Workspaces-ը թեթև տարբերությունների համար, բայց խուսափեք գաղտնիքները խառնելուց։

Պարամետրերը 'tfvars ':' 108։ tfvars`, `stage. tfvars`.

4) Ansible 'դերեր, Dimari, idempotention

4. 1 Դերեր և պլեյբուսներ

Black Galaxy


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 '+ ww.gg _ vars/host _ vars "։

Դինամիկ կիսագնդի '"aws _ ec2", "gcp _ comport", "kubernetes։ core`.

4. 3 Idempotenty

Օգտագործեք մոդուլները (ոչ «shell») այնտեղ, որտեղ հնարավոր է։

«changed _ when »/« www.k _ mode» չոր անցքերի համար։

Handlers-ը ռեֆլեկտիվացնում է միայն փոփոխությունների ժամանակ։

5) Գաղտնիքներն ու եզրերը

Terraform: արժեքների սեկրեցիա '«sportitive = www.ru»; գաղտնիքները state չեն (պահեք AWS Secrets System/HashiProp Vox/KFC-ում և հղում կատարեք աղբյուրին)։

Ansible: Vox-ը փոփոխականների համար («ansible-vensencrypt»), ինտեգրումը HashiProp Vance/KSA-ի հետ։

GitOps: գաղտնիքները առանձին ռեպո/պահեստում, հասանելիությունը ձախ-privilege։

6) Քաղաքականությունը և համապատասխանությունը (Policy as Code)

OPA/Wintest-ը Terraform պլանների համար 'հանրային S3 արգելք, բաց SG, անհնազանդ ռեսուրսներ (tags)։

Terraform Cloud/Enterprise - Sentinel որպես այլընտրանք։

Ansible Lint: ոճը և անվտանգությունը (առանց 'sudo: yes' որտեղ կարիք չկա, առանց rance-shell)։

Distest (rego, պարզեցված)։

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) IaC թեստավորում

Terraform: «tflint», «tfsec »/« www.kov», Terratest (Go) ինտեգրացիոն ստուգումների համար։

Ansible: «ansible-lint», Molecule (+ Docker/Podman/EC2) դերերը ստուգելու համար։

Smok-թեստերը 'HTTP probes, նավահանգիստ/գործընթացներ, իրավունքներ։

8) CI/CD и GitOps

Propline (Pox/Merge Request)

1. Lint/Sec: tflint, tfsec/checkov, ansible-lint.

2. Plan: «terraform plan» -ը արտեֆակտի հրապարակմամբ (մեկնաբանություն MR)։

3. Policy Gate: Conftest/Sentinel.

4. Appy (manault/approved) 'միայն main-ի վրա արտեֆակտների ստորագրությամբ։

5. Ansible deploy: "--check" -ը stage-ում, ապա '----diff "-ում։

6. Post-interks: սինթեզիկա/Probe, dashbord Records։

GitOps:
  • Պահեք մանիֆեստները որպես ճշմարտության աղբյուր։ Argo CD/Flux-ի համար, բայց հիմնական կլաստերները/պրիմիտիվները Terraform-ի միջոցով։

9) Kubernetes, ցանցեր, BD

9. 1 Kubernetes

Terraform: EKS/GKE/AKS կլաստերներ, AM, Storts Class, LB։

Ansible: AMI/bastions պատրաստումը, պատկերների/ռեպոզորիայի հավաքումը, post-install (loggers/07/OTel)։

9. 2 Ցանցեր և պարիմետրեր

Terraform: MSC/ենթաօրենսդրություն/NAT/Transit-Gateway/WAF, երթուղիներ։

Ansible: NGINX/Envoy/HAProxy, TSA, WAF-ի դելեգները։

9. 3 Հիմքեր/քեշներ/հերթեր

Terraform: RDS/CloudSQL պարամետրային խումբ, Redis/ElastiCache, Kafka/MSK։

Ansible 'տաքացնելով քեշը, խմբակցությունների առաջադրանքները, Բեքապների/գործակալների կարգադրությունը։

10) Եզրագծերի օրինակներ

10. 1 Terraform — 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 Terraform-ը գաղտնիության նախկին աղբյուրն է

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 Ansible - postgresql-client (հատված)

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 Ansible - 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) Դրեյֆի կառավարումը և ագրեսիան

Պարբերական 'terraform plan' - read-only բանալին; ստեղծում է թիկեթ, երբ դուրս է գալիս։

Ansible--check-ը կրիտիկական դերերի համար (audit-ռեժիմը)։

Զեկույցները ՝ OPA/Wintest քաղաքականությունները, ռեսուրսները առանց թեգերի/backup/մոնիտորինգի։

12) Դիտողությունն ու աուդիտը

Լոգները 'terraform apply "և պլանների արտեֆակտները, պահպանեք օբյեկտի պահեստում։

Ansible: «callback _ plugins» (json) - կենտրոնական լոգ/ELK; միացրեք jB ID, commit SHA, trace _ id.

Պիտակները 'պլանների/պլեյբուսների կատարման ժամանակը, փոփոխության հաճախությունը, թեստերի ծածկումը։

13) Անվտանգություն

Մոդուլների/դերերի ստորագրումը կամ ֆիքսված թեգերը/հեշերը։

Նվազագույն IAM իրավունքները («plan 'port 'apply»), կիսեք CI և Appruver դերերը։

Պետության/լոգարանների կոդավորումը, մոդուլների/դերերի մասնավոր օրինակները։

Քաղաքականությունը «plaintext secrets in VCS», գաղտնիքը սկաներներ (gitleaks/trufflehog)։

14) Anti-patterna

Մեկ հրեշային մոդուլ Terraform «ամեն ինչի վրա»; մոդուլների տարբերակների բացակայությունը։

Տեղական 'terraform։ tfstate 'և արգելափակումների բացակայությունը։

IaC-ի վերևում գտնվող ամպի ձեռքով ձեռքերը հավիտենական դրեյֆ են։

Ansible 'shell '/« command »-ը մոդուլների փոխարեն (կոտրում է idempotention)։

Ֆեդարը «մեկ ֆայլում» առանց խմբերի/փոփոխականների, խառնուրդի/stage։

Գաղտնիքները vars/rezosory, Vox/KFC բացակայությունը։

Appy առանց Plan-ի և առանց Peer Review-ի։

15) Ներդրման թուղթ (0-45 օր)

0-10 օր

Տեղադրել հեռավոր backend/www.k, տեղադրել Terraform մոդուլները։

Ներառել tflint/tfsec/www.kov, ansible-lint; պայմանավորվել փորձարկումների/ռեսուրսների պիտակների մասին։

Ansible-ի դերը NGINX/գործակալների/լոգերների համար։ կազմակերպենք դելարի։

11-25 օր

Ավելացնել Deltest/OPA, Terratest և Molecule-ը կրիտիկական մոդուլների/դերերի համար։

CI: «plan» -ը MR-ում, պլանի արտեֆակտը, manox-apply-ը 'appruve-ով; Ansible `--check` на stage.

Ինտեգրել գաղտնի պահեստը (Vox/KMS/Secrets System)։

26-45 օր

Avto պլանը drift-ի համար, քաղաքական հաշվետվությունները։

Մոդուլների/դերերի կատալոգը տարբերակով; 07 'READA։ md 'յուրաքանչյուրում։

GitOps: Առյուծների ծանոթությունները, մոնիտորինգի և ալերտ խաղացողների հետ։

16) Հասունության մետրերը

հեռավոր state և lock շրջակա միջավայրի% -ը = 100%։

Մոդուլների/դերերի մասնաբաժինը թեստերի հետ (Terratest/Molecule) կազմում է 70 տոկոսը։

Միջին ժամանակը MR-ից մինչև apply (2019) - ժամացույց, ոչ օրեր։

Զրոյական «ձեռքով» (բոլոր փոփոխությունները կատարվում են MR-ի միջոցով)։

Կրիտիկական ռեսուրսների 100 տոկոսը ծածկված է Policy as Code (թեգեր, կոդավորում, backup)։

17) Եզրակացություն

Terraform-ը տալիս է կանխատեսելի, կրկնվող ենթակառուցվածքի հիմքը։ Ansible-ը բերում է հանրակացարաններ և ծառայություններ մինչև ֆինանսական վիճակը։ Ավելացրեք Policy as Code-ը, հեռացված state-ը, փորձարկումները, գաղտնի կառավարումը և CI/CD-ը plan plan prodaply-ով, և ձեր IaC-ն կդառնա կառավարվող, անվտանգ և արագ, իսկ թողարկումները ՝ ատոմային և շրջադարձային։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։