- 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
3.6 KiB
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