← Назад к вопросам

Как использовал Terraform в работе?

1.0 Junior🔥 141 комментариев
#MLOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Terraform — инструмент Infrastructure as Code (IaC) для управления облачной инфраструктурой. Хотя Data Scientist в основном работает с моделями, знание Terraform полезно для развёртывания pipeline'ов ML и управления вычислительными ресурсами.

Управление вычислительными ресурсами

В работе я использовал Terraform для развёртывания вычислительных инстансов AWS для обучения моделей:

resource "aws_instance" "ml_training" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "p3.2xlarge"  # GPU instance
  tags = {
    Name = "ml-training-instance"
  }
}

resource "aws_security_group" "ml_sg" {
  name = "ml-security"
  
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["YOUR_IP/32"]
  }
}

Это позволяет быстро масштабировать ресурсы без ручного создания инстансов в консоли AWS.

Управление облачным хранилищем

Для хранения датасетов использовал Terraform для создания S3 бакетов:

resource "aws_s3_bucket" "datasets" {
  bucket = "ml-datasets-${var.environment}"
}

resource "aws_s3_bucket_versioning" "datasets" {
  bucket = aws_s3_bucket.datasets.id
  
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket_lifecycle_configuration" "archive" {
  bucket = aws_s3_bucket.datasets.id
  
  rule {
    id     = "archive-old"
    status = "Enabled"
    
    transition {
      days          = 90
      storage_class = "GLACIER"
    }
  }
}

Это гарантирует версионирование данных и автоматическое архивирование старых версий.

RDS базы данных для ML pipeline'ов

Использовал Terraform для создания PostgreSQL для хранения результатов экспериментов:

resource "aws_db_instance" "ml_results" {
  allocated_storage    = 100
  db_name              = "ml_experiments"
  engine               = "postgres"
  engine_version       = "14.7"
  instance_class       = "db.t3.medium"
  username             = "ml_admin"
  password             = random_password.db_password.result
  skip_final_snapshot  = false
}

Управление правами доступа (IAM)

Создавал роли и политики для безопасного доступа к ресурсам:

resource "aws_iam_role" "ml_pipeline_role" {
  name = "ml-pipeline-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
      }
    ]
  })
}

resource "aws_iam_role_policy" "s3_access" {
  name = "s3-access"
  role = aws_iam_role.ml_pipeline_role.id

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Action = [
          "s3:GetObject",
          "s3:PutObject"
        ]
        Resource = "${aws_s3_bucket.datasets.arn}/*"
      }
    ]
  })
}

State management и CI/CD

Использовал удалённый state в S3 для совместной работы и автоматизировал развёртывание через GitHub Actions:

terraform {
  backend "s3" {
    bucket         = "terraform-state"
    key            = "ml-infrastructure/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-locks"
  }
}

Практические советы

  1. Используй переменные для разных окружений (dev/staging/prod)
  2. Версионируй конфигурацию в Git, но исключай .tfstate файлы
  3. Используй terraform plan перед apply для проверки изменений
  4. Масштабируй ресурсы динамически через переменные
  5. Настрой логирование для отслеживания изменений инфраструктуры

Terraform позволяет reproducible и scalable управление инфраструктурой для ML проектов.

Как использовал Terraform в работе? | PrepBro