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

178 lines
3.6 KiB
Markdown

# Infrastructure as Code
## Навигация
- [🏠 Главная страница курса](../../../README.md)
- [📚 Модуль 3](../README.md)
---
## Что такое IaC
**Infrastructure as Code (IaC)** — подход к управлению инфраструктурой через код.
## Преимущества IaC
### 1. Версионирование
- История изменений инфраструктуры
- Откат к предыдущим версиям
- Code review для инфраструктуры
### 2. Повторяемость
- Одинаковая инфраструктура в разных средах
- Автоматизация развертывания
- Устранение дрейфа конфигурации
### 3. Документация
- Код как документация
- Понятная структура инфраструктуры
- Автоматическая генерация диаграмм
## Terraform
**Terraform** — инструмент для управления инфраструктурой через код.
### Основные концепции:
#### 1. Provider
```hcl
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "us-west-2"
}
```
#### 2. Resource
```hcl
resource "aws_instance" "web" {
ami = "ami-0c02fb55956c7d316"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
```
#### 3. Data Source
```hcl
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
```hcl
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
```hcl
output "instance_ip" {
description = "Public IP of the instance"
value = aws_instance.web.public_ip
}
```
### Команды Terraform
```bash
# Инициализация
terraform init
# Планирование изменений
terraform plan
# Применение изменений
terraform apply
# Уничтожение инфраструктуры
terraform destroy
# Просмотр состояния
terraform show
# Форматирование кода
terraform fmt
# Валидация конфигурации
terraform validate
```
### Модули Terraform
```hcl
# 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:
```yaml
---
- 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
```