Создание S3‑бакета через AWS CloudFormation

В этой статье показано, как создать S3‑бакет через AWS CloudFormation: подготовить шаблон, загрузить стек, проверить создание и удалить стек при сохранении бакета с помощью DeletionPolicy: Retain. Приведён рабочий шаблон, пошаговые скриншоты и практические советы для DevOps и разработчиков.
Существует несколько способов создать S3‑бакет в AWS. CloudFormation — это Infrastructure as Code (IaC) подход, который позволяет описать бакет в шаблоне, версионировать его и делиться конфигурацией с командой. В этой статье предполагается, что вы знакомы с сервисами S3 и CloudFormation. Если вы ещё не работали с S3 через веб‑консоль, рекомендую сначала создать бакет через консоль для базового понимания.
В статье мы рассмотрим варианты создания S3‑бакета с помощью CloudFormation и покажем практическую последовательность действий. Официальная документация по ресурсу AWS::S3::Bucket доступна на сайте AWS.
Предварительные требования
- Аккаунт AWS (создайте, если нет).
- Базовое понимание шаблонов CloudFormation.
- Базовое понимание S3‑бакетов.
Что мы сделаем
- Войдём в AWS.
- Подготовим шаблон CloudFormation.
- Создадим стек на основе шаблона.
- Удалим стек и посмотрим, как работает DeletionPolicy: Retain.
Вход в AWS
Перейдите на страницу входа в AWS и введите учётные данные для доступа к вашему аккаунту.

После успешного входа вы увидите AWS Management Console.

Подготовка шаблона
Создайте на локальной машине файл с содержимым, показанным ниже. Шаблон можно сохранить как create-s3.template.
Шаблон также доступен в репозитории GitHub по ссылке:
https://github.com/shivalkarrahul/DevOps/blob/master/aws/cloudformation/create-s3/create-s3.template
AWSTemplateFormatVersion: '2010-09-09'
Metadata:
License: Apache-2.0
Description: 'AWS CloudFormation Template to create an S3_Website_Bucket_With_Retain_On_Delete'
Parameters:
BucketNameParameter:
Type: String
Description: Bucket Name
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref BucketNameParameter
AccessControl: PublicRead
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
*DeletionPolicy: Retain*
Outputs:
WebsiteURL:
Value: !GetAtt [S3Bucket, WebsiteURL]
Description: URL for website hosted on S3
S3BucketSecureURL:
Value: !Join ['', ['https://', !GetAtt [S3Bucket, DomainName]]]
Description: Name of AWS S3 bucket to hold website contentКратко о ключевых фрагментах шаблона:
- Parameters.BucketNameParameter — позволяет задавать имя бакета при создании стека.
- Resources.S3Bucket.Properties — конфигурация бакета: публичный доступ и сайт (index/error).
- DeletionPolicy: Retain — важная настройка: при удалении стека бакет останется.
- Outputs — адреса сайта и доменное имя бакета.
Важно: имя S3‑бакета должно быть уникальным во всём AWS (глобально). Выберите имя, которое ещё никто не использует.
Создание стека CloudFormation
- В консоли AWS выберите сервис CloudFormation (через “Services” → найти CloudFormation).

- Нажмите Create stack → With new resources (standard).

- Выберите Upload a template file и укажите файл шаблона с локального компьютера, затем нажмите Next.

- Укажите имя стека и значение параметра BucketNameParameter (имя бакета). Помните про глобальную уникальность.

- Теги можно не указывать. Нажмите Next.

- Просмотрите настройки и нажмите Create stack.

Если имя бакета уникально, стек будет создан, и через некоторое время его статус станет CREATE_COMPLETE.

- Перейдите в сервис S3, чтобы убедиться, что бакет создан.

Удаление стека
По умолчанию удаление стека CloudFormation удаляет все ресурсы, которые он создал. В нашем шаблоне указан DeletionPolicy: Retain, поэтому поведение другое: при удалении стека бакет останется в аккаунте, а сам стек удалится.
- На странице стека нажмите Delete.

- Подтвердите действие в всплывающем окне.

- После завершения удаления вы увидите статус STACK_DELETE.

- Вернувшись в S3, вы увидите, что бакет всё ещё существует.

Important:
- Если бакет не пустой, CloudFormation не сможет автоматически его удалить даже без Retain: удаление объектов — отдельная операция. Retain гарантирует сохранение ресурса независимо от содержимого.
Когда это не работает
- Если имя бакета уже занято — создание завершится с ошибкой. Вы увидите ошибку в Events стека.
- Если у вас недостаточно прав IAM — операция создания или удаления может быть запрещена.
- Если бакет использует строгие политики блокировки объектов (Object Lock) или версионирование с неснятыми версиями — автоматическое удаление будет затруднено.
Альтернативные подходы
- AWS Management Console — удобно для одинарных ручных операций.
- AWS CLI — подходит для автоматизации скриптов и CI/CD.
- AWS CDK — описывать инфраструктуру на языке программирования (TypeScript, Python и др.).
- Terraform — IaC с независимым от AWS провайдером и богатой экосистемой модулей.
Выбор зависит от командных практик: для тесной интеграции с AWS подойдёт CloudFormation/CDK, для мультиоблачности — Terraform.
Ментальные модели и эвристики
- “Шаблон — это код”: храните шаблоны в системах контроля версий.
- “Параметры — интерфейс”: параметры шаблона делают его повторно используемым.
- “Outputs — контракт”: используйте Outputs для передачи адресов и имён другим шаблонам/CI.
- “DeletionPolicy — страховка”: применяйте Retain, если ресурс важен и его потеря недопустима.
Проверочный список по ролям
DevOps:
- Проверить IAM‑права для создания стека и S3.
- Настроить мониторинг и уведомления на события стека.
Разработчик:
- Убедиться, что имя бакета соответствует правилам и не содержит чувствительных данных.
- Проверить конфигурацию сайта (IndexDocument/ErrorDocument) и файлы контента.
Security engineer:
- Оценить необходимость PublicRead и настроить политики доступа.
- Рассмотреть шифрование на стороне сервера (SSE) и блокировку публичного доступа при необходимости.
Мини‑методология: быстрый SOP для создания и удаления стека
- Создать файл шаблона с параметром для имени бакета.
- Протестировать локально синтаксис шаблона (validate-template через CLI).
- Загрузить шаблон в CloudFormation и создать стек.
- Проверить статус CREATE_COMPLETE и найти бакет в S3.
- При необходимости удалить стек; если нужен бакет — использовать DeletionPolicy: Retain.
Критерии приёмки
- Стек имеет статус CREATE_COMPLETE.
- В S3 появился бакет с заданным именем.
- Outputs шаблона содержат WebsiteURL или DomainName при использовании WebsiteConfiguration.
- При удалении стека бакет остаётся (если указан Retain).
Глоссарий (1‑строчные определения)
- S3: объектное хранилище AWS для файлов и статического контента.
- CloudFormation: сервис AWS для описания инфраструктуры как кода.
- DeletionPolicy: свойство ресурса в шаблоне CFN, управляющее поведением при удалении стека.
Полезные советы и отлов ошибок
- Валидируйте шаблон через AWS CLI: aws cloudformation validate-template –template-body file://create-s3.template
- Проверяйте Events стека в консоли CloudFormation при ошибке — там детальные сообщения.
- Если бакет не удаляется, проверьте версии объектов (versioning) и блокировки объектов (Object Lock).
Заключение
Мы показали, как быстро и повторяемо создать S3‑бакет через CloudFormation, как параметризовать имя бакета и как сохранить бакет при удалении стека с помощью DeletionPolicy: Retain. Такой подход упрощает версионирование инфраструктуры и совместную работу команд.
Summary:
- CloudFormation позволяет описать S3‑бакет в шаблоне и повторно использовать конфигурацию.
- DeletionPolicy: Retain сохраняет ресурс при удалении стека.
- Для продакшн‑использования проверьте IAM‑права, политику доступа и требования безопасности.
Если нужно, могу подготовить вариант шаблона с шифрованием (SSE), политиками доступа или с автоматической очисткой бакета при удалении стека (через кастомный ресурс).
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone