Коммандная строка для облака – AWS CLI

30/04/2019


Облачные технологии так или иначе занимают прочное место в IT инфраструктуре организаций. Я говорю в первую очередь о передовых компаниях, которые работают на мировом уровне. Для большинства местных Узбекских компаний публичные облака на сегодняшний день – это все таки редкость. При использовании публичных облаков, компания получает массу преимуществ: нет необходимости содержать свою сложную IT инфраструктуру, платить за лицензии, думать об отказоустойчивости, нанимать различных дорогих квалифичированных специалистов для поддержания всей этой инфраструктуры. Мы по сути сразу берем абстрагированные необходимые вычислительные мощности и используем их под свои приложения.

В этой статье хочется поговорить о сервисах публичного облака Amazon – AWS. А точнее об интерфейсе коммандной строки для управления этими сервисами aws cli. По моему мнению, AWS – это одни из лидеров, если не сказать, что они самые главне пионеры в развитии сервисов публичных облаков. То, что они делают, является примером для всех других игроков в этой области. При обилии имеющихся сервисов и возможностях по их настройке через веб интерфейс, коммандная строка aws cli заментно ускоряет работу по настройке этих сервисов и взаимодействию с ними. Также коммандная строка просто незаменимый инструмент при автоматизации процессов с облаком Amazon.

AWS CLI

Установка утилиты aws cli на Mac OS не занимает много времени и сил. Достаточно использовать комманду (в дистрибутивах Linux установка происходит по аналогичном сценарию, в Windows необходимо будет скачать и установить отдельное приложение):

#brew install awscli

Приложение установлено и его необходимо настроить таким образом, чтобы Вы могли работать со своими инстансами сервисов в облаке Amazon. Для этого выполняем команду:

# aws configure
AWS Access Key ID [None]: SOMEACCESSKEY
AWS Secret Access Key [None]: SOMESECRETACCESSKEY
Default region name [None]: us-west-2
Default output format [None]: json

Данные об Access Key ID и Secret Access Key берем в веб консоли AWS в разделе IAM. Регион выбираем тот, где работают наши сервисы в облаке Amazon. Ну и output format – это то, как будут выглядеть данные, которые выводятся aws cli. Есть несколько вариантов – json, table, text. В данном примере мы выбрали json.

После базовой конфигурации утилиты, можно полноценно работать с различными сервисами AWS. Выполнение комманд проивзодится следующим образом:

# aws service command

В качестве service используется наименование конкретного AWS сервиса. Скажем, виртуальной машины EC2, или стораджа S3. Количество сервисов у AWS несколько десятков.

Приведем несколько примеров использования комманды aws cli

  1. Команда, которая вернет описание работающих инстансов EC2.
# aws ec2 describe-instances
{
    "Reservations": [
        {
            "Groups": [],
            "Instances": [
                {
                    "AmiLaunchIndex": 0,
                    "ImageId": "ami-4b7d572e",
                    "InstanceId": "i-0da5822f670859aac",
                    "InstanceType": "t2.micro",
                    "KeyName": "MyKeyPair",
                    "LaunchTime": "2019-04-27T21:25:31.000Z",
                    "Monitoring": {
                        "State": "disabled"
                    },
                    "Placement": {
                        "AvailabilityZone": "us-east-2c",
                        "GroupName": "",
                        "Tenancy": "default"
                    },
                    "PrivateDnsName": "ip-172-31-39-45.us-east-2.compute.internal",
                    "PrivateIpAddress": "172.31.39.45",
                    "ProductCodes": [],
                    "PublicDnsName": "ec2-3-14-164-77.us-east-2.compute.amazonaws.com",
                    "PublicIpAddress": "3.14.164.77",
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    },
                    "StateTransitionReason": "",
                    "SubnetId": "subnet-d1a1049d",
                    "VpcId": "vpc-8d312de5",
                    "Architecture": "x86_64",
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/sda1",
                            "Ebs": {
                                "AttachTime": "2019-04-27T21:25:31.000Z",
                                "DeleteOnTermination": true,
                                "Status": "attached",
                                "VolumeId": "vol-00426f01518e4f484"
                            }
                        }
                    ],
                    "ClientToken": "",
                    "EbsOptimized": false,
                    "EnaSupport": true,
                    "Hypervisor": "xen",
                    "NetworkInterfaces": [
                        {
                            "Association": {
                                "IpOwnerId": "169385230789",
                                "PublicDnsName": "ec2-3-14-164-77.us-east-2.compute.amazonaws.com",
                                "PublicIp": "3.14.164.77"
                            },
                            "Attachment": {
                                "AttachTime": "2019-04-27T21:25:31.000Z",
                                "AttachmentId": "eni-attach-01b425c87e0b24316",
                                "DeleteOnTermination": true,
                                "DeviceIndex": 0,
                                "Status": "attached"
                            },
                            "Description": "",
                            "Groups": [
                                {
                                    "GroupName": "default",
                                    "GroupId": "sg-fcb3a292"
                                }
                            ],
                            "Ipv6Addresses": [],
                            "MacAddress": "0a:2a:72:f1:69:f6",
                            "NetworkInterfaceId": "eni-0c98a7457507d9421",
                            "OwnerId": "169385230789",
                            "PrivateDnsName": "ip-172-31-39-45.us-east-2.compute.internal",
                            "PrivateIpAddress": "172.31.39.45",
                            "PrivateIpAddresses": [
                                {
                                    "Association": {
                                        "IpOwnerId": "169385230789",
                                        "PublicDnsName": "ec2-3-14-164-77.us-east-2.compute.amazonaws.com",
                                        "PublicIp": "3.14.164.77"
                                    },
                                    "Primary": true,
                                    "PrivateDnsName": "ip-172-31-39-45.us-east-2.compute.internal",
                                    "PrivateIpAddress": "172.31.39.45"
                                }
                            ],
                            "SourceDestCheck": true,
                            "Status": "in-use",
                            "SubnetId": "subnet-d1a1049d",
                            "VpcId": "vpc-8d312de5"
                        }
                    ],
                    "RootDeviceName": "/dev/sda1",
                    "RootDeviceType": "ebs",
                    "SecurityGroups": [
                        {
                            "GroupName": "default",
                            "GroupId": "sg-fcb3a292"
                        }
                    ],
                    "SourceDestCheck": true,
                    "VirtualizationType": "hvm",
                    "CpuOptions": {
                        "CoreCount": 1,
                        "ThreadsPerCore": 1
                    },
                    "CapacityReservationSpecification": {
                        "CapacityReservationPreference": "open"
                    },
                    "HibernationOptions": {
                        "Configured": false
                    }
                }
            ],
            "OwnerId": "169385230789",
            "ReservationId": "r-08ed705b1ee6165bf"
        }
    ]
} 

2. А с помощью этой команды мы создаем сторадж S3.

# aws s3 mb s3://andreyusexample-0000101
make_bucket: andreyusexample-0000101

Комманд для каждого сервиса очень много. С помощью параметра help для нужного сервиса можно уточнить конкретные команды, для работы с сервисом. Плюс документация Amazon по aws cli более чем обширная и качественная. Этого более, чем достаточно, любому специалисту, чтобы освоиться с командной строкой управления облачными ресурсами AWS.

Альтернативные утилиты AWS CLI

Технологии развиваются. Сейчас имеются и другие утилиты, которые позволяют управлять инфраструктурой AWS из командной строки. Это, в первую очередь, aws-shell, а также awless. Первая названная утилита представляет собой надстройку над aws cli, которая обеспечивает выделенную программную оболочку для работы с инфраструктурой Amazon, а также предоставляет подсказки по параметрам конкретной команды aws. Это заметно упрощает работу с командной строкой. При этом синтаксис команд абсолютно аналогичен aws cli.

Вторая утилита awless предлагает иной подход к управлению сервисами. Создатели этой утилиты задумывались упростить работу с AWS в командной строке без привязки к отдельным сервисам. Основной упор делался на удобство работы пользовотелей с этой утилитой.

Резюме

Подводя итог статьи, можно сказать, что возможностей, по управлению IT инфраструктуры AWS в командной строке более чем достаточно. Пытливый ум найдет все, что ему нужно в работе.

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

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