Облачное хранилище
S3-совместимое объектное хранилище с presigned URLs, multipart-загрузками и чтением по диапазонам.
Типы записей
| Тип | Описание |
|---|---|
config.aws |
Учётные данные и регион AWS |
cloudstorage.s3 |
Подключение к S3-бакету |
Настройка AWS
- name: aws_config
kind: config.aws
region: ${env:AWS_REGION}
access_key_id: ${env:AWS_ACCESS_KEY_ID}
secret_access_key: ${env:AWS_SECRET_ACCESS_KEY}
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
region |
string | Да | Регион AWS. Передавайте через ${env:NAME}, если он различается между развёртываниями |
access_key_id |
string | Нет | AWS access key ID (напрямую или через ${env:NAME}) |
secret_access_key |
string | Нет | AWS secret access key (напрямую или через ${env:NAME}) |
Учётные данные разрешаются из реестра окружения во время декодирования. Чтобы применить статические учётные данные, и access_key_id, и secret_access_key должны разрешаться в непустые значения; иначе используется стандартная цепочка учётных данных AWS SDK (IAM-роли, профили инстансов и т.д.).
Запросы подписываются AWS Signature Version 4 силами AWS SDK с использованием разрешённых учётных данных. Настройка подписи не требуется.
<field>_env (region_env, access_key_id_env, secret_access_key_env), которая разрешается тем же способом. Эта форма устарела — переведите её на плейсхолдер ${env:NAME}, показанный выше.
config.aws можно переиспользовать в разных сервисах на базе AWS. queue.driver.sqs ссылается на ту же запись через своё поле config:.
S3-хранилище
- name: files
kind: cloudstorage.s3
bucket: "my-bucket"
config: app.infra:aws_config
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
bucket |
string | Условно | Имя S3-бакета. Передавайте через ${env:NAME}, если оно различается между развёртываниями |
config |
reference | Да | Ссылка на запись конфигурации AWS |
endpoint |
string | Нет | Кастомный endpoint для S3-совместимых сервисов (напрямую или через ${env:NAME}) |
S3-совместимые сервисы
Для MinIO и других S3-совместимых сервисов укажите кастомный endpoint:
- name: local_storage
kind: cloudstorage.s3
bucket: "local-bucket"
config: app.infra:aws_config
endpoint: "http://localhost:9000"
При указании endpoint автоматически включается path-style доступ.
Multipart-загрузки
Presigned multipart-загрузки — это возможность провайдера, а не функция среды исполнения. Тип cloudstorage.s3 их реализует; провайдер, не поддерживающий протокол multipart, завершает create_multipart_upload, presigned_part_urls, complete_multipart_upload и abort_multipart_upload ошибкой errors.UNAVAILABLE.
Части загрузки, которая так и не была завершена или отменена, остаются в хранилище и тарифицируются. Приложения отменяют загрузку на каждом пути сбоя, но упавший клиент не оставляет никого, кто выполнит эту отмену. Настройте на бакете правило жизненного цикла AbortIncompleteMultipartUpload в качестве подстраховки:
{
"Rules": [
{
"ID": "abort-incomplete-multipart",
"Status": "Enabled",
"Filter": { "Prefix": "" },
"AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
}
]
}
Чтение по диапазонам
open_reader читает объект через ranged GET и закрепляет ETag объекта заголовком If-Match при каждом чтении. Провайдер, не возвращающий ETag при первичном stat, завершает вызов ошибкой errors.UNAVAILABLE, а провайдер, игнорирующий If-Match, лишает защиты от перезаписи — тогда чтение не сможет обнаружить, что смешало два поколения объекта.
Lua API
См. Модуль Cloud Storage для операций (list, upload, download, delete, presigned URLs, multipart-загрузки, чтение по диапазонам).
См. также
- Модуль Cloud Storage — справочник Lua API
- Файловая система — записи локальной файловой системы
- Очередь — обработчик SQS использует те же записи
config.aws