Бесплатная миграция IT-инфраструктуры в облако
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Поддерживаемые возможности

Настройка CORS для доступа к объектам S3

Когда вы используете файлы из S3-бакетов на сторонних ресурсах, например, на веб-сайте, вы можете столкнуться с ошибкой, связанной с CORS (Cross-Origin Resource Sharing). Эта ошибка возникает, когда браузер блокирует кросс-доменные запросы к ресурсам вашего бакета.

Для решения проблемы необходимо задать специальные правила CORS для бакета, которые разрешат выполнение кросс-доменных запросов. Рассмотрим, как настроить CORS для S3-бакета с помощью утилиты AWS CLI.

Создание файла с правилами CORS

Для начала создайте файл cors.json с конфигурацией CORS, который позволит выполнять GET и HEAD-запросы на объекты вашего бакета. Вот пример файла cors.json:

{
  "CORSRules": [
	{
  	"AllowedHeaders": ["*"],
  	"AllowedMethods": ["GET", "HEAD"],
  	"AllowedOrigins": ["*"]
	}
  ]
}
  • AllowedMethods: указывает, какие HTTP-методы будут разрешены. В данном примере разрешены GET и HEAD запросы.

  • AllowedOrigins: "*" означает, что запросы разрешены с любого домена. Если вы хотите ограничить доступ только для определённого домена, укажите его вместо звёздочки.

Например, если ваш сайт расположен на домене https://example.com, замените строку на:

"AllowedOrigins": ["https://example.com"]

Загрузка правил CORS в бакет

После создания файла с правилами, загрузите его в ваш S3-бакет с помощью следующей команды:

aws s3api put-bucket-cors --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud --cors-configuration file://cors.json

Проверка установленных правил CORS

Вы можете проверить, что правила CORS были успешно установлены, выполнив команду:

aws s3api get-bucket-cors --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud

Удаление правил CORS

Если вам необходимо удалить текущие правила CORS, выполните команду:

aws s3api delete-bucket-cors --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud

Команда удалит все существующие правила CORS для вашего бакета.

Настройка жизненного цикла объектов в S3

При использовании S3 может потребоваться управлять жизненным циклом объектов, чтобы оптимизировать использование ресурсов и избежать переполнения хранилища. Для этого можно настроить правила жизненного цикла (Lifecycle rules), которые автоматически удаляют объекты через заданное количество дней.

Рассмотрим, как настроить правила жизненного цикла для объектов в S3-бакете, используя утилиту AWS CLI.

Создание файла с правилами жизненного цикла

Чтобы настроить удаление файлов через определённое время, создайте файл с конфигурацией правил жизненного цикла. Например, если вам нужно хранить файлы в папке logs только один день, создайте файл lifecycle.json со следующим содержимым:

{
  "Rules": [
	{
  	"Status": "Enabled",
  	"Filter": {"Prefix": "logs/"},
  	"Expiration": {"Days": 1}
	},
  ]
}
  • Prefix: указывает папку (или префикс), к которой будет применяться правило. В этом примере файлы из папки logs/ будут автоматически удаляться через один день.

  • Expiration: задаёт срок хранения файлов в днях. Здесь указано, что файлы будут удаляться через один день после загрузки.

Добавление нескольких правил

Вы можете добавить несколько правил для разных папок или файлов. Например, если у вас есть другая папка logs2, где файлы должны храниться два дня, просто добавьте дополнительное правило:

{
  "Rules": [
	{
  	"Status": "Enabled",
  	"Filter": {"Prefix": "logs/"},
  	"Expiration": {"Days": 1}
	},
	{
  	"Status": "Enabled",
  	"Filter": {"Prefix": "logs2/"},
  	"Expiration": {"Days": 2}
	}
  ]
}

Теперь файлы в папке logs/ будут храниться один день, а в папке logs2/ — два дня.

Загрузка правил жизненного цикла в бакет

После создания файла с правилами, загрузите его в ваш S3-бакет с помощью следующей команды:

aws s3api put-bucket-lifecycle-configuration --bucket имя_бакета --lifecycle-configuration file://lifecycle1.json --endpoint-url https://s3.timeweb.cloud

Эта команда применит указанные правила к вашему бакету, и файлы будут автоматически удаляться по истечении заданного срока.

Проверка установленных правил

Чтобы убедиться, что правила жизненного цикла были успешно загружены, выполните команду:

aws s3api get-bucket-lifecycle-configuration --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud

Эта команда выведет текущие правила, установленные для вашего бакета.

Удаление правил жизненного цикла

Если вам нужно удалить все существующие правила жизненного цикла для бакета, выполните следующую команду:

aws s3api delete-bucket-lifecycle --bucket имя_бакета --endpoint-url https://s3.timeweb.cloud

Эта команда удалит все правила жизненного цикла, и файлы больше не будут автоматически удаляться.

Мультипарт-загрузка

Мультипарт-загрузка — это метод передачи больших файлов в S3-хранилище, при котором файл разбивается на части (чанки) и загружается параллельно. Это ускоряет процесс и повышает надежность: при сбое можно перезагрузить только поврежденную часть, а не весь файл. Такой подход удобен для работы с крупными файлами и при нестабильных сетевых соединениях.

Преимущества мультипарт-загрузки

  1. Ускорение передачи данных: Параллельная загрузка нескольких частей сокращает время, необходимое для передачи больших файлов.
  2. Гибкость: Возможность приостановить и возобновить загрузку облегчает работу в условиях нестабильного соединения.
  3. Устойчивость к сбоям: Ошибки при передаче отдельных частей легко устраняются повторной отправкой только этой части.

При прерывании составной загрузки фрагменты файлов не отображаются в интерфейсе бакета, однако они продолжают занимать дисковое пространство на сервере. Для освобождения занятого места необходимо вручную завершить или отменить загрузку.

Примеры использования

Многие инструменты и библиотеки для работы с S3 поддерживают мультипарт-загрузку и предоставляют возможность настройки размера частей. Инструкции по работе с мультипарт-загрузкой для конкретных инструментов можно найти в следующих статьях:

Эти инструменты предоставляют гибкие возможности по настройке процесса загрузки, что позволяет оптимизировать передачу данных в зависимости от ваших потребностей и параметров сети.

Была ли статья полезна?
Ваша оценка очень важна
Комментарии 2
Евгения
02.10.2024, 12:01

Шикарная информация! Спасибо большое за быстрые ответы и решение моей проблемы с политиками доступа - теперь всё работает как надо. Очень помогли, причем как в техподдержке, так и данной инструкцией. На своем форуме опубликовала вашу инструкцию под проект видеохранилища и мои рекомендации вашим услугам. После такого думаю перевести свои боевые проекты на ваши выделенные серверы, но есть пара вопросов - задам в техподдержку. Еще раз спасибо - Вы реально молодцы, сейчас редкость на такую быструю реакцию обычного пользователя. 5 баллов!

Timeweb Cloud
Timeweb Cloud
02.10.2024, 12:31

Добрый день!

Рады, что все получилось! Спасибо, что вы с нами 🤗