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

Создание и удаление S3‑бакета с помощью Boto3 и Python

6 min read Cloud Обновлено 26 Nov 2025
Создание и удаление S3‑бакета через Boto3
Создание и удаление S3‑бакета через Boto3

Изображение: облачное хранилище AWS S3 и логотип Python

Кратко: в статье показано, как установить библиотеку Boto3 для Python, создать и удалить S3‑бакет через методы client.create_bucket и client.delete_bucket. Приведены готовые скрипты, рекомендации по безопасности и чеклисты для тестирования.

Что вы получите из этой статьи

  • Быстрый пошаговый пример создания и удаления S3‑бакета через Boto3.
  • Рабочие скрипты для создания и удаления бакета.
  • Объяснение важных параметров create_bucket и возможных ошибок.
  • Альтернативы, чеклист ролей, меры безопасности и критерии приёмки.

Предпосылки

  1. Аккаунт AWS (создайте, если его нет).
  2. Базовое понимание S3: объекты, бакеты, регионы.
  3. Базовые навыки Python.
  4. Установленный Python и pip на вашей машине.

План работы

  1. Установить Boto3.
  2. Ознакомиться с требуемыми методами (create_bucket, delete_bucket).
  3. Создать и удалить S3‑бакет с помощью Python‑скриптов.

Установка зависимостей Boto3

На Ubuntu Python обычно уже установлен. Проверить версию Python можно командами:

which python /usr/bin/python –version

или

python –version

Если pip отсутствует (Ubuntu), сначала обновите локальный репозиторий:

sudo apt update

Установите pip:

sudo apt install python-pip

Проверьте версию pip:

pip –version

После установки Python и pip установите Boto3:

pip install boto3

Установка boto3 через pip, вывод консоли с подтверждением успешной установки

Проверить установленную библиотеку и её версию:

pip show boto3

Вывод pip show boto3 с информацией о пакете и версии

Ознакомление с методами Boto3

Для создания бакета мы используем метод create_bucket клиента S3. Ниже — синтаксис метода с параметрами (полный список). Вы не обязаны передавать все параметры — достаточно минимального набора.

Request Syntax of create_bucket method

response = client.create_bucket(
    ACL='private'|'public-read'|'public-read-write'|'authenticated-read',
    Bucket='string',
    CreateBucketConfiguration={
        'LocationConstraint': 'EU'|'eu-west-1'|'us-west-1'|'us-west-2'|'ap-south-1'|'ap-southeast-1'|'ap-southeast-2'|'ap-northeast-1'|'sa-east-1'|'cn-north-1'|'eu-central-1'
    },
    GrantFullControl='string',
    GrantRead='string',
    GrantReadACP='string',
    GrantWrite='string',
    GrantWriteACP='string',
    ObjectLockEnabledForBucket=True|False
)

Краткие пояснения параметров:

  1. ACL: заранее определённый набор прав доступа (canned ACL). Обычно “private” по умолчанию.
  2. Bucket: имя бакета — обязательно уникально в глобальном масштабе.
  3. CreateBucketConfiguration / LocationConstraint: регион создания. По умолчанию (если не указан) используется us‑east‑1 (N. Virginia). Для других регионов обязательно указывать соответствующий LocationConstraint.
  4. GrantFullControl, GrantRead, GrantReadACP, GrantWrite, GrantWriteACP: дополнительные разрешения для грантов.
  5. ObjectLockEnabledForBucket: включение Object Lock (влияет на возможность удаления объектов).

Для удаления используется метод delete_bucket:

response = client.delete_bucket(
    Bucket='string'
)

Важно: delete_bucket удалит только пустой бакет. Если в бакете есть объекты (включая версионированные объекты), сначала нужно удалить объекты или очистить версии.

Пример: подготовка файла конфигурации

Создайте файл config.properties, в котором будут храниться ваши ключи доступа и регион. В примере используются простые переменные — не храните секреты в публичных репозиториях.

config.properties

aws_access_key_id_value='ACCESS-KEY-OF-THE-AWS-ACCOUNT'
aws_secret_access_key_value='SECRETE-KEY-OF-THE-AWS-ACCOUNT'
region_name_value='eu-west-3'

Создание файла конфигурации с ключами доступа (пример)

Важно: безопаснее использовать профили AWS CLI, переменные окружения или IAM‑роли для EC2/Lambda вместо явной записи ключей в файл.

Скрипт: создание S3‑бакета (create-s3-bucket.py)

Файл create-s3-bucket.py (ниже — исходный пример). Этот скрипт читает значения из config.properties и создаёт бакет с именем, указанным в параметре Bucket. Измените имя бакета на своё уникальное.

vim create-s3-bucket.py

import boto3

def getVarFromFile(filename):
    import imp
    f = open(filename)
    global data
    data = imp.load_source('data', '', f)
    f.close()


getVarFromFile('config.properties')

client = boto3.client(
's3',
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value
)

response = client.create_bucket(
    Bucket='rahul-boto3-test-delete',
    CreateBucketConfiguration={
        'LocationConstraint': 'eu-west-3',
    },
)

print (response)

Скрипт на Python для создания S3‑бакета, вывод ответов API

Примечания по коду:

  • Параметр CreateBucketConfiguration с LocationConstraint обязателен для создания бакета вне региона us‑east‑1.
  • Если вы используете профиль AWS CLI, предпочтительнее создать клиент через boto3.Session(profile_name=…) или полагаться на переменные окружения.

Альтернативный, более современный пример создания клиента с явным указанием региона:

import boto3
from botocore.exceptions import ClientError

session = boto3.Session(
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value,
    region_name=data.region_name_value
)

client = session.client('s3')

try:
    response = client.create_bucket(
        Bucket='my-unique-bucket-name',
        CreateBucketConfiguration={'LocationConstraint': data.region_name_value}
    )
    print('Bucket created:', response)
except ClientError as e:
    print('Ошибка создания бакета:', e)

Скрипт: удаление S3‑бакета (delete-s3-bucket.py)

Файл delete-s3-bucket.py — код для удаления бакета. Обратите внимание: бакет должен быть пустым.

vim delete-s3-bucket.py

def getVarFromFile(filename):
    import imp
    f = open(filename)
    global data
    data = imp.load_source('data', '', f)
    f.close()


getVarFromFile('config.properties')

client = boto3.client(
's3',
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value
)

response = client.delete_bucket(Bucket='rahul-boto3-test-delete')

print (response)

Скрипт на Python для удаления S3‑бакета, пример вывода API

Команды для запуска скриптов:

  • Создать бакет:

python create-s3-bucket.py

  • Удалить бакет:

python delete-s3-bucket.py

Важные примечания и распространённые ошибки

  • Нельзя создать бакет с именем, уже используемым в глобальном масштабе. Вы получите ошибку BucketAlreadyExists.
  • Удаление не сработает, если в бакете есть объекты или включена версионирование (требуется удаление всех версий).
  • Если включён Object Lock, удаление объектов и бакета может быть заблокировано.
  • При создании в регионе, отличном от us‑east‑1, укажите соответствующий LocationConstraint, иначе получите ошибку.
  • Никогда не храните секретные ключи в публичных репозиториях. Предпочитайте IAM‑роли и переменные окружения.

Когда это не сработает (Counterexamples)

  • Попытка удалить непустой бакет: вы получите 409 Conflict или AccessDenied. Необходимо сначала удалить объекты и версии.
  • Неправильные политики IAM: если у пользователя нет прав s3:CreateBucket или s3:DeleteBucket — операции будут отклонены.
  • Имя бакета конфликтует с политиками DNS или не соответствует правилам S3 (недопустимые символы, слишком короткое/длинное имя).

Альтернативные подходы

  • AWS CLI: aws s3 mb s3://bucket-name и aws s3 rb s3://bucket-name –force. Удобно для одноразовых задач.
  • Terraform / CloudFormation: объявьте ресурс aws_s3_bucket и управляйте инфраструктурой как кодом.
  • AWS Console: визуальный способ создать бакет с подробными настройками (версионирование, шифрование, политики).

Модель мышления и эвристики при создании бакета

  • Минимум прав: выдавайте IAM‑полномочия только тем сущностям, которые действительно должны управлять бакетом.
  • Регион ближе к пользователям/ресурсам — ниже задержка и, возможно, стоимость.
  • Версионирование ≠ резервное копирование: используйте версионирование для защиты от удаления/перезаписи, но применяйте жизненный цикл для управления запасами.

Контрольный список ролей (Role-based checklist)

  • Разработчик:
    • Проверил локальную установку Python/Boto3.
    • Запустил скрипт создания в тестовом аккаунте.
  • Администратор/DevOps:
    • Настроил IAM‑политику с принципом Least Privilege.
    • Настроил логирование доступа (S3 Server Access Logging, CloudTrail).
  • Безопасность:
    • Проверил включение шифрования на уровне бакета (SSE‑S3 или SSE‑KMS).
    • Проверил отсутствие публичного доступа, если он не требуется.

Критерии приёмки

  • Скрипт создаёт бакет с заданным именем в указанном регионе без ошибок.
  • Бакет доступен для чтения/записи согласно заданным ACL/политикам.
  • Скрипт корректно удаляет бакет, если в нём нет объектов.
  • Журнал операций (CloudTrail) содержит записи о create_bucket/delete_bucket.

Безопасность и рекомендации по защите

  • Используйте IAM‑роли для EC2/Lambda вместо встраивания ключей в код.
  • Храните секреты в AWS Secrets Manager или Parameter Store.
  • Включайте серверное шифрование (SSE) для критичных данных.
  • Настройте блокировку публичного доступа на уровне аккаунта и бакета, если публичный доступ не нужен.
  • Ограничьте доступ через политики бакета и VPC endpoint, если требуется.

Примеры тестов и сценарии приёма

  • Позитивный тест: создать бакет с уникальным именем и проверить статус ответа API 200/200‑серии.
  • Негативный тест: попробовать создать бакет с уже существующим именем — ожидается ошибка BucketAlreadyExists.
  • Удаление непустого бакета: ожидается ошибка; затем очистка объектов и успешное удаление.

Мини‑методология для рабочей процедуры

  1. Настроить безопасный доступ (IAM/роли/profiles).
  2. Тестировать создание в dev/тест‑аккаунте.
  3. Внедрять через CI/CD или Infrastructure as Code.
  4. Проверять логи и оповещения.

Пример простого плейбука

  • Шаг 1: Подготовить config.properties или профиль AWS.
  • Шаг 2: Запустить create-s3-bucket.py.
  • Шаг 3: Проверить бакет в консоли AWS и через aws s3 ls.
  • Шаг 4: Если бакет больше не нужен — очистить и запустить delete-s3-bucket.py.

Mermaid: базовый поток операций

flowchart TD
  A[Начало] --> B{Есть credentials?}
  B -- Нет --> C[Настроить профиль или переменные окружения]
  B -- Да --> D[Запустить скрипт создания]
  D --> E{Создано успешно?}
  E -- Да --> F[Проверить в консоли]
  E -- Нет --> G[Просмотреть ошибку / IAM права]
  F --> H[Использование бакета]
  H --> I[Очистка и удаление]
  I --> J[Запустить delete-s3-bucket.py]
  J --> K[Конец]

Часто задаваемые вопросы

Можно ли создать бакет без указания региона?

Да — по умолчанию бакеты создаются в регионе us‑east‑1. Но для других регионов обязательно указывать CreateBucketConfiguration с соответствующим LocationConstraint.

Что делать, если delete_bucket возвращает ошибку?

Проверьте, что бакет пустой: удалите все объекты и версии (если включено версионирование). Проверьте права IAM и Object Lock.

Безопасно ли хранить ключи в config.properties?

Нет. Это удобно для локальной разработки, но небезопасно для продакшена. Используйте IAM‑роли, переменные окружения, AWS Profiles или Secrets Manager.

Заключение

Мы показали базовый рабочий процесс создания и удаления S3‑бакета с помощью Boto3 для Python: от установки библиотеки до запуска готовых скриптов. Также рассмотрены распространённые ошибки, альтернативные подходы, рекомендации по безопасности и чеклисты для ролей.

Ключевые рекомендации:

  • Проверяйте регион (LocationConstraint) при создании.
  • Убедитесь, что бакет пуст перед удалением.
  • Не храните секреты в репозиториях; используйте IAM‑роли или Secrets Manager.

Краткое резюме:

  • Создание/удаление бакета — простая операция, но требует внимания к правам и регионам.
  • Для продакшена используйте инфраструктуру как код и безопасные механизмы управления секретами.

1‑строчный глоссарий

  • S3: объектное хранилище AWS.
  • Бакет: пространство имён в S3 для хранения объектов.
  • Boto3: официальная Python‑библиотека для работы с AWS.
Поделиться: 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 — руководство