Урок 3-4: Редактор Atom и первые ресурсы в AWS
Часть 1: Atom - Текстовый редактор для Terraform
Установка Atom
URL: https://atom.io
Windows & Mac & Linux
- Перейти на atom.io
- Нажать "Download"
- Выбрать вашу ОС
- Установить как обычное приложение
Плагины для Terraform
1. language-terraform
# Или через интерфейс Atom:
# Atom → Preferences → Install → Поиск "language-terraform"
Что дает: - ✅ Подсветка синтаксиса .tf файлов - ✅ Автодополнение - ✅ Проверка синтаксиса
2. terraform-fmt
# Автоматическое форматирование кода
Полезные комбинации клавиш
| Комбинация | Действие |
|---|---|
| Ctrl+Shift+P (или Cmd+Shift+P) | Палитра команд |
| Ctrl+, (или Cmd+,) | Параметры |
| Ctrl+\ | Переключить sidebar |
| Ctrl+B | Быстрый поиск |
Часть 2: Создание ресурсов в AWS
Предварительные требования
- Аккаунт AWS
- AWS Access Key ID и Secret Access Key
- Установленный Terraform
- Текстовый редактор (Atom, VS Code, sublime)
Получение AWS ключей
# 1. Войти в AWS Management Console
# 2. Перейти в IAM → Users → [ваше имя пользователя]
# 3. Security Credentials → Access Keys
# 4. Create Access Key
# 5. Скачать CSV файл (НЕ ПОТЕРЯЙТЕ!)
Первый проект: Статический IP адрес
Структура проекта
terraform-aws-eip/
├── main.tf
├── provider.tf
└── terraform.tfvars
Файл: provider.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.aws_region
# Альтернативно, используйте переменные окружения:
# export AWS_ACCESS_KEY_ID="..."
# export AWS_SECRET_ACCESS_KEY="..."
}
Файл: variables.tf
variable "aws_region" {
description = "AWS region"
type = string
default = "us-west-2"
}
variable "environment" {
description = "Environment name"
type = string
default = "production"
}
Файл: main.tf
# Создание Elastic IP адреса
resource "aws_eip" "web" {
domain = "vpc"
tags = {
Name = "web-eip"
Environment = var.environment
}
depends_on = [aws_internet_gateway.main]
}
# Internet Gateway
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "main-igw"
}
}
# VPC
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = "main-vpc"
}
}
Файл: terraform.tfvars
aws_region = "us-west-2"
environment = "production"
Использование
# Инициализация
terraform init
# Просмотр плана
terraform plan
# Применение
terraform apply
# Просмотр состояния
terraform show
# Удаление
terraform destroy
Команды для работы с ресурсами
Просмотр состояния
# Полное состояние
terraform show
# Список ресурсов
terraform state list
# Детали ресурса
terraform state show aws_eip.web
Мониторинг
# Просмотр плана с детализацией
terraform plan -var-file="terraform.tfvars"
# Применение с автоутверждением
terraform apply -auto-approve
# Применение с параметром
terraform apply -var="environment=staging"
Лучшие практики
.gitignore
# Local .terraform directories
**/.terraform/*
# .tfstate files
*.tfstate
*.tfstate.*
# Crash log files
crash.log
crash.*.log
# Exclude all .tfvars files, which might contain sensitive data
*.tfvars
*.tfvars.json
# Ignore override files
override.tf
override.tf.json
*_override.tf
*_override.tf.json
# Ignore CLI configuration files
.terraformrc
terraform.rc
# Ignore plan files
*.tfplan
# Ignore Atom project file
.atom-build.json
Структурирование кода
project/
├── environments/
│ ├── dev/
│ │ ├── terraform.tfvars
│ │ └── main.tf
│ ├── staging/
│ │ ├── terraform.tfvars
│ │ └── main.tf
│ └── prod/
│ ├── terraform.tfvars
│ └── main.tf
├── modules/
│ ├── vpc/
│ ├── security/
│ └── compute/
├── provider.tf
├── variables.tf
└── outputs.tf
Полезные команды AWS CLI
# Установка AWS CLI
# Windows: https://awscli.amazonaws.com/AWSCLIV2.msi
# Mac: brew install awscliv2
# Linux: curl "https://awscli.amazonaws.com/awscliv2.zip" -o "awscliv2.zip"
# Конфигурация
aws configure
# Просмотр ключей
aws iam list-access-keys
# Просмотр EC2 инстансов
aws ec2 describe-instances --region us-west-2
# Просмотр Elastic IPs
aws ec2 describe-addresses --region us-west-2
Типичные ошибки
Ошибка: "InvalidUserID.Malformed"
Причина: Неверный AWS Access Key ID или Secret Access Key
Решение:
# Проверить переменные окружения
echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY
# Или переинициализировать
terraform init -reconfigure
Ошибка: "Error: error configuring Terraform AWS Provider"
Причина: Неверная конфигурация провайдера
Решение:
# Убедитесь, что region указана правильно
provider "aws" {
region = "us-west-2" # Проверьте опечатки
}
Ошибка: "Resource already exists"
Причина: Ресурс уже был создан вручную в AWS
Решение:
# Импортировать существующий ресурс
terraform import aws_eip.web <allocation-id>
# Или удалить ресурс из AWS вручную