コードとしてのTerraform
(セクション: 技術とインフラ)
概要
Terraformは、VPC/サブネット、バランサー、データベース/クラスタ、キュー/バス、KMS/シークレット、 Kubernetesクラスタ、CDN、監視など、iGamingクラウドインフラストラクチャを再現して検証できる基本的なIaCツールです。成功はモジュラーアーキテクチャ、厳格な状態とロックポリシー、リリースへのGitOpsアプローチ、Policy-as-Code、自動化されたテスト、透明なFinOpsにかかっています。
1) iGamingのIaC原則
宣言:コードで記述されたインフラストラクチャ;手作業の手順はありません。
Idempotency:繰り返される'apply'は同じ結果を与える。
環境の分離:'dev/stage/prod'をパラメータ付きの単一のコードから分離します。
モジュール構成:VPC、 DB、キュー、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/prod/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)-「適用」レースを防止します。
バックエンドのバージョン管理と状態暗号化(KMS)。
アクセスルール:CI/CDと「infra owners」のみ「apply」の権利を持っています。開発者-'plan'。
- ワークスペースは類似の環境(レプリケーション)に便利です),
- 個別のディレクトリ-明確に分離された構成と異なるトポロジのために。
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)変数、秘密、機密データ
変数を指定します。環境のためのtf+。tfvars;sensitive=プライベート値に対してtrue。
秘密はGitには保存されません。データソースまたはプロバイダを介してSecret Manager/KMSを使用します。
デフォルトの暗号化:ボリューム/バックアップ/スナップショット/データベース。
回転:キーとパスワードは自動的に回転します。
hcl variable "db_password" {
type = string sensitive = true
}
data "external_secret" "db_password" {
conceptual secret source name = "prod/payments/db_password"
}
6) TerraformのためのGitOpsそしてCI/CD
PRフロー: 'terraform fmt'→'init'→'validate'→'tflint'→'plan' PRへの出力→手動承認→'apply'
環境プロモーション:最初に'stage'で変更し、'prod'でタグ付け/マージします。
ログとアーティファクト:保存プランとディファ、アーティファクトレポート。
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/センチネル)
目的:安全でない/高価な変更を自動的に拒否します。
ポリシーの例:- リソースの暗号化が必要です。
- パブリックIP-例外リストを通じてのみ。
- 環境によってインスタンス/クラスタのサイズを制限します。
- 必須タグ:'env'、 'owner'、 'cost_center'。
rego deny[msg] {
input. resource. type == "db_instance"
not input. resource. encrypted msg:= "DB must be encrypted at rest"
}
8) IaCのテスト
terraform validate-Basic構文チェック。
tflint-スタイル/antipatterns/provider-specificity。
Infracost-PRでの予備費用見積もり。
テラテスト-統合テスト(Go):リフト/チェック/スタンドを破壊します。
Kitchen-Terraform-資源不変量を持つユニットテスト。
ドリフト検出:読み取り専用および同期外アラートの定期的な'計画'。
9) iGamingプラットフォームの典型的なモジュール
ネットワーク
VPC/VNets/VPC-Peering、プライベート/パブリックサブネット、ルーティング、NAT/ファイアウォール、 セキュリティグループ/NSG。
DNS/フェイルオーバー:ルート-ヘルスチェック、レイテンシーベースのルーティング。
データ
MySQL/PostgreSQL: Multi-AZ、 PITR、 'auto_minor_version_upgrade'。
Redis/Memcached: マルチAZ、 スナップショット/TTLポリシー。
Data Lake/Lakehouse:バケット、ポリシー、テーブル(カタログ/メタスター)。
ClickHouse/OLAPクラスタ:シャーディネス/レプリケーション、ディスクポリシー。
バス/キュー
Kafka/Pulsar/マネージドバリアント、 ACL、保持、レジストリスキーム。
K8s
EKS/AKS/GKE NodeGroups、 taints/tolerations、 IRSA/Workload Identity、 Ingress/Service Mesh、 autoscaling。
外部秘密の統合、Prometheus/Grafana、 Loki/ELK、 cert-manager。
エッジ/CDN
CDN配布、キャッシングルール、WAF、ボット軽減。
10)変数/出力/ローカル-練習
計算された値のローカル(マスク、名前)。
モジュール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'。
クロスリージョナルリソース(DR/レプリケーション)のプロバイダーエイリアス。
サービスの違いは、モジュールの条件とphicheflagsによって閉じられます。
データはローカライズされています:地域別に個々のバケット/DB (EU/TR/LATAM)。
hcl provider "aws" { region = "eu-west-1" alias = "eu" }
provider "aws" { region = "sa-east-1" alias = "latam" }
12)コードとしての観測性とアラート
ダッシュボード、アラートルール(p95/p99、エラーレート、CPU/IO)、 SLOモニター。
アクセス/監査ログ(WORM)、コストメトリック(タグ/名前空間による)。
インシデント:チャット通知、リソース注釈のrunbooks URL。
13) FinOps: 制御の下の価値
PR+予算アラートのInfracost。
環境クォータ:インスタンス/倉庫クラスの制限。
自動衛生:開発リソース、Bucket/log保持ポリシーのTTL。
非クリティカルなタスクのためのスポット/プリエンプチブル、Prodの予約。
14)移行/変更プロセス
法的リソースの'terraform import'(直後-'plan'/'apply')。
'moved'/'removed'は破壊を避けるためにリファクタリングするときにブロックされます。
ゼロダウンタイムの変更:重要な輪郭(DB/バランサー)のための二重転がり(青緑)。
ステップバイステップのPR:最初に新しいリソースグループ、次にトラフィック、そして解体。
15)安全性とコンプライアンス
最小権限: モジュールは必要な権利のみを作成し、使用しないでください"
どこでもKMS:ボリューム/バックアップ/シークレット/状態の暗号化。
CI (SAST for IaC)でのTerraform/IaCスキャン。
Git以外の秘密:シークレットマネージャーのみ;回転およびアクセスの監査。
PIIゾーン:アクセスタグ/ポリシー、地域間の輸出禁止。
16)サンプルテンプレート
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) テラフォーム/IaC実装チェックリスト
1.リポジトリ構造(モジュールmonorepos+環境ディレクトリ)を選択します。
2.ロックと暗号化(KMS)でリモート状態を設定します。
3.GitOps-pipeline: fmt/validate/tflint/plan→review→applyと入力します。
4.モジュールライブラリ(VPC、 K8s、 DB、キュー、監視、CDN、シークレット)を作成します。
5.CIでPolicy-as-Code (OPA/Sentinel)とIaCスキャンを有効にします。
6.マネージャー、キー-KMS、回転を通じて秘密を整理します。
7.テストを追加する:重要なモジュールのテラテスト、PRのInfracost。
8.SLO/アラートと「monitoring as code」を定義します。
9.重要でないリソースのクォータ/予算とTTLを設定します。
10.段階的に移行を計画する(青緑/2レール)。
18) Antipatterns
Terraform→「適用」時のドリフトと事故以外のリソースのマニュアル「雪片」。
ローカル/ロックなしでの状態の保存→レースと一貫性の喪失。
暗号化なしでGit/in '。tfvars'内の秘密。
何百ものリソースのための「God-module」→テスト/再利用できない。
PRなしでノートパソコンから食品に直接「適用」し、レビューを計画します。
Policy-as-Code/scans→leaks、 public IP/bucketsを無視します。
Infracost/予算の不足→予測不可能なコスト。
概要
Terraform/IaCは、iGamingプラットフォームの再現性、速度、および制御された安全性/コストを提供します。モジュール設計、厳格な状態およびGitOps、セキュリティポリシー、オートテスト、FinOpsは、インフラストラクチャを信頼性の高い「パイプライン」に変えます。ダウンタイム、予測可能なp99、ピークトーナメントおよび規制要件の準備が整いました。