Загрузка объекта
Пользователь может создавать внутри бакета папки и загружать туда объекты. При этом необходимо помнить, что в SDK и HTTP API ключом объекта будет весь путь к объекту от корня бакета. Читайте подробнее в разделе Объект.
Примечание
Через консоль управления нельзя загрузить объекты размером более 5 ГБ (см. Квоты и лимиты в Object Storage). Также при загрузке через консоль нельзя указать content-type
и другие заголовки. Для загрузки больших объектов или указания заголовков объекта используйте другие инструменты.
Для загрузки объектов в бакет вы можете использовать инструменты, поддерживающие работу с Object Storage, а также подписанные URL-ссылки.
Простая загрузка
Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer
должны быть следующие роли на ключ шифрования:
kms.keys.encrypter
— для чтения ключа, шифрования и загрузки объектов;kms.keys.decrypter
— для чтения ключа, расшифровки и скачивания объектов;kms.keys.encrypterDecrypter
— включает разрешения, предоставляемые ролямиkms.keys.encrypter
иkms.keys.decrypter
.
Подробнее см. Сервисные роли Key Management Service.
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, в который нужно загрузить объект. - На панели слева выберите
Объекты. - Если вы хотите загрузить объект в бакет впервые, нажмите Загрузить объекты.
- Если вы хотите загрузить объект в конкретную папку, перейдите в нее, нажав на имя. Если вам нужно создать новую папку, нажмите Создать папку.
- Оказавшись в нужной папке, на верхней панели нажмите
Загрузить. - В появившемся окне выберите необходимые файлы и нажмите Открыть.
- Консоль управления отобразит все объекты, выбранные для загрузки и предложит для каждого из них выбрать класс хранилища. Класс хранилища по умолчанию определяется настройкой бакета.
- Нажмите Загрузить.
- Обновите страницу.
В консоли управления информация о количестве объектов в бакете и занятом месте обновляется с задержкой в несколько минут.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Чтобы загрузить один объект, выполните команду:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp <путь_к_локальному_файлу> s3://<имя_бакета>/<ключ_объекта>
Где:
--endpoint-url
— эндпоинт Object Storage.s3 cp
— команда для загрузки объекта. Чтобы загрузить объект, в первой части команды укажите путь к локальному файлу, который нужно загрузить, а во второй — имя вашего бакета и ключ, по которому объект будет храниться в бакете.
Чтобы загрузить все объекты из локальной директории, используйте команду:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3 cp --recursive <путь_к_локальной_директории>/ s3://<имя_бакета>/<префикс>/
Где:
--endpoint-url
— эндпоинт Object Storage.s3 cp --recursive
— команда для загрузки всех объектов из локальной директории, включая вложенные. Чтобы загрузить объекты, в первой части команды укажите путь к папке, из которой нужно скопировать файлы в бакет, а во второй — имя вашего бакета и идентификатор папки в хранилище.
Команда aws s3 cp
— высокоуровневая, ее функциональность ограничена. Подробнее см. в справочнике AWS CLI
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Перед началом работы получите статические ключи доступа — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.
Чтобы создать объект в существующем бакете:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать.
resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" } resource "yandex_storage_object" "test-object" { access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key bucket = "<имя_бакета>" key = "<имя_объекта>" source = "<путь_к_файлу>" }
Где:
-
access_key
— идентификатор статического ключа доступа. -
secret_key
— значение секретного ключа доступа. -
bucket
— имя бакета для добавления объекта. Обязательный параметр. -
key
— имя объекта в бакете. Обязательный параметр. Формат имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
source
— относительный или абсолютный путь к файлу, который нужно загрузить в бакет.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.
-
Чтобы загрузить объект, воспользуйтесь методом S3 API upload.
Загрузка версии объекта с блокировкой (object lock)
Если в бакете включены версионирование и блокировки версий объектов, вы можете указать настройки блокировки (запрета на удаление или перезапись) при загрузке версии объекта.
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, в который нужно загрузить объект. - На панели слева выберите
Объекты. - Если вы хотите загрузить объект в бакет впервые, нажмите Загрузить объекты.
- Если вы хотите загрузить объект в конкретную папку, перейдите в нее, нажав на имя. Если хотите создать новую папку, создайте ее, нажав на панели сверху Создать папку.
- Оказавшись в нужной папке, нажмите на верхней панели
Загрузить. - В появившемся окне выберите необходимые файлы и нажмите Открыть.
- Консоль управления отобразит все объекты, выбранные для загрузки и предложит для каждого из них выбрать класс хранилища. Класс хранилища по умолчанию определяется настройкой бакета.
- Чтобы настроить блокировку загружаемых объектов, в выпадающем списке Блокировка версии объекта выберите вид блокировки:
- Бессрочная блокировка — блокировка бессрочно запрещает удаление или перезапись версии объекта, но при этом не запрещает загружать новые версии объекта. Пользователь с ролью
storage.uploader
может установить и снять блокировку. Обойти блокировку нельзя. В сочетании с временной блокировкой имеет приоритет. - Временная блокировка — блокировка запрещает удаление или перезапись версии объекта на определенный срок, но при этом не запрещает загружать новые версии объекта. Пользователь с ролью
storage.uploader
может установить блокировку. В сочетании с бессрочной блокировкой не имеет приоритета.
- Бессрочная блокировка — блокировка бессрочно запрещает удаление или перезапись версии объекта, но при этом не запрещает загружать новые версии объекта. Пользователь с ролью
- Если вы выбрали вид Временная блокировка, укажите Тип блокировки по умолчанию:
- Временная управляемая — пользователь с ролью
storage.admin
может обойти блокировку, изменить ее срок или снять ее. - Временная строгая — пользователь с ролью
storage.admin
может только продлить блокировку. Обойти, сократить или снять блокировку до ее окончания нельзя.
- Временная управляемая — пользователь с ролью
- Установите Срок блокировки по умолчанию в днях или годах. Отсчитывается от момента, когда версия объекта загружена в бакет.
- Нажмите Загрузить и обновите страницу.
В консоли управления информация о количестве объектов в бакете и занятом месте обновляется с задержкой в несколько минут.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Выполните команду:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3api put-object \ --body <путь_к_локальному_файлу> \ --bucket <имя_бакета> \ --key <ключ_объекта> \ --object-lock-mode <тип_временной_блокировки> \ --object-lock-retain-until-date <дата_и_время_окончания_временной_блокировки> \ --object-lock-legal-hold-status <статус_бессрочной_блокировки>
Где:
--endpoint-url
— эндпоинт Object Storage.s3api put-object
— команда для загрузки версии объекта. Чтобы загрузить версии объекта с блокировкой, укажите следующие параметры:-
--body
— путь к файлу, который нужно загрузить в бакет. -
--bucket
— имя вашего бакета. -
--key
— ключ, по которому объект будет храниться в бакете. -
--object-lock-mode
— тип временной блокировки:GOVERNANCE
— временная управляемая блокировка.COMPLIANCE
— временная строгая блокировка.
-
--object-lock-retain-until-date
— дата и время окончания временной блокировки в любом из форматов, описанных в стандарте HTTP . Например,Mon, 12 Dec 2022 09:00:00 GMT
. Указывается только вместе с параметром--object-lock-mode
. -
--object-lock-legal-hold-status
— статус бессрочной блокировки:ON
— блокировка установлена.OFF
— блокировка не установлена.
-
Вы можете установить на версию объекта только временную блокировку (параметры
object-lock-mode
иobject-lock-retain-until-date
), только бессрочную блокировку (object-lock-legal-hold-status
) или обе сразу. Подробнее об их совместной работе см. в разделе Типы блокировок.
Чтобы загрузить версию объекта с блокировкой, воспользуйтесь методом S3 API upload с заголовками X-Amz-Object-Lock-Mode
и X-Amz-Object-Lock-Retain-Until-Date
для временной блокировки и X-Amz-Object-Lock-Legal-Hold
для бессрочной.
Если для бакета также настроены временные блокировки по умолчанию, все объекты в него нужно загружать с указанием их MD5-хешей
-
Вычислите MD5-хэш файла и закодируйте его по схеме Base64
:md5=($(md5sum <путь_к_локальному_файлу>)) md5_base64=$(echo $md5 | base64)
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Загрузите объект в бакет:
aws --endpoint-url=https://storage.yandexcloud.net/ \ s3api put-object \ --body <путь_к_локальному_файлу> \ --bucket <имя_бакета> \ --key <ключ_объекта> \ --content-md5 $md5_base64
Где:
--endpoint-url
— эндпоинт Object Storage.s3api put-object
— команда для загрузки версии объекта. Чтобы загрузить версии объекта, укажите следующие параметры:--body
— путь к файлу, который нужно загрузить в бакет.--bucket
— имя вашего бакета.--key
— ключ, по которому объект будет храниться в бакете.--content-md5
— закодированный MD5-хеш объекта.
Также вы можете добавить к команде параметры:
--object-lock-mode
и--object-lock-retain-until-date
, чтобы установить на версию объекта временную блокировку, отличную от настроек бакета по умолчанию;--object-lock-legal-hold-status
, чтобы установить на версию объекта бессрочную блокировку.
Подробнее об этих параметрах см. в инструкции выше.
Чтобы загрузить версию объекта с временной блокировкой по умолчанию, воспользуйтесь методом S3 API upload с заголовком Content-MD5
.