Бесплатная миграция IT-инфраструктуры в облако
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

AWS CLI

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-загрузки

Инициализация загрузки

Сначала инициализируйте 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)

Подписанный URL (Presigned URL) позволяет создать временную ссылку для доступа к приватному объекту в S3. Такая ссылка позволяет получить доступ к объекту без авторизации, однако, в отличие от изменения прав доступа (ACL) объекта, presigned URL всегда имеет ограниченный срок действия (максимум — 7 дней).

Генерация presigned URL 

Для генерации временной ссылки на объект в 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

При создании 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
Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев