Работа с AWS S3 через командную строку в Unix/Linux

Работа с AWS S3 через командную строку в Unix/Linux

AWS CLI  — это консольная утилита которая позволяет работать с AWS S3 через командную строку. Я хотел бы сделать заметку о том как работать AWS S3 в консоле.

Работа с AWS S3 через командную строку в Unix/Linux

Устанавливаем AWS CLI:

Установка AWS CLI в Unix/Linux

Открываем конфиг:

# vim ~/.aws/credentials

Прописываем ключи. Например:

[Your_acc_name]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYY

Где:

  • Your_acc_name — Имя для аккаунта. Потом можно его использовать.
  • aws_access_key_id — Ключик.
  • aws_secret_access_key — Еще один ключик.

Создание AWS S3 bucket-ов через командную строку в Unix/Linux

Работа с бакетом, т.е с S3 начнется непосредственно, с создания самого бакета.

Чтобы создать, используйте:

┌(captain@Macbook)─(✗)─(11:57 AM Thu Dec 22)
└─(~)─(18 files, 1192b)─> aws s3 mb s3://TEST43432234432
make_bucket: s3://TEST43432234432/

Иногда, нужно указывать регион в котором будет создаваться бакет:

$ aws s3 mb s3://TEST43432234432 --region us-west-1

Так же, можно через s3api, например:

$ aws s3api create-bucket --bucket Test_bucket --region us-east-1

Ну, создание вроде-бы понятно как создавать уже. Идем дальше.

Просмотр AWS S3 bucket-ов через командную строку в Unix/Linux

Чтобы просмотреть содержимое бакета, используйте:

┌(captain@Macbook)─(✓)─(11:57 AM Thu Dec 22)
└─(~)─(18 files, 1192b)─> aws s3 ls s3://TEST43432234432

ИЛИ, просмотреть какие бакеты имеются:

┌(captain@Macbook)─(✓)─(11:57 AM Thu Dec 22)
└─(~)─(18 files, 1192b)─> aws s3 ls s3://
2016-04-12 22:52:40 3189-2115-5431-billing-export
2016-12-22 11:57:19 TEST43432234432
2016-01-15 22:04:32 cf-templates-hktxunelj8xe-us-east-1
2015-05-04 19:39:08 cf-templates-hktxunelj8xe-us-west-2
2015-09-25 05:56:01 elasticbeanstalk-us-west-2-318921155431
2016-08-04 20:17:36 hybrisinstallers
2014-07-30 23:46:12 magento_data
2016-01-20 01:08:51 nsc-savvis-disks
2016-01-21 21:57:19 security-collections
2016-01-15 22:05:02 turinggroupbaseiam-cloudtrailbucket-1acrgd625crdz
┌(captain@Macbook)─(✓)─(11:57 AM Thu Dec 22)
└─(~)─(18 files, 1192b)─>

Или, можно вывести список бакетов по конкретному профелю:

$ aws s3api list-buckets --query 'Buckets[].Name' --profile Some_my_profile

Так же, можно просмотреть данные рекурсивно для конкретной корзины:

$ aws s3 ls s3://some_backet --recursive

ИЛИ, вывести сколько занимают данные:

$ aws s3 ls s3://some_backet --recursive --human-readable --summarize

Ничего сложного!

Копирование, удаление, перемещение данных AWS S3 bucket-ов через командную строку в Unix/Linux

В следующем примере объект копируется в bucket (Test_bucket). Ему назначено чтение для всех пользователей и полный доступ (чтение и запись) для учетной записи My_user@linux-notes.org:

$ aws s3 cp file.txt s3://Test_bucket/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=emailaddress=My_user@linux-notes.org

Чтобы указать класс хранения(REDUCED_REDUNDANCY или STANDARD_IA) для объектов которые вы загружаете в S3, используйте опцию —storage-class:

$ aws s3 cp file.txt s3://Test_bucket/ --storage-class REDUCED_REDUNDANCY

Например, давайте скопируем некоторый файл со своего рабочего сервера в бакет:

$ aws s3 cp some_my.txt s3://Test_bucket/some_path_in_backet/

Еще пример,  — например нужно скопировать все *.jpg файлы в s3://Test_bucket/some_path_in_backet  бакете в ./MyDirectory:

$ aws s3 mv s3://Test_bucket/some_path_in_backet ./MyDirectory --exclude '*' --include '*.jpg' --recursive

Если пунктом назначения указан корень bucket-а, то будут скопированы только файлы из указанного каталога:

$ aws s3 cp --recursive /home/user/testdir s3://bucket/

Если указать каталог, то будет скопировано всё дерево файлов/каталогов:

$ aws s3 cp --recursive /home/user/testdir s3://bucket/testdir

Можно копировать данные между S3 бакетами:

$ aws s3 cp s3://some_bucket/test.txt s3://atnother_bucket/test2.txt

Чтобы удалить файл в бакете, используйте:

$ aws s3 rm s3://Test_bucket/some_path_in_backet/some_my.txt

Чтобы удалить весь контент в бакете (рекурсивно), используйте:

$ aws s3 rm s3://Test_bucket/some_path_in_backet --recursive

Вроде бы понятно все.

Синхронизация AWS S3 bucket-ов через командную строку в Unix/Linux

В следующем примере выполняется синхронизация текущего каталога с бакетом:

$ aws s3 sync . s3://Test_bucket/some_path_in_backet

Normally, sync only copies missing or outdated files or objects between the source and target. However, you may supply the —delete option to remove files or objects from the target not present in the source.

Если вы удалили в текущем каталоге файл и хотите чтобы он удалился ( засинкался) в бакете, используйте «—delete» опцию:

$ aws s3 sync . s3://Test_bucket/some_path_in_backet --delete

Действие наоборот:

$ aws s3 sync s3://Test_bucket/some_path_in_backet . --delete

Используем синхронизацию определенного класса:

$ aws s3 sync . s3://Test_bucket/some_path_in_backet --storage-class STANDARD_IA

Команда sync также принимает параметр «—acl», с помощью которого вы можете установить права доступа для файлов, скопированных в S3. Параметр принимает значения private, public-read и public-read-write:

$ aws s3 sync . s3://Test_bucket/some_path_in_backet --acl public-read

Как-то так.

Удаление AWS S3 bucket-ов через командную строку в Unix/Linux

Чтобы удалить бакет, используйте:

┌(captain@Macbook)─(✓)─(12:01 PM Thu Dec 22)
└─(~)─(18 files, 1192b)─> aws s3 rb s3://TEST43432234432
remove_bucket: s3://TEST43432234432/

Так же можно использовать принудительное удаление бакета (если он не пустой). Для этого служит «—force» опция:

$ aws s3 rb s3://bucket-name --force

Вот и все, статья «Работа с AWS S3 через командную строку в Unix/Linux» завершена.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *