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.
- 64-bit Windows installer
- MacOS PKG installer
- Linux installer
После вполне привычной установки вида “далее - далее - принять соглашение - установить”, в вашей системе появится новое приложение, которое позволит нам управлять облачными сервисами вообще не открывая браузер.
Но сначала его нужно будет сконфигурировать. Если раньше вы не применяли 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) создадим новый профиль
1 2 3 4 5 |
$ aws configure --profile my_user AWS Access Key ID [None]: MB4Q7BBBCD1QZBZCUWAG AWS Secret Access Key [None]: acfhovIkJ1qlgZ7DBdIzYKPPZrUI8cMEzrmbofoi Default region name [None]: us-east-1 Default output format [None]: |
Необходимо ввести такие данные нашего s3 аккаунта как Access Key ID, Secret Access Key, регион выставляем как us-east-1.
Access Key ID и Secret Key можно найти в информации о бакете в панели управления хранилищем.
2) для проверки корректности настроек попробуем вывести на экран список бакетов для данного аккаунта
=====================
Вызов справки для сервиса 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