Установка AWS CLI, работа из командной строки с ELB/S3/EC2/IAM/

Thank you for reading this post, don't forget to subscribe!

1.Установка aws cli
2.Работа с aws cli
3.Работа с AWS S3
4.Работа с AWS EC2
5.Работа с AWS ELB
6.Работа с AWS IAM

 

AWS CLI — интер­фейс команд­ной стро­ки AWS – это еди­ный инстру­мент для управ­ле­ния сер­ви­са­ми AWS. Загру­зив все­го одно сред­ство, вы смо­же­те кон­тро­ли­ро­вать мно­же­ство сер­ви­сов AWS из команд­ной стро­ки и авто­ма­ти­зи­ро­вать их с помо­щью скриптов.

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

Сей­час я рас­ска­жу как мож­но уста­но­вить AWS CLI на неко­то­рые Unix/Linux ОС.

Для нача­ла, уста­нав­ли­ва­ем PIP:

$ yum install https://centos7.iuscommunity.org/ius-release.rpm
$ yum install python36u python36u-devel python36u-pip

Установка AWS CLI в CentOS/Fedora/RedHat

-===СПОСОБ 1- исполь­зо­вать PIP===-

Если у вас уже есть pip и под­дер­жи­ва­е­мая вер­сия Python, вы може­те уста­но­вить CLI AWS с помо­щью сле­ду­ю­щей команды:

$ pip install --upgrade --user awscli

Что­бы обно­вить CLI AWS, запу­сти­те команду:

$ pip install --upgrade --user awscli

Что­бы уда­лить CLI AWS, исполь­зуй­те команду:

$ pip uninstall awscli

Что­бы узнать вер­сию AWS CLI выполните:

$ aws --version

PS: Для python3 исполь­зуй­те pip3!

-===СПОСОБ 2- исполь­зо­вать easy_install===-

# easy_install awscli

-===СПОСОБ 3- исполь­зо­вать git репозиторий===-

$ cd /usr/local/src && git clone https://github.com/aws/aws-cli.git
# cd aws-cli && python setup.py install
PS: Мож­но исполь­зо­вать python3!

Работа с AWS CLI в Unix/Linux

После уста­нов­ки AWS CLI, нуж­но про­пи­сать клю­чи­ки. Открываем:

# vim ~/.aws/credentials
И про­пи­сы­ва­ем (при­мер):

PS: Так же, мож­но доба­вить реги­он (напри­мер):
region=us-east-1
Мож­но не откры­вать файл, а выпол­нить сле­ду­ю­щую команду:
$ aws configure

И нам пред­ла­га­ют вве­сти неко­то­рые данные:


Они будут запи­са­ны в дефолт­ное зна­че­ния ( в фай­ле ~/.aws/config):
$ cat ~/.aws/config
Если у вас несколь­ко про­фи­лей, вы може­те настро­ить допол­ни­тель­ные име­но­ван­ные про­фи­ли с помо­щью пара­мет­ра —profile:

 

Работа с AWS S3

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

# 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 нач­нет­ся непо­сред­ствен­но, с созда­ния само­го бакета.

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

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

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

aws s3 ls s3://TEST43432234432

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

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

$ 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@test.ru:

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

Что­бы ука­зать класс хранения(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

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

aws s3 rb s3://TEST43432234432
remove_bucket: s3://TEST43432234432/

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

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

 

Работа с AWS EC2

Откры­ва­ем конфиг:
# 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 EC2 через командную строку в Unix/Linux

И так, что­бы про­смот­реть име­ю­щи­е­ся волью­мы для кон­крет­но­го про­фи­ля, используйте:

$ aws ec2 --profile Reaxys describe-volumes

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

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes

Так же, мож­но region ука­зать в конфиг-файле.

Что­бы рас­пе­ча­тать толь­ко 1-ю volume, используйте:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[0]'

Что­бы рас­пе­ча­тать все волю­мы, используйте:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*]'

Мож­но выво­дить не все пара­мет­ры, а толь­ко опре­де­лен­ные, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].{ID:VolumeId,AZ:AvailabilityZone,Size:Size}'
Вот еще пример:
$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}'

Мож­но выве­сти волю­мы с опре­де­лен­но­го реги­о­на, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[?AvailabilityZone==`us-east-1d`]'
Мож­но выво­дить содер­жа­ние в виде тек­ста, например:
$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, Size, FakeKey]' --output text
Доба­вил пара­метр для выво­да состо­я­ния вольюмы:
$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, State, Size, FakeKey]' --output text

Очень удоб­но и нагляд­но исполь­зо­вать вывод в виде столб­цов, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}' --output table

 

Про­ве­рим доступ­ность зон:

$ aws ec2 --profile Reaxys --region us-east-1 describe-availability-zones

Что­бы полу­чить опи­са­ние всех име­джей, выполните:

$ aws ec2 --profile Reaxys --region us-east-1 describe-images
Или, для определенного:
$ aws ec2 --profile Reaxys --region us-east-1 describe-images --image-ids "ami-f480c59e"

Генерация CLI Skeleton через командную строку в Unix/Linux

Боль­шин­ство команд CLI под­дер­жи­ва­ют пара­мет­ры «-generate-cli-skeleton» и «-cli-input-json», кото­рые вы може­те исполь­зо­вать для хра­не­ния пара­мет­ров в JSON и читать их из фай­ла, а не вво­дить их в команд­ной строке.

И так, сге­не­ри­ру­ем скелетон:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --generate-cli-skeleton --dry-run

PS: Опция «—dry-run» слу­жит для тести­ро­ва­ния ( она не созда­ет ника­ких изменений).

Мож­но сохра­нить вывод в файл:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --generate-cli-skeleton > ec2runinst.json

Мож­но открыть дан­ный файл и вне­сти изме­не­ния ( напри­мер уда­лить не нуж­ное или что-то добавить).

Пере­дай­те кон­фи­гу­ра­цию JSON-у:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --cli-input-json file://ec2runinst.json

Перезапуск AWS EC2 инстенсов через командную строку в Unix/Linux

Смот­рим какие имеются:

$ aws ec2 --profile Reaxys --region us-east-1 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,State.Name]' --output text

И, соб­ствен­но, ребутаем:

$ aws ec2 --profile Reaxys --region us-east-1 reboot-instances --instance-ids i-09aa273c40cb05767 --dry-run

PS: Я исполь­зую «—dry-run» опцию для тестов. С дан­ной опци­ей не про­изой­дет рестарт инстенса.

В AWS CLI для EC2 нет ниче­го слож­но­го. Нуж­но почи­тать доку­мен­та­цию и вник­нуть в процесс.

Для помо­щи, используйте:

$ aws ec2 help

 

Работа с AWS ELB

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

# 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 — Еще один ключик.

Созда­ние, уда­ле­ние я не выпол­нял еще. А вот про­смотр дан­ных — это да. Сей­час я пока­жу неко­то­рые при­ме­ры использования.

Про­ве­рим что содер­жит­ся во всех LB по опре­де­лен­но­му аккаунту:

$ aws elb describe-load-balancers --profile Your_acc_name --region us-east-1 --output text

или

$ aws elb describe-load-balancers --profile Your_acc_name --region us-east-1 --output json

Для того, что­бы полу­чить име­на всех ELB, выполните:

$ aws elb describe-load-balancers --profile Your_acc_name --region us-east-1 | grep -E "LoadBalancerName"

Про­ве­рим что име­ет­ся в опре­де­лен­ном ELB:

$ aws elb describe-load-balancers --profile Your_acc_name --region us-east-1 --load-balancer-name My_ELB_name

Ино­гда, выпа­да­ют ноды из кла­сте­ра и что­бы про­ве­рить ста­тус хел­са всех нод в кла­сте­ре ELB ( нуж­но знать имя. Я в вер­ху опи­сы­вал как полу­чить его):

Я ука­зал какой реги­он использовать:

--region us-east-1

Мож­но доба­вить дан­ную опцию в кон­фи­гу­ра­ци­он­ный файл, например:

[Your_acc_name]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYY
region=us-east-1

Тогда, мож­но будет выполнять:

$ aws elb describe-instance-health --profile Your_acc_name --output text --load-balancer-name My_ELB_name

Пред­по­ло­жим, что необ­хо­ди­мо убрать одну из нод в ELB кла­сте­ре, то выпол­нить это мож­но так:

$ aws elb deregister-instances-from-load-balancer --profile Your_acc_name --load-balancer-name My_ELB_name --instances i-08e1958dfd3df0989
Пред­по­ло­жим, что необ­хо­ди­мо доба­вить еще одну ноду в ELB кла­стер, то выпол­нить это мож­но так:
$ aws elb register-instances-with-load-balancer --profile Your_acc_name --load-balancer-name My_ELB_name --instances i-08e1958dfd3df0989
PS: Воз­мож­но, потре­бу­ет­ся ука­зать реги­о­на, например:
--region us-east-1

Работа с AWS IAM

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

# 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 services и выби­ра­ем IAM -> Созда­ем груп­пу, роль, поли­си и юзе­ра ( с нуж­ны­ми правами).

Создание/Удаление группы через командную строку в Unix/Linux

И так, созда­дим группу:

Для про­смот­ра групп, используйте:

$ aws iam list-groups

Что­бы уда­лить ненуж­ную груп­пу, используйте:

$ aws iam delete-group --group-name=test

И так, груп­па созда­на ( у меня она назы­ва­ет­ся test).

Смот­рим какие поли­си были назна­че­ны группе:

$ aws iam list-attached-group-policies --group-name test

Что­бы пере­име­но­вать груп­пу, исполь­зуй­те сле­ду­ю­щую команду:

$ aws iam update-group --group-name Test --new-group-name Test-1

Создание/Удаление пользователя через командную строку в Unix/Linux

И так, созда­дим юзерa:

$ aws iam create-user --user-name=test

Для про­смот­ра поль­зо­ва­те­лей, используйте:

$ aws iam list-users
Доба­вим создан­но­го юзе­ра в группу:
$ aws iam add-user-to-group --group-name=test --user-name=test

Что­бы посмот­реть в каких груп­пах состо­ит юзер, используйте:

$ aws iam list-groups-for-user --user-name test

Роль и поли­си созда­ют­ся ана­ло­гич­ны­ми дей­стви­я­ми. Я буду исполь­зо­вать стан­дарт­ные роли и поли­си. И так, давай­те доба­вим неко­то­рые пра­ва пользователю.

Что­бы пере­име­но­вать поль­зо­ва­те­ля, исполь­зуй­те сле­ду­ю­щую команду:

$ aws iam update-user --user-name test --new-user-name test-1

Создание/Удаление роли/полиси через командную строку в Unix/Linux

Для нача­ла, посмот­рим какие поли­си имеются:

$ aws iam list-policies

ИЛИ, для кон­крет­но­го пользователя:

$ aws iam list-user-policies --user-name test

И так, доба­вим неко­то­рую полис для юзверя:

$ aws iam attach-user-policy --policy-arn=arn:aws:iam::aws:policy/CloudWatchEventsFullAccess --user-name=test

PS: Мож­но дать пол­ные пра­ва юзеру:

$ aws iam attach-user-policy --policy-arn=arn:aws:iam::aws:policy/AdministratorAccess --user-name=test

Для про­смот­ра используем:

$ aws iam list-attached-user-policies --user-name test

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

$ aws iam detach-user-policy --policy-arn=arn:aws:iam::aws:policy/CloudWatchEventsFullAccess --user-name=test

Для про­смот­ра ролей, используйте:

$ aws iam list-roles

Создание/Удаление алиаса для входа

Сей­час, вы вхо­ди­те по тако­му принципу:

https://Your_AWS_Account_ID.signin.aws.amazon.com/console/

Где,  Your_AWS_Account_ID — это ваш номер акка­ун­та в виде цифр. Как по мне, его нету смыс­ла запо­ми­нать и это не есть удоб­ным реше­ни­ем, по это­му — я пред­ла­гаю создать удоб­ный для запо­ми­на­ния али­ас. Что­бы задать али­ас, используйте:

$ aws iam create-account-alias --account-alias My_alias_name

и сей­час, мож­но перей­ти по тако­му УРЛу:

https://My_alias_name.signin.aws.amazon.com/console/

Что­бы про­ве­рить име­ю­щи­е­ся али­а­сы, используйте:

$ aws iam list-account-aliases

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

$ aws iam delete-account-alias --account-alias My_alias_name

Создание/Удаление ключей для пользователей

Для созда­ния клю­чей для кон­крет­но­го поль­зо­ва­те­ля, используйте:

$ aws iam create-access-key --user-name=test

Дан­ная коман­да выве­дет на экран ключики.

Сей­час, я добав­лю сге­не­ри­ро­ван­ный ключ поль­зо­ва­те­лю ( ста­тус будет — инак­тив. Т.е не активный):

$ aws iam update-access-key --access-key-id=AKIAJ44TBBGGHN64K3PQ --status Inactive --user-name=test

PS: Как я уже гово­рил, дан­ный ключ не будет исполь­зо­вать­ся т.к он неак­тив­ный. Что­бы он стал актив­ным, про­пи­ши­те в коман­де что выше:

--status Active

Для про­смот­ра используйте:

$ aws iam list-access-keys --user-name test

Для уда­ле­ния, слу­жит сле­ду­ю­щая команда:

$ aws iam delete-access-key --access-key AKIAJ44TBBGGHN64K3PQ --user-name test

Работа с паролями

Смот­рим поли­ти­ку по паролем:

$ aws iam get-account-password-policy

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

$ aws iam update-account-password-policy --minimum-password-length 8 --require-numbers

Обнов­ля­ем пароль и логин для пользователя:

$ aws iam update-login-profile --user-name test --password My_password

Работа с aws Instance Profile

Смот­рим какие имеются:

$ aws iam list-instance-profiles

Что­бы уда­лить, выполните:

$ aws iam delete-instance-profile --instance-profile-name profile_name_here

Где:

  • profile_name_here — Имя профиля.