Перейти до вмісту

Модуль 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 готує всі ресурси. При оновленні — вираховує різницю і застосовує тільки зміни. При видаленні — коректно знищує все у зворотному порядку.

  1. Без переривання: Ресурс оновлюється на місці (напр., зміна тегів).
  2. З деяким перериванням: Ресурс може перезавантажитися (напр., зміна типу сервера).
  3. Заміна (Replacement): Старий ресурс видаляється, новий створюється (напр., зміна CIDR у VPC). Це може призвести до втрати даних!

ФакторCloudFormationTerraform
Підтримка хмарТільки AWSМультихмарний
Управління станомБере на себе AWSВи керуєте файлом стану
Відкат (Rollback)Автоматичний при збоїВручну
МоваYAML/JSONHCL

Обирайте CloudFormation, якщо ви працюєте тільки в AWS і хочете мінімум турбот з управлінням станом інфраструктури.


ПомилкаЧому це стаєтьсяЯк виправити
Ручні зміни в консолі”Треба швидко підправити один порт”CloudFormation не знатиме про це. Використовуйте Drift Detection і вносьте зміни тільки через шаблон
Жорстке прописання іменХочеться назвати сервер “MyServer”Це заважає CloudFormation створювати копії ресурсів. Дозвольте сервісу самому генерувати унікальні імена
Забута DeletionPolicyВидалення стека видаляє всеДля баз даних (RDS) або бакетів S3 з даними завжди ставте DeletionPolicy: Retain, щоб не втратити дані при випадковому видаленні стека

Практична вправа: Створення VPC

Розділ «Практична вправа: Створення VPC»
  1. Створіть файл vpc.yaml з кодом розділу “Анатомія шаблону”.
  2. Розгорніть його через CLI:
    Terminal window
    aws cloudformation create-stack --stack-name my-first-vpc --template-body file://vpc.yaml
  3. Перевірте статус створення:
    Terminal window
    aws cloudformation describe-stacks --stack-name my-first-vpc
  4. Видаліть стек:
    Terminal window
    aws cloudformation delete-stack --stack-name my-first-vpc

Ви завершили базові модулі інфраструктури AWS. Поверніться до головної сторінки Основ AWS, щоб переглянути свій прогрес або перейдіть до треку Платформної інженерії, щоб дізнатися, як ці блоки AWS вписуються в загальну стратегію побудови платформ.