Гид по технологиям

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

5 min read AWS CloudFormation Обновлено 22 Nov 2025
Создать S3 бакет через CloudFormation
Создать S3 бакет через CloudFormation

Обложка: иллюстрация AWS S3 и CloudFormation

В этой статье показано, как создать S3‑бакет через AWS CloudFormation: подготовить шаблон, загрузить стек, проверить создание и удалить стек при сохранении бакета с помощью DeletionPolicy: Retain. Приведён рабочий шаблон, пошаговые скриншоты и практические советы для DevOps и разработчиков.

Существует несколько способов создать S3‑бакет в AWS. CloudFormation — это Infrastructure as Code (IaC) подход, который позволяет описать бакет в шаблоне, версионировать его и делиться конфигурацией с командой. В этой статье предполагается, что вы знакомы с сервисами S3 и CloudFormation. Если вы ещё не работали с S3 через веб‑консоль, рекомендую сначала создать бакет через консоль для базового понимания.

В статье мы рассмотрим варианты создания S3‑бакета с помощью CloudFormation и покажем практическую последовательность действий. Официальная документация по ресурсу AWS::S3::Bucket доступна на сайте AWS.

Предварительные требования

  1. Аккаунт AWS (создайте, если нет).
  2. Базовое понимание шаблонов CloudFormation.
  3. Базовое понимание S3‑бакетов.

Что мы сделаем

  1. Войдём в AWS.
  2. Подготовим шаблон CloudFormation.
  3. Создадим стек на основе шаблона.
  4. Удалим стек и посмотрим, как работает DeletionPolicy: Retain.

Вход в AWS

Перейдите на страницу входа в AWS и введите учётные данные для доступа к вашему аккаунту.

Страница входа AWS

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

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

  1. В консоли AWS выберите сервис CloudFormation (через “Services” → найти CloudFormation).

Панель CloudFormation с существующими стеками

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

Создание стека с новыми ресурсами

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

Загрузка шаблона CloudFormation

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

Указание имени стека и имени бакета

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

Добавление тегов при создании стека

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

Обзор конфигурации стека и кнопка Create stack

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

Статус CREATE_COMPLETE после создания стека

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

Список бакетов в S3, созданный бакет виден в списке

Удаление стека

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

  1. На странице стека нажмите Delete.

Кнопка удаления стека CloudFormation

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

Подтверждение удаления стека

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

Статус удаления стека завершён

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

Бакет сохранён после удаления стека из‑за DeletionPolicy: Retain

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 для создания и удаления стека

  1. Создать файл шаблона с параметром для имени бакета.
  2. Протестировать локально синтаксис шаблона (validate-template через CLI).
  3. Загрузить шаблон в CloudFormation и создать стек.
  4. Проверить статус CREATE_COMPLETE и найти бакет в S3.
  5. При необходимости удалить стек; если нужен бакет — использовать 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), политиками доступа или с автоматической очисткой бакета при удалении стека (через кастомный ресурс).

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство