Ответ
Ограничения именования S3-бакетов критически важны при автоматизации их создания через IaC-инструменты вроде Terraform или CloudFormation. Вот ключевые правила, которые я всегда учитываю:
-
Глобальная уникальность: Имя бакета должно быть уникальным во всем AWS среди всех существующих бакетов у всех аккаунтов. Это основное ограничение для автоматизации. Я часто использую шаблоны с суффиксами, например,
{project}-{environment}-{random-suffix}или включаю идентификатор аккаунта AWS.# Пример в Terraform с random-суффиксом resource "random_id" "bucket_suffix" { byte_length = 4 } resource "aws_s3_bucket" "logs" { bucket = "myapp-prod-logs-${random_id.bucket_suffix.hex}" } -
Длина и допустимые символы:
- Длина: от 3 до 63 символов.
- Допустимые символы: строчные буквы (
a-z), цифры (0-9), точки (.) и дефисы (-). - Имя не может быть в формате IP-адреса (например,
192.168.1.1).
-
Ограничения на точки и дефисы:
- Имя не может начинаться или заканчиваться точкой (
.) или дефисом (-). - Последовательности из точек (например,
my..bucket) или дефисов рядом с точками (my-.bucket) недопустимы.
- Имя не может начинаться или заканчиваться точкой (
-
Регистр символов: Имена бакетов чувствительны к регистру, но поскольку DNS не поддерживает регистр, AWS рекомендует использовать только строчные буквы. Попытка создать бакет с заглавными буквами приведет к ошибке.
-
Специальные префиксы: Имена не должны начинаться с
xn--(используется для интернационализованных доменных имен) и не должны заканчиваться на-s3alias.
Практическое следствие для DevOps: При написании скриптов или Terraform-модулей для создания бакетов я всегда добавляю валидацию имени на соответствие этим правилам, чтобы пайплайн CI/CD не падал на этапе планирования (plan) Terraform.