4 aws Установка и настройка aws-cli

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

Под­клю­че­ние AWS Cli

создай­те ещё одно­го поль­зо­ва­те­ля IAM с Programmatic Access и досту­пом к EC2 (при­со­еди­не­на поли­ти­ка PowerUserAccess или EC2FullAccess)

Даже если веб-интер­фейс вам пока боль­ше по душе, чем тер­ми­нал, ско­ро вы научи­тесь исполь­зо­вать дру­гие спо­со­бы кон­тро­ля облач­ной инфра­струк­ту­рой и, наде­юсь, оце­ни­те их. Сего­дня в пла­нах у нас AWS Cli - самый про­сто и наи­бо­лее “олдскуль­ный” спо­соб рабо­ты с этой плат­фор­мой, поз­во­ля­ю­щий созда­вать сер­ве­ра так же лег­ко, как выпол­нять коман­ды в консоли!

В первую оче­редь, давай­те перей­дём aws.amazon.com/cli. В пра­вой части экра­на при­ве­де­ны ссыл­ки на ска­чи­ва­ние кон­соль­но­го кли­ен­та AWS: в нали­чии вер­сии под Windows, MacOS и, конеч­но, Linux.

После вполне при­выч­ной уста­нов­ки вида “далее - далее - при­нять согла­ше­ние - уста­но­вить”, в вашей систе­ме появит­ся новое при­ло­же­ние, кото­рое поз­во­лит нам управ­лять облач­ны­ми сер­ви­са­ми вооб­ще не откры­вая браузер.

Но сна­ча­ла его нуж­но будет скон­фи­гу­ри­ро­вать. Если рань­ше вы не при­ме­ня­ли AWS Cli и он не был уста­нов­лен, то самый про­стой спо­соб сде­лать это - это коман­да aws configure.  Открой­те команд­ную стро­ку и попро­буй­те выпол­нить эту коман­ду. Если Cli начал запра­ши­вать кон­фи­гу­ра­ци­он­ные дан­ные, зна­чит всё хорошо!

На пер­вый вопрос AWS Access Key ID нуж­но отве­тить Access Key ваше­го IAM поль­зо­ва­те­ля (если вы вдруг созда­ли Access Key для Root поль­зо­ва­те­ля - уда­ли­те его немед­лен­но!). На вто­рой вопрос при­дёт­ся вве­сти Secret Access Key, а на тре­тий - пред­по­чи­та­е­мый регион.

Если вы живё­те бли­же к Евро­пе, то бли­жай­ши­ми реги­о­на­ми будут, ско­рее все­го, eu-central-1 (Франк­фурт) или eu-north-1 (Сток­гольм). Для жите­лей более восточ­ных реги­о­нов бли­жай­шим может ока­зать­ся, напри­мер, ap-northeast-2 (Сеул). Default Output Format пока что луч­ше оста­вить пустым.

Теперь, когда AWS Cli готов к рабо­те, давай­те вызо­вем коман­ду aws ec2 describe-instances. Её лег­ко разобрать:

  • aws - обра­ща­ем­ся к Cli
  • ec2 - будем рабо­тать с сер­ви­сом ECC
  • describe-instances - про­сим пока­зать суще­ству­ю­щие инстансы.

Вы мог­ли уди­вить­ся коли­че­ству выве­ден­ных дан­ных, это нор­маль­но. Дело в том, что по умол­ча­нию EC2 отоб­ра­жа­ет подроб­ную инфор­ма­цию по всем инстан­сам, при­чём не толь­ко запу­щен­ным, но и недав­но уни­что­жен­ным. Таким обра­зом, извлечь что-то полез­ное из тако­го выво­да будет непро­сто. (Если Cli не пока­зал вам боль­шой объ­ём дан­ных, но не выдал и ошиб­ку, зна­чит меж­ду уни­что­же­ни­ем послед­не­го сер­ве­ра и запро­сом дан­ных про­шло слиш­ком мно­го дан­ных. В этом слу­чае сна­ча­ла выпол­ни­те коман­ду aws ec2 run-instances опи­сан­ную в кон­це этой практики)

Давай­те испол­ним эту коман­ду, доба­вив несколь­ко полез­ных опций.

  • --query 'Reservations[*].Instances[*].[InstanceId]' - опция query поз­во­ля­ет уточ­нить, какие имен­но дан­ные нам нуж­ны. В дан­ном слу­чае, нам инте­рес­ны толь­ко идентификаторы.
  • --filters Name=instance-state-name,Values=running - опция filters помо­га­ет отобрать нуж­ные нам ресур­сы, где Name - это имя свой­ства, а Values- зна­че­ния свой­ства. Выгля­дит немно­го гро­мозд­ко, но поз­во­ля­ет филь­тро­вать одним и тем же спо­со­бом по самым раз­ным свой­ствам самых раз­ных ресур­сов. В дан­ном слу­чае мы отби­ра­ем по свой­ству instance-state-name (имя ста­ту­са инстан­са) зна­че­ние “running”, то есть про­сим пока­зать толь­ко запу­щен­ные ноды.
  • --output text - так мы сооб­щим Cli, что вывод дан­ных дол­жен быть в фор­ма­те text, а не json.

Попро­бу­ем цели­ком: aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]' --filters Name=instance-state-name,Values=running --output text

Если запу­щен­ных сер­ве­ров у вас не оста­лось, то и пока­зать Cli ниче­го не смо­жет. Давай­те запу­стим что-нибудь инте­рес­ное? Коман­да будет выгля­деть при­мер­но так:

aws ec2 run-instances --image-id ami-0bd39c806c2335b95 --instance-type t2.micro --key-name Aleks --security-group-ids sg-0c0c45ac39cbd706b

Неко­то­рые зна­че­ния вам при­дёт­ся поме­нять. Раз­бе­рём её по частям:

  • aws ec2 run-instances - эта часть долж­на вам быть уже понят­на: запус­ка­ем сер­ве­ра EC2
  • --image-id ami-0bd39c806c2335b95 - какой AMI исполь­зо­вать. Эта опция тре­бу­ет ука­зать иден­ти­фи­ка­тор AMI, кото­рый будет как отли­чать­ся от реги­о­на к реги­о­ну, так и про­сто менять­ся со вре­ме­нем (обнов­ле­ние AMI, выпуск новых вер­сий и так далее). Вам может пона­до­бить­ся его обно­вить. Узнать акту­аль­ный AMI ID для ваше­го реги­о­на мож­но при помо­щи коман­ды aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[*].[Value]'
  • --instance-type t2.micro - эта опция долж­на быть понят­на без пояс­не­ний - здесь мы ука­зы­ва­ем тип инстан­са t2.micro
  •  --key-name Aleks - мы можем задать keypair, ключ, кото­рый дол­жен быть под­клю­чен к это­му инстан­су. Эту опцию мож­но и убрать, если вы не пла­ни­ру­е­те под­клю­чать­ся к это­му сер­ве­ру по SSH. Если хоти­те оста­вить, ука­жи­те соот­вет­сву­ю­щее имя keypair, создан­но­го вами в преды­ду­щих шагах. Про­смот­реть суще­ству­ю­щие клю­чи мож­но при помо­щи коман­ды aws ec2 describe-key-pairs. Обра­ти­те вни­ма­ние, что ука­зать надо не ID, а имен­но имя ключа
  • --security-group-ids sg-0c0c45ac39cbd706b - послед­нее зна­че­ние, тоже опци­о­наль­ное: иден­ти­фи­ка­тор груп­пы без­опас­но­сти (security group). Про­смот­реть теку­щие груп­пы мож­но в веб-интер­фей­се EC2 или при помо­щи коман­ды aws ec2 describe-security-groups

Нам при­шлось нема­ло потру­дит­ся, но теперь коман­да гото­ва. Давай­те выпол­ним её и посмот­рим на результат:

AWS Cli пока­зы­ва­ет наш инстанс в состо­я­нии pending, сей­час он нахо­дит­ся в про­цес­се запус­ка. Разу­ме­ет­ся, его же мож­но най­ти во вклад­ке Instances сер­ви­са EC2.

==============================================================================

 

  • AWS CLI — интер­фейс команд­ной стро­ки AWS.

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

Установка (Centos 7)

Для уста­нов­ки aws-cli мы вос­поль­зу­ем­ся pip3, мене­дже­ром паке­тов язы­ка python, посколь­ку счи­та­ем такой спо­соб наи­бо­лее удобным.
Дру­гие спо­со­бы уста­нов­ки aws-cli мож­но най­ти в офи­ци­аль­ной доку­мен­та­ции дан­ной утилиты.

1) уста­но­вим мене­джер паке­тов pip3
$ sudo yum install python3-pip -y
$ pip3 --version
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)

2) уста­но­вим ути­ли­ту aws-cli
$ sudo pip3 install awscli
$ aws --version

aws-cli/1.18.87 Python/3.6.8 Linux/3.10.0-1127.10.1.el7.x86_64 botocore/1.17.10

Настройка

Ути­ли­та поз­во­ля­ет исполь­зо­вать несколь­ко про­фи­лей настро­ек. Дан­ные про­фи­лей хра­нят­ся в дирек­то­рии ~/.aws/credentials.

1) созда­дим новый профиль

 

Необ­хо­ди­мо вве­сти такие дан­ные наше­го s3 акка­ун­та как Access Key IDSecret Access Key, реги­он выстав­ля­ем как us-east-1.
Access Key ID и Secret Key мож­но най­ти в инфор­ма­ции о баке­те в пане­ли управ­ле­ния хранилищем.

2) для про­вер­ки кор­рект­но­сти настро­ек попро­бу­ем выве­сти на экран спи­сок баке­тов для дан­но­го аккаунта

Посколь­ку мы исполь­зу­ем наше част­ное s3-compatible обла­ко а не пло­щад­ку AWS, вме­сте с коман­дой мы долж­ны ука­зать так назы­ва­е­мый endpoint, или URL точ­ки вхо­да в наше s3 хранилище.

Если на экране отоб­ра­зил­ся спи­сок баке­тов, то уста­нов­ку и настрой­ку мож­но счи­тать завершенной.

 

 

 

 

=====================

Вызов справ­ки для сер­ви­са s3
$ aws s3 help
NAME
s3 -
DESCRIPTION
This section explains prominent concepts and notations in the set of
high-level S3 commands provided.

Вызов справ­ки для коман­ды ls сер­ви­са s3
$ aws s3 ls help
NAME
ls -
DESCRIPTION
List S3 objects and common prefixes under a prefix or all S3 buckets.
Note that the --output and --no-paginate arguments are ignored for this
command.

Полу­че­ние спис­ка всех баке­тов (коман­да ls)
$ aws s3 ls --profile=my_user --endpoint=https://s3.pilw.io
2020-03-04 16:03:46 example
2020-03-14 14:55:10 gallery
2020-03-14 16:18:51 tempora

Созда­ние ново­го баке­та (коман­да mb)
$ aws s3 mb s3://testing_aws_cli --profile=my_user --endpoint=https://s3.pilw.io
make_bucket: testing_aws_cli

Загруз­ка фай­ла в бакет (коман­да cp)
Спер­ва созда­дим новый файл:

$ echo "hello world" > hello.txt
Загру­жа­ем файл в создан­ный ранее бакет testing_aws_cli:

$ aws s3 cp hello.txt s3://testing_aws_cli --profile=my_user --endpoint=https://s3.pilw.io
upload: ./hello.txt to s3://testing_aws_cli/hello.txt

Ска­чи­ва­ние фай­ла из баке­та (коман­да cp)
В дан­ном при­ме­ре testing_aws_cli — имя баке­та а hello.txt — загру­жен­ный ранее файл.

$ aws s3 cp s3://testing_aws_cli/hello.txt ./hello.txt.new --profile=my_user --endpoint=https://s3.pilw.io
download: s3://testing_aws_cli/hello.txt to ./hello.txt.new

Уда­ле­ние фай­ла из баке­та (коман­да rm)
$ aws s3 rm s3://testing_aws_cli/hello.txt --profile=my_user --endpoint=https://s3.pilw.io
delete: s3://testing_aws_cli/hello.txt

Син­хро­ни­за­ция локаль­ной дирек­то­рии с s3 (коман­да sync)
Соза­дим дирек­то­рию и несколь­ко фай­лов в ней:

$ mkdir ./example
$ echo 'this is file1' > ./example/file1
$ echo 'this is file2' > ./example/file2
$ echo 'this is file3' > ./example/file3

 

Выпол­ним синхронизацию:

$ aws s3 sync ./example s3://testing_aws_cli/backup/
upload: example/file1 to s3://testing_aws_cli/backup/file1
upload: example/file2 to s3://testing_aws_cli/backup/file2
upload: example/file3 to s3://testing_aws_cli/backup/file3

В дан­ном при­ме­ре testing_aws_cli — имя баке­та, /backup — так назы­ва­е­мый префикс.

 

Уда­ле­ние содер­жи­мо­го бакета
$ aws s3 rm s3://testing_aws_cli --recursive --profile=my_user --endpoint=https://s3.pilw.io
delete: s3://testing_aws_cli/backup/file1
delete: s3://testing_aws_cli/backup/file2
delete: s3://testing_aws_cli/backup/file3

Уда­ле­ние бакета
$ aws s3api delete-bucket --bucket testing_aws_cli --profile=my_user --endpoint=https://s3.pilw.io