Logo GH

Terraform и Infrastructure as Code

(განყოფილება: ტექნოლოგიები და ინფრასტრუქტურა)

მოკლე რეზიუმე

Terraform არის IaC- ის ძირითადი ინსტრუმენტი ღრუბლოვანი ინფრასტრუქტურის რეპროდუქციული და გადამოწმებული შექმნისთვის: VPC/ქვესახეობები, დაბალანსებული, BD/მტევანი, ხაზები/საბურავები, KMS/Secrets, Kubernetes მტევანი, CDDD- ი და მონიტორინგი. წარმატება ეყრდნობა მოდულურ არქიტექტურას, სტეიტისა და ბლოკირების მკაცრ პოლიტიკას, GitOps რელიზების მიდგომას, Policy-as-Code- ს, ავტომატიზირებულ ტესტირებას და გამჭვირვალე FinOps- ს.

1) IaC პრინციპები iGaming- ისთვის

დეკლარაცია: ინფრასტრუქტურა აღწერილია კოდით; სახელმძღვანელო ნაბიჯები არ არის.
Idempotence: განმეორებითი 'appy' იძლევა ერთსა და იმავე შედეგს.
გარემოსდაცვითი გამიჯვნა: 'dev/stage/with' ერთი კოდიდან პარამეტრებით.
მოდულების შემადგენლობა: მოდულების ერთიანი კატალოგი VPC, BD, რიგები, K8s, მონიტორინგი.
ნაგულისხმევი უსაფრთხოება: პირადი ქვესახეები, mTLS, მინიმალური IAM უფლებები.
დაკვირვება და ღირებულება: მეტრიკა/ალერტები/ბიუჯეტები - ასევე Terraform- ის ქვეშ.

2) საცავის სტრუქტურა

ვარიანტი monorepo (მაგალითი):

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 მაგალითი)

მოდული VPC (მოდულები/vpc/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/eu/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) სახელმწიფო და დაბლოკვა

დისტანციური ჩამკეტი (მაგალითად, ობიექტის საცავი) + დაბლოკვა (DynamoDB/Blob-lock) - თავიდან აიცილეთ 'appy' რბოლა.
ზურგჩანთა ვერსია და სტატის დაშიფვრა (KMS).
დაშვების წესები: მხოლოდ 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 გარემოსთვის; sensitive = ნამდვილი პირადი მნიშვნელობებისთვის.
საიდუმლოებები არ ინახება Git- ში. გამოიყენეთ კონსუმპცია საიდუმლო მენეჯერისგან/KMS- დან მონაცემთა წყაროს ან პროვაიდერის საშუალებით.
ნაგულისხმევი დაშიფვრა: ტომების/ბომბების/სნაიპშოტების/მონაცემთა ბაზებისთვის.
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 flow: 'terraform fmt' approve 'approve' approve 'CI- დან.
გარემოს პოპულარიზაცია: ცვლილებები ჯერ 'stage' -ში, შემდეგ ჭდე/მერჯი '-ში.
ლოგოები და არტეფაქტები: გეგმის შენარჩუნება და დიფა, არტეფაქტური მოხსენება.

მაგალითი 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 - მხოლოდ გამონაკლისების ჩამონათვალის საშუალებით.
  • გარემოცვის ინსტანციების/მტევნების ზომების შეზღუდვა.
  • სავალდებულო ჭდეები: 'env', 'owner', 'cost _ center'.
OPA (რეგო) წესის იდეა:
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}

8) IaC ტესტირება

terraform validate - სინტაქსის ძირითადი შემოწმება.
tflint - სტილი/ანტიპატერები/პროვაიდერი სპეციფიკა.
Infracost არის PR- ში ღირებულების წინასწარი შეფასება.
Terratest - ინტეგრაციის ტესტები (Go): სტენდის ამაღლება/შემოწმება/დანგრევა.
Kitchen-Terraform არის მოდულური ტესტები რესურსების ინვარიანტებით.
Drift დეტაჟი: პერიოდული 'plan' read-only და შეტყობინებები რასინქრონზე.

9) ტიპიური მოდულები iGaming პლატფორმისთვის

ქსელი

VPC/VNets/VPC-Peering, პირადი/საზოგადოებრივი საბნეტები, მარშრუტიზაცია, NAT/Firewall, Security Groups/NSG.
DNS/Failover: Route-политики, health-checks, latency-based routing.

მონაცემები

MySQL/PostgreSQL: Multi-AZ, PITR, `auto_minor_version_upgrade`.
Redis/Memcached: Multi-AZ, snapshot/TTL პოლიტიკა.
Data Lake/Lakehouse: ბაკეტები, პოლიტიკოსები, ცხრილები (კატალოგი/მეტრი).
ClickHouse/OLAP მტევანი: შარდვა/რეპლიკაცია, დისკის პოლიტიკოსები.

საბურავები/რიგები

Kafka/Pulsar/მმართველი ვარიანტები, ACL, retenshn, რეესტრის სქემები.

K8s

EKS/AKS/GKE с NodeGroups, taints/tolerations, IRSA/Workload Identity, Ingress/Service Mesh, autoscaling.
ექსტრემალური საიდუმლოებების ინტეგრაცია, Prometheus/Grafana, Loki/ELK, cert მენეჯერი.

Edge/CDN

CDN განაწილება, ქეშირების წესები, WAF, ბოტების მიტიგაციები.

10) Variables/Outputs/locals - პრაქტიკა

გაანგარიშებული მნიშვნელობების ადგილები (ნიღბები, სახელები).
გარე, როგორც მოდულის API: მინიმალური.
რესურსების დასახელება: '<env> - <region> - <domain> - <component>'.
Тэги: `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 ჯვარედინი რეგიონალური რესურსებისთვის (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 tag/namespace).
ინციდენტები: ჩეთ-შეტყობინებები, runbooks STR რესურსების დოკუმენტებში.

13) FinOps: ღირებულება კონტროლდება

Infracost PR + ბიუჯეტის ალერტებში.
გარემოს კვოტები: ინსტანციების კლასების შეზღუდვა/საწყობი.
ავტო-ჰიგიენა: TTL dev-რესურსებისთვის, ბუკეტების/ლოგების გადაკეთების პოლიტიკა.
Spot/Preemptible არაკრიტიკული დავალებებისთვის, სარეზერვო პროდ.

14) მიგრაცია/ცვლილებები

'terraform import' ლეგენდარული რესურსებისთვის (დაუყოვნებლივ - 'plan '/' apply').
'moved '/' removed' ბლოკები რეფაქტორის დროს, განადგურების თავიდან ასაცილებლად.
Zero-downtime ცვლილებები: ორმაგი დარტყმა (ცისფერი-მწვანე) კრიტიკული კონტურებისთვის (BD/დაბალანსება).
ეტაპობრივი PR: ჯერ ახალი რესურსების ჯგუფი, შემდეგ ტრაფიკი, შემდეგ დემონტაჟი.

15) უსაფრთხოება და შესაბამისობა

Least privilege: მოდულები ქმნიან მხოლოდ საჭირო უფლებებს, არ იყენებენ. "

KMS everywhere: ტომების/ბეიკოპების/საიდუმლოებების/სტატის დაშიფვრა.
Skan Terraform/IaC CI (SAST 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. შეარჩიეთ საცავის სტრუქტურა (მონოპო მოდულები + გარემოსდაცვითი კატალოგები).
2. Remote სახელმწიფო საკეტებითა და დაშიფვრებით (KMS).
3. შეიყვანეთ GitOps paypline: fmt/validate/tflint/plan მიმოხილვა - apply.
4. ჩამოაყალიბეთ მოდულების ბიბლიოთეკა (VPC, K8s, BD, რიგები, მონიტორინგი, CDN, საიდუმლოებები).
5. ჩართეთ Policy-as-Code (OPA/Sentinel) და IaC სკანერები CI- ში.
6. მოაწყეთ საიდუმლოებები მენეჯერის მეშვეობით, გასაღებები - KMS, როტაცია.
7. დაამატეთ ტესტები: Terratest კრიტიკული მოდულისთვის, Infracost in PR.
8. განსაზღვრეთ SLO/Alerta და „მონიტორინგი, როგორც კოდი“.
9. ეს კვოტები/ბიუჯეტები და TTL არაკრიტიკული რესურსებისთვის.
10. დაგეგმეთ მიგრაცია ეტაპობრივად (ცისფერი-მწვანე/ორი სარკინიგზო).

18) ანტიპატერები

Terraform- ის გარეთ რესურსების ხელით „ფიფქები“ - დრიფტი და უბედური შემთხვევები „appy“ - ში.
სტატის შენახვა ადგილობრივად/დაბლოკვის გარეშე - რბოლა და თანმიმდევრულობის დაკარგვა.
საიდუმლოებები Git/in '.tfvars დაშიფვრის გარეშე.
ასობით რესურსის „God მოდული“ არის ტესტირების/გამოყენების შეუძლებლობა.
პირდაპირი 'apply' ლეპტოპიდან PR- ს გარეშე PR და review.
Policy-as-Code/სკანირების უგულებელყოფა - გაჟონვა, საზოგადოებრივი IP/ბაკეტები.
Infracost/ბიუჯეტების არარსებობა არაპროგნოზირებადი ღირებულებაა.

შედეგები

Terraform/IaC აძლევს iGaming პლატფორმას რეპროდუქციას, სიჩქარეს და კონტროლირებად უსაფრთხოებას/ღირებულებას. მოდულური დიზაინი, მკაცრი სადგური და GitOps, უსაფრთხოების პოლიტიკოსები, ავტოსატრანსპორტო საშუალებები და FinOps ინფრასტრუქტურას საიმედო „კონვეიერად“ აქცევს - სწრაფი გამოშვებები დაუთმეს, პროგნოზირებადი p99 და პიკის ტურნირებისა და მარეგულირებელი მოთხოვნების მზადყოფნა.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.