- 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
178 lines
3.6 KiB
Markdown
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
|
|
```
|