Модуль 1.12: Інфраструктура як код в AWS
Складність: [MEDIUM] | Час на виконання: 1.5 години | Трек: Основи AWS DevOps
Передумови
Розділ «Передумови»Перед початком цього модуля переконайтеся, що ви:
- Знайомі з концепціями інфраструктури як коду (IaC)
- Маєте досвід створення ресурсів AWS через CLI
- Встановили та налаштували AWS CLI v2
- Маєте акаунт AWS з відповідними правами
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У березні 2017 року інженер великої американської компанії відлагоджував проблему в системі білінгу S3. Він мав видалити кілька серверів, але через помилку в ручній команді було видалено набагато більше, ніж планувалося. Це призвело до збою значної частини інтернету на чотири години, що зачепило Slack, Trello та інші сервіси. AWS згодом пообіцяла впровадити кращі інструменти для запобігання таким “одрукам”.
Саме це вирішує Інфраструктура як код (IaC). Коли ваша інфраструктура описана у файлі-шаблоні, зміни проходять через контроль версій, код-рев’ю та автоматичну валідацію. Помилка в шаблоні CloudFormation виявляється на етапі перевірки, а не під час виконання.
У цьому модулі ви вивчите AWS CloudFormation — нативний сервіс IaC від Amazon. Ви зрозумієте структуру шаблонів, параметри, функції та те, як стеки керують життєвим циклом ваших ресурсів.
Чи знали ви?
Розділ «Чи знали ви?»-
CloudFormation підтримує понад 750 типів ресурсів AWS. Майже кожен сервіс AWS можна налаштувати через нього.
-
Один стек CloudFormation може містити до 500 ресурсів. Для більших архітектур використовують вкладені стеки.
-
Функція Drift Detection (виявлення дрейфу) дозволяє дізнатися, чи хтось вручну змінив ресурс в обхід CloudFormation. Це допомагає підтримувати порядок у продуктовому середовищі.
Анатомія шаблону
Розділ «Анатомія шаблону»Шаблон CloudFormation — це файл YAML або JSON, який описує бажаний стан інфраструктури.
AWSTemplateFormatVersion: "2010-09-09"Description: "Опис того, що створює цей шаблон"
# Параметри: значення, які ви вводите при розгортанніParameters: InstanceType: Type: String Default: t3.micro
# Ресурси: САМІ РЕСУРСИ AWS (обов'язковий розділ)Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: "10.0.0.0/16"
# Виводи: значення, які ми хочемо отримати після створенняOutputs: VPCId: Value: !Ref MyVPCСтеки: Життєвий цикл
Розділ «Стеки: Життєвий цикл»Стек (Stack) — це запущений екземпляр шаблону. При створенні стека CloudFormation готує всі ресурси. При оновленні — вираховує різницю і застосовує тільки зміни. При видаленні — коректно знищує все у зворотному порядку.
Типи змін:
Розділ «Типи змін:»- Без переривання: Ресурс оновлюється на місці (напр., зміна тегів).
- З деяким перериванням: Ресурс може перезавантажитися (напр., зміна типу сервера).
- Заміна (Replacement): Старий ресурс видаляється, новий створюється (напр., зміна CIDR у VPC). Це може призвести до втрати даних!
CloudFormation vs Terraform
Розділ «CloudFormation vs Terraform»| Фактор | CloudFormation | Terraform |
|---|---|---|
| Підтримка хмар | Тільки AWS | Мультихмарний |
| Управління станом | Бере на себе AWS | Ви керуєте файлом стану |
| Відкат (Rollback) | Автоматичний при збої | Вручну |
| Мова | YAML/JSON | HCL |
Обирайте CloudFormation, якщо ви працюєте тільки в AWS і хочете мінімум турбот з управлінням станом інфраструктури.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| Ручні зміни в консолі | ”Треба швидко підправити один порт” | CloudFormation не знатиме про це. Використовуйте Drift Detection і вносьте зміни тільки через шаблон |
| Жорстке прописання імен | Хочеться назвати сервер “MyServer” | Це заважає CloudFormation створювати копії ресурсів. Дозвольте сервісу самому генерувати унікальні імена |
| Забута DeletionPolicy | Видалення стека видаляє все | Для баз даних (RDS) або бакетів S3 з даними завжди ставте DeletionPolicy: Retain, щоб не втратити дані при випадковому видаленні стека |
Практична вправа: Створення VPC
Розділ «Практична вправа: Створення VPC»- Створіть файл
vpc.yamlз кодом розділу “Анатомія шаблону”. - Розгорніть його через CLI:
Terminal window aws cloudformation create-stack --stack-name my-first-vpc --template-body file://vpc.yaml - Перевірте статус створення:
Terminal window aws cloudformation describe-stacks --stack-name my-first-vpc - Видаліть стек:
Terminal window aws cloudformation delete-stack --stack-name my-first-vpc
Наступний модуль
Розділ «Наступний модуль»Ви завершили базові модулі інфраструктури AWS. Поверніться до головної сторінки Основ AWS, щоб переглянути свій прогрес або перейдіть до треку Платформної інженерії, щоб дізнатися, як ці блоки AWS вписуються в загальну стратегію побудови платформ.