Работа с 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» завершена.