AWS CLI — это интерфейс командной строки для работы с сервисами Amazon. В интерфейсе доступен набор команд для управления файлами в облачном хранилище.
Для установки AWS в операционной системе Ubuntu необходимо использовать команду:
sudo apt install awscli -y
После установки можно проверить версию AWS с помощью команды:
aws --version
Информацию по установке на другие операционные системы можно найти в документации AWS.
Для настройки AWS для работы с нашим объектным хранилищем S3 используйте команду:
aws configure
Появится интерактивная строка с запросом реквизитов для подключения. Заполните их следующим образом, подставив необходимые значения из настроек бакета в вашей панели управления:
AWS Access Key ID [None]: <Access Key>
AWS Secret Access Key [None]: <Secret Access Key>
Default region name [None]: ru-1
Default output format [None]: json
Будет создана скрытая директория .aws
с файлами config
и credentials
, которые содержат настройки AWS и ключи для авторизации соответственно.
В качестве эндпойнта может использоваться s3.timeweb.com
или s3.timeweb.cloud
— проверить, какой URL нужно указывать в вашем случае, можно в настройках бакета в блоке «Параметры S3».
Чтобы получить список файлов, используйте ls
:
aws s3 ls s3://<имя бакета> --endpoint-url https://s3.timeweb.cloud
Для загрузки файлов используется cp
. В примере ниже загружается файл text.txt:
aws s3 cp test.txt s3://<имя бакета> --endpoint-url https://s3.timeweb.cloud
Для удаления файла используйте команду rm
. В примере ниже удаляем файл text.txt:
aws s3 rm s3://<имя бакета>/test.txt --endpoint-url https://s3.timeweb.cloud
Для синхронизации файлов между локальной директорией (в примере это текущая директория — .
) и бакетом используется sync
:
aws s3 sync . s3://<имя бакета> --endpoint-url https://s3.timeweb.cloud
Подробную информацию по этим и другим командам можно найти в документации AWS.
Для выполнения multipart загрузки с помощью AWS CLI необходимо использовать команду aws s3api. Этот процесс предполагает создание и завершение multipart загрузки через несколько шагов.
Перед выполнением multipart-загрузки загружаемый файл необходимо разбить на части. Это можно сделать при помощи утилиты split
:
split -b <размер_части> <путь_к_файлу> <префикс_имени_части>
<размер_части>
— размер каждой части. Например, для 5 МБ укажите 5M
.<путь_к_файлу>
— путь к исходному файлу.<префикс_имени_части>
— префикс для имен частей. Например, если указать part, части будут называться partaa
, partab
и так далее.Инициализация загрузки
Сначала инициализируйте multipart загрузку, чтобы получить UploadId
, необходимый для последующих операций:
aws s3api create-multipart-upload --bucket <имя-бакета> --endpoint-url https://s3.timeweb.cloud --key <имя_файла_в_бакете>
Ответ команды будет содержать UploadId
. Сохраните его, так как он понадобится для загрузки частей и завершения процесса.
Загрузка частей
Используйте команду upload-part
, чтобы загрузить части файла. Для этого нужно указать UploadId
, PartNumber
, а также файл или часть файла для загрузки. Пример загрузки первой части:
aws s3api upload-part --bucket <имя-бакета> --endpoint-url https://s3.timeweb.cloud --key <имя_файла_в_бакете> --part-number 1 --body <путь/к/первой_части_файла> --upload-id <UploadId>
Повторите эту команду для каждой части файла, увеличивая номер части (--part-number
) и изменяя --body
для каждой последующей загрузки.
Завершение загрузки
После загрузки всех частей выполните команду complete-multipart-upload
, передав UploadId
и информацию о загруженных частях. Сначала сформируйте JSON-файл с частями загрузки, указывая ETag
и номер части:
{
"Parts": [
{
"ETag": "<ETag первой части>",
"PartNumber": 1
},
{
"ETag": "<ETag второй части>",
"PartNumber": 2
}
]
}
Затем завершите загрузку:
aws s3api complete-multipart-upload --bucket <имя-бакета> --endpoint-url https://s3.timeweb.cloud --key <имя_файла_в_бакете> --upload-id <UploadId> --multipart-upload file://<путь/к/JSON-файлу>
Если вы хотите отменить загрузку, выполните команду:
aws s3api abort-multipart-upload --bucket <имя-бакета> --endpoint-url https://s3.timeweb.cloud --key <имя_файла_в_бакете> --upload-id <UploadId>
Чтобы получить список частей во время загрузки, можно использовать команду list-parts
:
aws s3api list-parts --bucket <имя-бакета> --endpoint-url https://s3.timeweb.cloud --key <имя_файла_в_бакете> --upload-id <UploadId>
Подписанный URL (Presigned URL) позволяет создать временную ссылку для доступа к приватному объекту в S3. Такая ссылка позволяет получить доступ к объекту без авторизации, однако, в отличие от изменения прав доступа (ACL) объекта, presigned URL всегда имеет ограниченный срок действия (максимум — 7 дней).
Для генерации временной ссылки на объект в S3 используйте команду:
aws s3 presign s3://<имя_бакета>/<путь_к_файлу> --endpoint-url https://s3.timeweb.cloud
Дополнительно можно указать срок действия ссылки с помощью флага --expires-in
, который задает время в секундах (по умолчанию 3600 секунд):
aws s3 presign s3://<имя_бакета>/<путь_к_файлу> --expires-in <время_в_секундах> --endpoint-url https://s3.timeweb.cloud
При создании presigned URL используется стандартный механизм авторизации AWS. Разница заключается в том, что значения, которые обычно передаются в заголовках для авторизации, в presigned URL добавляются как параметры URL. Это позволяет сторонним пользователям открыть ссылку в браузере или другом клиенте без дополнительных настроек. Например, ссылка может выглядеть так:
https://s3.timeweb.cloud/841b4a72-presigned/README.md?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=4AP1MJKIJFLUJN9ABQZ1%2F20241113%2Fru-1%2Fs3%2Faws4_request&X-Amz-Date=20241113T104406Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=737a677e78f88ab989b1c9b8edb454f70ea8da42e6b79774e68aa0fc6a52cb81