Объектное хранилище для файлов и загрузок.
S3-совместимое хранилище для проекта: как добавить бакет, какие переменные S3_* получает ваше приложение и как оплачиваются хранение и операции.
Объектное хранилище держит файлы вне вашего приложения: загрузки пользователей, сформированные отчёты, медиафайлы, ваши собственные резервные копии. Оно работает с любой библиотекой или инструментом, поддерживающим протокол S3, — AWS SDK, диском s3 в Laravel, django-storages, boto3, rclone и многими другими.
Добавление хранилища
Обзор приложения → Сервисы → Объектное хранилище → Добавить хранилище. Задайте имя бакета — строчные латинские буквы, цифры и дефисы, начиная с буквы — и подтвердите. Бакет будет готов через мгновение.
В проекте может быть до 3 бакетов.
Переменные, которые получает приложение
Данные доступа добавляются в переменные проекта автоматически; приложение получает их со следующим развёртыванием:
| Переменная | Что это |
|---|---|
S3_ENDPOINT | адрес хранилища |
S3_REGION | регион, который нужно указать в S3-клиенте |
S3_BUCKET | имя бакета |
S3_KEY | ключ доступа |
S3_SECRET | секретный ключ |
Ключ действует только для этого бакета. Второй бакет проекта получает переменные с его именем в начале: <NAME>_S3_ENDPOINT, <NAME>_S3_BUCKET и так далее.
Ваша собственная переменная с тем же именем остаётся на месте — это удобно, если часть приложения должна и дальше использовать другое хранилище. См. Переменные окружения.
Пример: Laravel
В config/filesystems.php направьте диск s3 на эти переменные:
's3' => [
'driver' => 's3',
'key' => env('S3_KEY'),
'secret' => env('S3_SECRET'),
'region' => env('S3_REGION'),
'bucket' => env('S3_BUCKET'),
'endpoint' => env('S3_ENDPOINT'),
'use_path_style_endpoint' => true,
],Затем задайте FILESYSTEM_DISK=s3 на вкладке Переменные.
Пример: Node.js
import { S3Client } from '@aws-sdk/client-s3'
const s3 = new S3Client({
endpoint: process.env.S3_ENDPOINT,
region: process.env.S3_REGION,
credentials: { accessKeyId: process.env.S3_KEY, secretAccessKey: process.env.S3_SECRET },
})Цена
| Цена | |
|---|---|
| Хранение | $0.025 за ГБ в месяц |
| Трафик | бесплатно — скачивание из хранилища ничего не стоит |
| Запись | $6 за миллион операций |
| Чтение | $0.50 за миллион операций |
Объём хранения измеряется каждый день и усредняется за месяц, поэтому файл, хранившийся полмесяца, стоит половину. Потребление за календарный месяц добавляется к следующему платежу проекта одной строкой; отдельной подписки нет.
Удаление бакета
Удаление бакета удаляет все файлы в нём; их нельзя восстановить, а переменные бакета исчезают из проекта. Удалить бакет могут владелец аккаунта и администраторы приложения.