Logo GH

Terraform и Infrastructure as Code

(Բաժին ՝ Տեխնոլոգիաներ և ենթակառուցվածքներ)

Live ռեզյումե

Terraform-ը IaC-ի հիմնական գործիքն է iGaming-ի ամպային ենթակառուցվածքի վերարտադրված և ստուգված ստեղծման համար 'SDC/ենթատեքստ, BD/կլաստերներ, հերթեր/անվադողեր, KMS/Secrets, Kubernetes կլաստերներ, CDN և 105։ Հաջողությունը պահպանվում է մոդուլային ճարտարապետության, սթեյթի և արգելափակման խիստ քաղաքականության, GitOps-մոտեցման, Policy-as-Code-ի, ավտոմատ թեստավորման և թափանցիկ FinOps-ի վրա։

1) IaC սկզբունքները iGaming-ի համար

Ագրեսիվություն 'ենթակառուցվածքը նկարագրված է կոդով։ ձեռքի քայլեր չկան։

Idempotention: Երկրորդ «apply» -ը տալիս է նույն արդյունքը։

Շրջակա միջավայրի բաժանումը '«dev/stage/www.ru» մեկ կոորդինատից։

Մոդուլների իրականացումը 'մոդուլների միասնական կատալոգը CPC, BD, հերթերը, K8s, մոնիտորինգի համար։

Լռելյայն անվտանգությունը 'մասնավոր հաշվարկներ, mTSA, նվազագույն IAM իրավունքները։

Դիտարկումը և արժեքը 'մետրերը/ալտերտերը/բյուջեները նույնպես Terraform-ի տակ են։

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

Մոնորեպոյի տարբերակը (օրինակ)


iac/
modules/
vpc/
mysql/
kafka/
eks_aks_gke/
redis/
monitoring/
envs/
prod/
eu-west/
main. tf variables. tf backend. tf stage/
eu-west/
...
dev/
...
policies/
opa/
sentinel/
pipelines/
ci_cd/

Այլընտրանքը մոդուլային ռեպո է (յուրաքանչյուր հաճախորդի համար առանձին ռեպոզորիա) + սպառողները։

3) Ռուսական մոդուլիզմը (HCL օրինակ)

SDC մոդուլը (modules/www.c/main։ tf):
hcl variable "name" {}
variable "cidr" {}
variable "az_count" { default = 3 }

cloud provider resources (summarized)
resource "cloud_vpc" "this" { name = var. name cidr = var. cidr }
resource "cloud_subnet" "private" {
count = var. az_count vpc_id = cloud_vpc. this. id type  = "private"
}
output "vpc_id" { value = cloud_vpc. this. id }
output "private_subnets" { value = cloud_subnet. private[].id }
Կոդավորման սպառումը (envs/07/eu-west/main. tf):
hcl module "vpc" {
source = "../../modules/vpc"
name  = "prod-eu-west"
cidr  = "10. 20. 0. 0/16"
}

module "mysql" {
source = "../../modules/mysql"
name  = "payments"
vpc_id = module. vpc. vpc_id subnets = module. vpc. private_subnets pitr  = true size  = "r6g. large"
kms_key = module. kms. key_id
}

4) Սթեյթի կառավարումը (state) և արգելափակումը

Հեռացված backend (օրինակ օբյեկտի պահեստ) + արգելափակումը (DeloDB/Blob-4k) կանխում է «apply» մրցավազքը։

Backend-ի տարբերակումը և սթեյթի կոդավորումը (KFC)։

Մուտքի կանոնները 'միայն CI/CD և «infra owners» իրավունք ունեն «apply»։ զարգացողները '«plan»։

Workspaces vs-ը և շրջապատերը

Workspaces-ը հարմար է նման միջավայրերի համար (շրջանառություն),

Որոշ կատալոգներ հստակ մեկուսացված միգրացիայի և տարբեր տեղաբանության համար են։

Backend-ի օրինակ։ tf (ընդհանրացված)

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

5) Մոսկվան, գաղտնիքները և զգայուն տվյալները

variables. tf + .tfvars շրջապատի համար; softitive = medical մասնավոր արժեքների համար։

Գաղտնիքները չեն պահվում Git-ում։ Օգտագործեք Secret Express/KFC-ի կոնսումպացիան 108-source կամ պրովայդերի միջոցով։

Լռելյայն կոդավորումը 'հատորների/baps/propschots/տվյալների համար։

Rotation: բանալիները և գաղտնաբառերը ինքնաբերաբար պտտվում են։

hcl variable "db_password" {
type   = string sensitive = true
}

data "external_secret" "db_password" {
conceptual secret source name = "prod/payments/db_password"
}

6) GitOps և CI/CD Terraform համար

PR-ֆլոուն '"terraform fmt' enter 'init 'validate' no 'tflint 'plan' s PR-ում ձեռքով approve no 'appropy' CI-ից։

Շրջակա միջավայրի խթանումը 'առաջին անգամ "stage", ապա teg/merge "։

Լոգներն ու արտեֆակտները 'պլանի և թողարկման պահպանումը, արտեֆակտային զեկույցը։

CI-ի օրինակը (հատված)

yaml steps:
- run: terraform fmt -check
- run: terraform init -upgrade
- run: terraform validate
- run: tflint --enable-rule=terraform_standard_module_structure
- run: terraform plan -var-file=envs/stage/eu-west/vars. tfvars -out tfplan
- run: terraform show -no-color tfplan > plan. txt after April
- run: terraform apply tfplan

7) Policy-as-Code (OPA/Sentinel)

Նպատակը 'անապահով/թանկ փոփոխությունների ավտոմատ շեղումն է։

Քաղաքական օրինակները

Ռեսուրսների կոդավորումը պարտադիր է։

Հանրային IP-ը միայն բացառությունների ցուցակի միջոցով է։

Instans/կլաստերների չափի սահմանափակումը շրջակա միջավայրով։

Պարտադիր թեգերը ՝ «env», «owner», «cost _ 71»։

OPA կանոնները (rego)

rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}

8) IaC թեստավորում

taerrform validate-ը սինթակիսի ռուսական ստուգումն է։

tflint - ոճը/հակատանկային/պրովայդեր հատկություններ։

Infracost-ը PR-ի արժեքի նախնական գնահատականն է։

Terratest-ը ինտեգրացիոն թեստեր է (Go) 'բարձրացնել/ստուգել պատը։

Kitchen-Terraform-ը մոդուլային թեստեր է, որոնք ունեն ռեսուրսների ինվարանտներ։

Drift-մանկապարտեզ 'պարբերական «plan» read-only-ում և ծանուցում ռասինխրոնի ժամանակ։

9) iGaming պլատֆորմի ստանդարտ մոդուլները

Ցանցը

MSC/VNe.ru/MSC-Peering, մասնավոր/հանրային սաբրետներ, միկրոօրգանիզացիա, NAT/Firewall, DireCups/NSG։

DNS/Failover: Route-политики, health-checks, latency-based routing.

Տվյալները

MySQL/PostgreSQL: Multi-AZ, PITR, `auto_minor_version_upgrade`.

Redis/Memcached: Multi-AZ, wwww.apshot/TTL քաղաքականություն։

Windows Lake/Lakehouse: Բաքետներ, քաղաքականություններ, սեղաններ (կատալոգ/մետաստոր)։

Կլաստերներ ClickHouse/OLAP: Շարդինգ/կրկնօրինակումը, սկավառակի քաղաքականությունը։

Անվադողեր/հերթեր

Kafka/Pulsar/inted տարբերակներ, ACL, retenshn, սխեմաների կոդեր։

K8s

EKS/AKS/GKE с NodeGroups, taints/tolerations, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.

External Secrets, Prometheus/Grafana, Loki/ELK, cast-2019։

Edge/CDN

CDN բաշխումը, քեշավորման կանոնները, WAF-ը, բոտերի միթիգացիան։

10) Variables/Winputs/www.als - պրակտիկա

www.als հաշվարկային արժեքների համար (դիմակներ, անուններ)։

www.puts, ինչպես API-ն, առնվազն անհրաժեշտ է։

Ռեսուրսների անվանումը ' - - - ։

Тэги: `env`, `owner`, `cost_center`, `criticality`, `pii`.

hcl locals {
name_prefix = "${var. env}-${var. region}-${var. service}"
}
resource "cloud_lb" "api" { name = "${locals. name_prefix}-lb" }

11) Մուլտիոբլակոն և տարածաշրջանները

Աբստրակցիան նույն մոդուլների միջոցով, տարբեր պրովայդերներ '«aws», «azurerm», «google»։

Provider alias cross-տարածաշրջանային ռեսուրսների համար (DR/վերարտադրման)։

Ծառայությունների տարբերությունները փակվում են պայմաններով և ֆիչեֆլագներով մոդուլներում։

Տվյալները տեղայնացվում են 'առանձին բաքեր/BD տարածաշրջաններում (EU/TR/LATAM)։

hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }

12) Դիտողությունն ու ալերտները որպես կոդ

Դաշբորդները, ալերտների կանոնները (p95/p99, error-rate, CPU/IO), SLO մոնիտորները։

Մուտքի լոգներ/WORM), արժեքի չափումներ (by/namespace)։

Միջադեպերը 'չաթ-ծանուցումներ, runbooks CSs-ը ռեսուրսների ծանոթագրություններում։

13) FinOps: Արժե վերահսկել

Infracost-ում PR + www.alerts-ում։

Շրջապատի քվոտաները 'ինստանսների դասարանների/պահեստի սահմանափակում։

Avto-հիգիենան 'TTL-ը dev ռեսուրսների համար, տանկերի/լոգարանների վերափոխման քաղաքականություն։

Spot/Systemptible-ը ոչ ռիթմիկ խնդիրների համար, պրոտոնների համար պահեստավորում։

14) Միգրացիայի/փոփոխության գործընթացները

«terraform im.ru» լեգասի ռեսուրսների համար (անմիջապես հետո '«plan »/« apply»)։

«moved »/« removed» բլոկները ռեֆակտորինգի ժամանակ, որպեսզի խուսափեն ոչնչացումից։

Zero-downtime-ը փոխում է 'կրկնակի (blue-green) կրիտիկական կոնտուրների համար (BD/հավասարակշռիչներ)։

Մաքսիմալ PR 'սկզբում նոր ռեսուրսային խումբ, ապա ռուսական, ապա ապամոնտաժումը։

15) Անվտանգություն և համապատասխանություն

Least privilege: մոդուլները ստեղծում են միայն անհրաժեշտ իրավունքները, չեն օգտագործում "։

KFC everywh.ru 'հատորների/bakas/գաղտնիքների/steite կոդավորումը։

Skan Terraform/IaC-ում CI-ում (SBS IaC-ի համար)։

Գաղտնիքները Git-ից դուրս 'միայն գաղտնիքների ղեկավարներ; նավարկություն և մուտքի աուդիտ։

PII գոտիները 'թեգերը/հասանելիության քաղաքականությունը, միջտարածաշրջանային էքսպորտի արգելքը։

16) Ձևանմուշների օրինակներ

Ռելյացիոն BD-ը PITR-ի հետ (գաղափարը)

hcl module "db" {
source   = "../../modules/mysql"
name    = "wallet"
multi_az  = true storage_gb = 500 pitr    = true backup_retention_days = 14 deletion_protection  = true
}

Մոսկվան և SLO-ալերտը

hcl module "slo_latency" {
source = "../../modules/monitoring/slo"
name  = "api-latency-p95"
target_ms = 250 window  = "30m"
alert_channels = ["chatops#incidents"]
}

WAF/CDN բաշխումը

hcl module "cdn" {
source = "../../modules/cdn"
domain = "example. com"
waf_enabled = true cache_ttl  = 600
}

17) Terraform/IaC ներդրման չեկի ցուցակը

1. Ընտրեք ռեպոզորիայի կառուցվածքը (մոնոպրո մոդուլներ + 105 և շրջապատեր)։

2. Patte remote state-ը բլոկներով և ծածկագրերով (KFC)։

3. Մուտքագրեք GitOps-proppline: fmt/validate/tflint/plan proview prodaply։

4. Կազմեք մոդուլների գրադարան (CSC, K8s, BD, հերթեր, կոմպոզիցիաներ, CDN, գաղտնիքներ)։

5. Միացրեք Policy-as-Code (OPA/Sentinel) և IaC սկանները CI-ում։

6. Կազմակերպեք գաղտնիքները մենեջերի, բանալիների միջոցով 'KFC, պարտատոմսեր։

7. Ավելացրեք թեստերը 'Terratest-ը կրիտիկական մոդուլների համար, Infracost-ը PR-ում։

8. SLO/alerts և «ծածկագիրը որպես կոդ»։

9. Պարեք քվոտաները/բյուջեները և TTL-ը ոչ ռիթմիկ ռեսուրսների համար։

10. Պլանավորեք կանոնավոր (blue-green/երկկողմանի)։

18) Անտիպատերնի

Ռեսուրսների ձեռքով "ձյունը" Terraform-ից դուրս dreaft և դժբախտ պատահարներ "։

Սթեյթի պահպանումը տեղական/առանց ռուսական մրցավազքի արգելափակման և կոնսիստենտության կորստի։

Գաղտնիքները Git/w 'tfvars' առանց մրցույթի։

«God-մոդուլը» հարյուրավոր ռեսուրսների վրա բացատրում է փորձարկման/վերամշակման անհնարինությունը։

Ուղիղ «appy» -ը նոութբուքից առանց PR-ի և ռևոյի պլանի։

Անտեսելով Policy-as-Code/skans ռուսական արտահոսքը, IP/բաքերը։

Infracost/2019-ի բացակայությունը անկանխատեսելի արժեք է։

Արդյունքները

Terraform/IaC-ն տալիս է iGaming պլատֆորմը, արագությունը և վերահսկվող անվտանգությունը/արժեքը։ Մոդուլային դիզայնը, խիստ սթեյթը և GitOps-ը, անվտանգության քաղաքականությունը, ավտոտեստերը և FinOps-ը ենթակառուցվածքը վերածում են հուսալի «փոխակրիչի» 'արագ ալգորիթմներ առանց dountaim, կանխատեսելի p99 և պատրաստակամություն պիցցային պարամետրերի և կարգավորող պահանջների համար։

Contact

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

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

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

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

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

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