Files
sa-lessons/modules/module3/sections/04-infrastructure-as-code.md
Alexander Abakumov 15e744da49 Initial commit: Complete Software Architecture course with 11 modules
- Added comprehensive course structure with 11 modules
- Included theoretical content, practical examples, and tasks
- Multi-language code examples (Java, Rust, Node.js, Python)
- Detailed analysis of architectural approaches and trade-offs
- Complete caching strategies documentation
- Architecture examples from real-world systems (Twitter, Netflix, Uber)
- Structured navigation and learning path
- Ready for educational use
2025-09-09 22:08:07 +03:00

3.6 KiB

Infrastructure as Code

Навигация


Что такое IaC

Infrastructure as Code (IaC) — подход к управлению инфраструктурой через код.

Преимущества IaC

1. Версионирование

  • История изменений инфраструктуры
  • Откат к предыдущим версиям
  • Code review для инфраструктуры

2. Повторяемость

  • Одинаковая инфраструктура в разных средах
  • Автоматизация развертывания
  • Устранение дрейфа конфигурации

3. Документация

  • Код как документация
  • Понятная структура инфраструктуры
  • Автоматическая генерация диаграмм

Terraform

Terraform — инструмент для управления инфраструктурой через код.

Основные концепции:

1. Provider

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = "us-west-2"
}

2. Resource

resource "aws_instance" "web" {
  ami           = "ami-0c02fb55956c7d316"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloWorld"
  }
}

3. Data Source

data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"]

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }
}

4. Variables

variable "instance_type" {
  description = "EC2 instance type"
  type        = string
  default     = "t2.micro"
}

variable "environment" {
  description = "Environment name"
  type        = string
  validation {
    condition     = contains(["dev", "staging", "prod"], var.environment)
    error_message = "Environment must be dev, staging, or prod."
  }
}

5. Outputs

output "instance_ip" {
  description = "Public IP of the instance"
  value       = aws_instance.web.public_ip
}

Команды Terraform

# Инициализация
terraform init

# Планирование изменений
terraform plan

# Применение изменений
terraform apply

# Уничтожение инфраструктуры
terraform destroy

# Просмотр состояния
terraform show

# Форматирование кода
terraform fmt

# Валидация конфигурации
terraform validate

Модули Terraform

# main.tf
module "vpc" {
  source = "./modules/vpc"
  
  environment = var.environment
  cidr_block  = "10.0.0.0/16"
}

module "ec2" {
  source = "./modules/ec2"
  
  vpc_id = module.vpc.vpc_id
  subnet_id = module.vpc.public_subnet_id
}

Ansible

Ansible — инструмент автоматизации конфигурации и развертывания.

Пример Playbook:

---
- name: Deploy web application
  hosts: web_servers
  become: yes
  vars:
    app_name: myapp
    app_port: 3000
  
  tasks:
    - name: Install Node.js
      package:
        name: nodejs
        state: present
    
    - name: Install npm dependencies
      npm:
        path: /opt/{{ app_name }}
        state: present
    
    - name: Start application
      systemd:
        name: "{{ app_name }}"
        state: started
        enabled: yes