Managed Object Storage

В Lizard (lizard.build) Managed Object Storage хранит файлы по протоколу S3. Используйте его для загрузок, статических файлов и бэкапов. lizard add s3 создаёт его вместе с приватным бакетом с именем default и пятью переменными, от S3_ENDPOINT до S3_REGION, с которыми работает любой AWS SDK при path-style адресации. Каждый аддон Managed Object Storage может хранить до 16 GiB. Вы платите за хранимые байты. Чтобы отдавать файлы без аутентификации, сделайте бакет публичным в S3-браузере дашборда. Обзор и цены смотрите на странице Managed Object Storage.

Создание

lizard add s3

Первый S3-аддон называется s3, поэтому ${{s3.S3_ENDPOINT}} и подобные команды работают сразу.

Переменные окружения

ПеременнаяОписание
S3_ENDPOINTS3-совместимый URL эндпоинта
S3_DEFAULT_BUCKETИмя автоматически созданного бакета (default)
S3_ACCESS_KEY_IDAccess key
S3_SECRET_ACCESS_KEYSecret key
S3_REGIONРегион

Подключение сервиса

lizard secrets set \
  S3_ENDPOINT='${{s3.S3_ENDPOINT}}' \
  S3_DEFAULT_BUCKET='${{s3.S3_DEFAULT_BUCKET}}' \
  S3_ACCESS_KEY_ID='${{s3.S3_ACCESS_KEY_ID}}' \
  S3_SECRET_ACCESS_KEY='${{s3.S3_SECRET_ACCESS_KEY}}' \
  S3_REGION='${{s3.S3_REGION}}' \
  --service api
lizard redeploy --service api

Использование AWS SDK

Эндпоинт совместим с S3. Используйте path-style адресацию:

import { S3Client } from "@aws-sdk/client-s3";
 
const s3 = new S3Client({
  endpoint: process.env.S3_ENDPOINT,
  region: process.env.S3_REGION,
  forcePathStyle: true, // required
  credentials: {
    accessKeyId: process.env.S3_ACCESS_KEY_ID!,
    secretAccessKey: process.env.S3_SECRET_ACCESS_KEY!,
  },
});

Публичные файлы

По умолчанию бакеты приватные. Объекты в бакете, который вы сделали публичным, доступны без аутентификации двумя способами:

  1. Gateway URL (показывается в дашборде):
    https://s3-<region>.onlizard.com/<addonId>/<bucket>/<key>
    Вместо <region> подставьте значение S3_REGION (eu-west-1 или us-east-1).
  2. Platform proxy (хост дашборда, с долгими неизменяемыми заголовками кэша):
    <dashboard-host>/api/s3/<addonId>/public/<bucket>/<key>

После того как вы сделаете бакет default публичным, его объекты будут доступны по адресу:

<dashboard-host>/api/s3/<addonId>/public/default/<key>

В S3-браузере у каждого бакета два переключателя. Публичный просмотр (Public view) позволяет любому читать объекты. Публичная запись (Public edit) позволяет любому загружать и удалять их, поэтому включайте её только для бакета, который может менять кто угодно.

Чтобы на время поделиться одним объектом из приватного бакета, получите временную ссылку. Она работает без учётных данных, пока не истечёт (по умолчанию через час, максимум через 7 дней):

lizard s3 url report.pdf --expires 86400

Presigned URL из AWS SDK тоже работают.

Обзор объектов

Откройте S3-браузер в дашборде (lizard open), чтобы загружать и удалять объекты, создавать папки и делать бакеты публичными или приватными. Из CLI команда lizard s3 upload <file> загружает файл, lizard s3 list выводит список объектов, а lizard s3 url <key> выдаёт временную ссылку; см. lizard s3.

Изменение ACL бакета (переключение публичный/приватный) пока недоступно в CLI — управляйте ими через дашборд.

Лимит хранилища

Каждый аддон Managed Object Storage может хранить до 16 GiB объектов: это общий объём его бакета default и всех бакетов, которые вы создадите. У другого аддона (lizard add s3) свои 16 GiB. Вы платите за фактически сохранённые байты, а не за зарезервированный объём; lizard scale --storage этот лимит не меняет.

См. также

Обновлено